* tdbio.h, tdbio.c (tdbio_read_record, tdbio_write_record): Store trust
[gnupg.git] / g10 / plaintext.c
index b12fb0f..a248598 100644 (file)
@@ -25,7 +25,7 @@
 #include <errno.h>
 #include <assert.h>
 #ifdef HAVE_DOSISH_SYSTEM
-  #include <fcntl.h> /* for setmode() */
+#  include <fcntl.h> /* for setmode() */
 #endif
 
 #include "util.h"
@@ -55,6 +55,9 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
     int rc = 0;
     int c;
     int convert = pt->mode == 't';
+#ifdef __riscos__
+    int filetype = 0xfff;
+#endif
 
     /* create the filename as C string */
     if( nooutput )
@@ -85,9 +88,9 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
     else if( !*fname || (*fname=='-' && !fname[1])) {
        /* no filename or "-" given; write to stdout */
        fp = stdout;
-      #ifdef HAVE_DOSISH_SYSTEM
+#ifdef HAVE_DOSISH_SYSTEM
        setmode ( fileno(fp) , O_BINARY );
-      #endif
+#endif
     }
     else {
        while( !overwrite_filep (fname) ) {
@@ -102,17 +105,44 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
         }
     }
 
+#ifndef __riscos__
     if( fp || nooutput )
        ;
     else if( !(fp = fopen(fname,"wb")) ) {
        log_error(_("error creating `%s': %s\n"), fname, strerror(errno) );
        rc = G10ERR_CREATE_FILE;
-#ifdef __riscos__
-        if (errno == 106)
-            log_info("perhaps the output file has the same name as the input file?\n");
-#endif /* __riscos__ */
        goto leave;
     }
+#else /* __riscos__ */
+    /* Convert all '.' in fname to '/' -- we don't create directories! */
+    for( c=0; fname[c]; ++c )
+        if( fname[c] == '.' )
+            fname[c] = '/';
+
+    if( fp || nooutput )
+       ;
+    else {
+        fp = fopen(fname,"wb");
+        if( !fp ) {
+            log_error(_("error creating `%s': %s\n"), fname, strerror(errno) );
+            rc = G10ERR_CREATE_FILE;
+            if (errno == 106)
+                log_info("Do output file and input file have the same name?\n");
+            goto leave;
+       }
+
+        /* If there's a ,xxx extension in the embedded filename,
+           use that, else check whether the user input (in fname)
+           has a ,xxx appended, then use that in preference */
+        if( (c = riscos_get_filetype_from_string( pt->name,
+                                                  pt->namelen )) != -1 )
+            filetype = c;
+        if( (c = riscos_get_filetype_from_string( fname,
+                                                  strlen(fname) )) != -1 )
+            filetype = c;
+        riscos_set_filetype_by_number(fname, filetype);
+    }
+#endif /* __riscos__ */
 
     if( !pt->is_partial ) {
         /* we have an actual length (which might be zero). */
@@ -127,10 +157,10 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
                }
                if( mfx->md )
                    md_putc(mfx->md, c );
-             #ifndef HAVE_DOSISH_SYSTEM
+#ifndef HAVE_DOSISH_SYSTEM
                if( c == '\r' )  /* convert to native line ending */
                    continue;    /* fixme: this hack might be too simple */
-             #endif
+#endif
                if( fp ) {
                    if( putc( c, fp ) == EOF ) {
                        log_error("Error writing to `%s': %s\n",
@@ -174,10 +204,10 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
            while( (c = iobuf_get(pt->buf)) != -1 ) {
                if( mfx->md )
                    md_putc(mfx->md, c );
-             #ifndef HAVE_DOSISH_SYSTEM
+#ifndef HAVE_DOSISH_SYSTEM
                if( convert && c == '\r' )
                    continue; /* fixme: this hack might be too simple */
-             #endif
+#endif
                if( fp ) {
                    if( putc( c, fp ) == EOF ) {
                        log_error("Error writing to `%s': %s\n",