Enable FD passing and thus building of the UI-server.
[gpgme.git] / src / data-compat.c
index 0843ffd..e9ca90a 100644 (file)
@@ -1,18 +1,18 @@
 /* data-compat.c - Compatibility interfaces for data objects.
    Copyright (C) 2002, 2003, 2004, 2007 g10 Code GmbH
+
    This file is part of GPGME.
+
    GPGME is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as
    published by the Free Software Foundation; either version 2.1 of
    the License, or (at your option) any later version.
-   
+
    GPGME is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
-   
+
    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
@@ -26,7 +26,9 @@
 #ifdef HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
-#include <sys/stat.h>
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
 #include <stdlib.h>
 
 #include "data.h"
@@ -41,6 +43,9 @@ gpgme_error_t
 gpgme_data_new_from_filepart (gpgme_data_t *r_dh, const char *fname,
                              FILE *stream, off_t offset, size_t length)
 {
+#if defined (HAVE_W32CE_SYSTEM) && defined (_MSC_VER)
+  return gpgme_error (GPG_ERR_NOT_IMPLEMENTED);
+#else
   gpgme_error_t err;
   char *buf = NULL;
   int res;
@@ -55,7 +60,7 @@ gpgme_data_new_from_filepart (gpgme_data_t *r_dh, const char *fname,
   if (fname)
     stream = fopen (fname, "rb");
   if (!stream)
-    return TRACE_ERR (gpg_error_from_errno (errno));
+    return TRACE_ERR (gpg_error_from_syserror ());
 
 #ifdef HAVE_FSEEKO
   res = fseeko (stream, offset, SEEK_SET);
@@ -66,31 +71,31 @@ gpgme_data_new_from_filepart (gpgme_data_t *r_dh, const char *fname,
 
   if (res)
     {
-      int saved_errno = errno;
+      int saved_err = gpg_error_from_syserror ();
       if (fname)
        fclose (stream);
-      return TRACE_ERR (gpg_error_from_errno (saved_errno));
+      return TRACE_ERR (saved_err);
     }
 
   buf = malloc (length);
   if (!buf)
     {
-      int saved_errno = errno;
+      int saved_err = gpg_error_from_syserror ();
       if (fname)
        fclose (stream);
-      return TRACE_ERR (gpg_error_from_errno (saved_errno));
+      return TRACE_ERR (saved_err);
     }
 
   while (fread (buf, length, 1, stream) < 1
         && ferror (stream) && errno == EINTR);
   if (ferror (stream))
     {
-      int saved_errno = errno;
+      int saved_err = gpg_error_from_syserror ();
       if (buf)
        free (buf);
       if (fname)
        fclose (stream);
-      return TRACE_ERR (gpg_error_from_errno (saved_errno));
+      return TRACE_ERR (saved_err);
     }
 
   if (fname)
@@ -109,6 +114,7 @@ gpgme_data_new_from_filepart (gpgme_data_t *r_dh, const char *fname,
   (*r_dh)->data.mem.length = length;
 
   return TRACE_SUC1 ("r_dh=%p", *r_dh);
+#endif
 }
 
 \f
@@ -117,6 +123,9 @@ gpgme_data_new_from_filepart (gpgme_data_t *r_dh, const char *fname,
 gpgme_error_t
 gpgme_data_new_from_file (gpgme_data_t *r_dh, const char *fname, int copy)
 {
+#if defined (HAVE_W32CE_SYSTEM) && defined (_MSC_VER)
+  return gpgme_error (GPG_ERR_NOT_IMPLEMENTED);
+#else
   gpgme_error_t err;
   struct stat statbuf;
   TRACE_BEG3 (DEBUG_DATA, "gpgme_data_new_from_filepart", r_dh,
@@ -126,10 +135,11 @@ gpgme_data_new_from_file (gpgme_data_t *r_dh, const char *fname, int copy)
     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
 
   if (stat (fname, &statbuf) < 0)
-    return TRACE_ERR (gpg_error_from_errno (errno));
+    return TRACE_ERR (gpg_error_from_syserror ());
 
   err = gpgme_data_new_from_filepart (r_dh, fname, NULL, 0, statbuf.st_size);
   return TRACE_ERR (err);
+#endif
 }
 
 \f
@@ -237,8 +247,8 @@ gpgme_data_rewind (gpgme_data_t dh)
   gpgme_error_t err;
   TRACE_BEG (DEBUG_DATA, "gpgme_data_rewind", dh);
 
-  err = (gpgme_data_seek (dh, 0, SEEK_SET) == -1)
-    ? gpg_error_from_errno (errno) : 0;
+  err = ((gpgme_data_seek (dh, 0, SEEK_SET) == -1)
+         ? gpg_error_from_syserror () : 0);
 
   return TRACE_ERR (err);
 }