./autogen.sh --build-w32ce does now succeed.
[gnupg.git] / g10 / openfile.c
index 5908b2e..101a0f1 100644 (file)
@@ -1,6 +1,6 @@
 /* openfile.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- *               2005, 2009 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009,
+ *               2010 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
 #define CMP_FILENAME(a,b) strcmp( (a), (b) )
 #endif
 
-#ifdef MKDIR_TAKES_ONE_ARG
-#undef mkdir
-#define mkdir(a,b) mkdir(a)
-#endif
 
 /* FIXME:  Implement opt.interactive. */
 
@@ -178,27 +174,22 @@ ask_outfile_name( const char *name, size_t namelen )
  * Mode 0 = use ".gpg"
  *     1 = use ".asc"
  *     2 = use ".sig"
-
- * If INP_FD is not GNUPG_INVALID_FD the function will simply create
- * an IOBUF for that file descriptor and ignore a INAME and MODE.
- * Note that INP_FD won't be closed if the returned IOBUF is closed.
+ *
+ * If INP_FD is not -1 the function simply creates an IOBUF for that
+ * file descriptor and ignorea INAME and MODE.  Note that INP_FD won't
+ * be closed if the returned IOBUF is closed.
  */
 int
-open_outfile (gnupg_fd_t inp_fd, const char *iname, int mode, iobuf_t *a)
+open_outfile (int inp_fd, const char *iname, int mode, iobuf_t *a)
 {
   int rc = 0;
 
   *a = NULL;
-  if (inp_fd != GNUPG_INVALID_FD)
+  if (inp_fd != -1)
     {
       char xname[64];
-      gnupg_fd_t fd2;
       
-      fd2 = INT2FD (dup (FD2INT (inp_fd)));
-      if (fd2 == GNUPG_INVALID_FD)
-        *a = NULL;
-      else
-        *a = iobuf_fdopen (fd2, "wb");
+      *a = iobuf_fdopen_nc (inp_fd, "wb");
       if (!*a)
         {
           rc = gpg_error_from_syserror ();
@@ -289,7 +280,7 @@ open_outfile (gnupg_fd_t inp_fd, const char *iname, int mode, iobuf_t *a)
           if (is_secured_filename (name) )
             {
               *a = NULL;
-              errno = EPERM;
+              gpg_err_set_errno (EPERM);
             }
           else
             *a = iobuf_create (name);
@@ -305,7 +296,7 @@ open_outfile (gnupg_fd_t inp_fd, const char *iname, int mode, iobuf_t *a)
     }
   
   if (*a)
-    iobuf_ioctl (*a, 3, 1, NULL); /* Disable fd caching.  */
+    iobuf_ioctl (*a, IOBUF_IOCTL_NO_CACHE, 1, NULL);
 
   return rc;
 }
@@ -334,7 +325,7 @@ open_sigfile( const char *iname, progress_filter_context_t *pfx )
               {
                 iobuf_close (a);
                 a = NULL;
-                errno = EPERM;
+                gpg_err_set_errno (EPERM);
               }
            if( a && opt.verbose )
                log_info(_("assuming signed data in `%s'\n"), buf );
@@ -371,7 +362,7 @@ copy_options_file( const char *destdir )
       {
         fclose (src);
         src = NULL;
-        errno = EPERM;
+        gpg_err_set_errno (EPERM);
       }
     if( !src ) {
        log_info (_("can't open `%s': %s\n"), fname, strerror(errno) );
@@ -383,7 +374,7 @@ copy_options_file( const char *destdir )
     if ( is_secured_filename (fname) )
       {
         dst = NULL;
-        errno = EPERM;
+        gpg_err_set_errno (EPERM);
       }
     else
       dst = fopen( fname, "w" );
@@ -449,12 +440,11 @@ try_make_homedir (const char *fname)
 #endif
       )
     {
-      if ( mkdir (fname, S_IRUSR|S_IWUSR|S_IXUSR) )
+      if (gnupg_mkdir (fname, "-rwx"))
         log_fatal ( _("can't create directory `%s': %s\n"),
                     fname, strerror(errno) );
       else if (!opt.quiet )
         log_info ( _("directory `%s' created\n"), fname );
       copy_options_file( fname );
-      
     }
 }