First steps towards the W32CE port
authorWerner Koch <wk@gnupg.org>
Tue, 2 Mar 2010 21:25:08 +0000 (21:25 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 2 Mar 2010 21:25:08 +0000 (21:25 +0000)
17 files changed:
common/ChangeLog
common/convert.c
common/estream-printf.c
common/estream-printf.h
common/estream.c
common/estream.h
common/gettime.c
common/homedir.c
common/http.c
common/i18n.c
common/iobuf.c
common/membuf.c
common/signal.c
common/sysutils.c
common/util.h
common/xreadline.c
configure.ac

index 19ccd79..d63b365 100644 (file)
@@ -1,3 +1,33 @@
+2010-03-02  Werner Koch  <wk@g10code.com>
+
+       * estream.c, estream.h, estream-printf.c, estream-printf.h: Update
+       from libestream.
+
+2010-03-01  Werner Koch  <wk@g10code.com>
+
+       * signal.c [!HAVE_SIGNAL_H]: Don't include signal.h.
+
+       * iobuf.c (direct_open) [W32CE]: Make filename to wchar_t.
+       (iobuf_cancel) [W32CE]: Use DeleteFile.
+
+       * gettime.c (dump_isotime): Use "%s" to print "none".
+
+       * homedir.c (standard_homedir) [W32CE]: Use wchar_t to create the
+       directory.
+       (w32_rootdir) [W32CE]: Likewise.
+
+       * sysutils.c (translate_sys2libc_fd) [W32CE]: Add support.
+       (gnupg_tmpfile) [W32CE]: Ditto.
+       (_gnupg_getenv) [W32CE]: New.
+
+       * util.h (getpid, getenv) [W32CE]: New.
+
+       * i18n.c (i18n_switchto_utf8)
+       (i18n_switchback) [USE_SIMPLE_GETTEXT]: Use new function from
+       libgpg-error which supports proper restoring.
+
+       * sysutils.c (get_session_marker): Simplified by using gcrypt.
+
 2009-12-08  Marcus Brinkmann  <marcus@g10code.de>
 
        * Makefile.am (audit-events.h, status.h) [!MAINTAINER_MODE]: No
 
        * percent.c, t-percent.c: New.
 
-       * exechelp.c (gnupg_spawn_process, gnupg_spawn_process_fd) 
+       * exechelp.c (gnupg_spawn_process, gnupg_spawn_process_fd)
        (gnupg_spawn_process_detached) [W32]: Remove debug output.
 
 2008-11-20  Werner Koch  <wk@g10code.com>
 
 2007-11-05  Werner Koch  <wk@g10code.com>
 
-       * audit.c, audit.h: New. 
+       * audit.c, audit.h: New.
        * Makefile.am: Add rules to build audit-events.h.
        * exaudit.awk: New.
        * mkstrtable.awk: New.  Taken from libgpg-error.
        (gnupg_create_inbound_pipe): New.
        * util.h (GNUPG_MODULE_NAME_GPGSM, GNUPG_MODULE_NAME_GPG): New.
        * homedir.c (gnupg_module_name): Add them
-       
+
 2007-08-28  Werner Koch  <wk@g10code.com>
 
        * gettime.c (check_isotime, add_isotime): New.  Originally written
 2007-08-22  Werner Koch  <wk@g10code.com>
 
        Updated estream from libestream.
-       
+
        * estream.c (mem_malloc, mem_realloc, mem_free): New.  Use them
        instead of the ES_MEM_foo.
        * estream.c (estream_cookie_mem): Remove members DONT_FREE,
 
 2007-07-05  Werner Koch  <wk@g10code.com>
 
-       * t-gettime.c: New. 
+       * t-gettime.c: New.
        * gettime.c (isotime2epoch, epoch2isotime): New.
 
 2007-07-04  Werner Koch  <wk@g10code.com>
        (iobuf_translate_file_handle): Remove.
        (translate_file_handle): Use new function.
 
-       * estream-printf.c [TEST]: Header including fixes. 
+       * estream-printf.c [TEST]: Header including fixes.
        (do_format): Do not append a trailing Nul.  This avoids spurious
        Nuls in the es_printf output.
        (estream_vsnprintf, estream_vasprintf): Take this in account.
        (es_convert_mode): Set O_BINARY.
        (es_func_fd_create, es_func_fp_create, es_func_file_create) [W32]:
        Call setmode if requested.
-       
+
 2007-06-24  Werner Koch  <wk@g10code.com>
 
        * estream.c (do_fpopen, es_fpopen, es_fpopen_nc): New.
-       (es_func_fp_create, es_func_fp_read, es_func_fp_write) 
+       (es_func_fp_create, es_func_fp_read, es_func_fp_write)
        (es_func_fp_seek, es_func_fp_destroy): New.
 
 2007-06-22  Werner Koch  <wk@g10code.com>
        * estream.c (es_fdopen): Factored code out to..
        (do_fdopen): .. new.
        (es_fdopen_nc): New.
-       (estream_cookie_fd): Add field NO_CLOSE. 
+       (estream_cookie_fd): Add field NO_CLOSE.
        (es_func_fd_create): Add arg NO_CLOSE and changed all callers.
        (es_func_fd_destroy): Handle the new flag.
 
        (agent_open): Use it if GPG_AGENT_INFO is not set.
        (simple_pwquery): Extended to allow returning of otehyr error codes.
 
-       * util.h (GNUPG_MODULE_NAME_AGENT, GNUPG_MODULE_NAME_PINENTRY) 
-       (GNUPG_MODULE_NAME_SCDAEMON, GNUPG_MODULE_NAME_DIRMNGR) 
+       * util.h (GNUPG_MODULE_NAME_AGENT, GNUPG_MODULE_NAME_PINENTRY)
+       (GNUPG_MODULE_NAME_SCDAEMON, GNUPG_MODULE_NAME_DIRMNGR)
        (GNUPG_MODULE_NAME_PROTECT_TOOL): New.
        * homedir.c (gnupg_module_name): New.
        (gnupg_bindir): New.
 2007-05-07  Werner Koch  <wk@g10code.com>
 
        * signal.c (got_fatal_signal): Protect SIG from being clobbered by
-       a faulty signal implementaion.  Suggested by James Juran. 
+       a faulty signal implementaion.  Suggested by James Juran.
 
 2007-04-25  Werner Koch  <wk@g10code.com>
 
 
 2006-10-17  Werner Koch  <wk@g10code.com>
 
-       * estream.c (struct estream_internal, es_initialize) 
+       * estream.c (struct estream_internal, es_initialize)
        (es_deinitialize, print_fun_writer, es_print): New and modified
-       functions to avoid tempfiles for printf style printing. 
+       functions to avoid tempfiles for printf style printing.
 
        * Makefile.am (libcommonpth_a_SOURCES): New. We now build a secon
        version of the library with explicit Pth support.
        buffer.
 
 2006-09-27  Florian Weimer <fweimer@bfk.de>  (wk)
-       
+
        * iobuf.c (iobuf_unread): New.
 
 2006-09-22  Werner Koch  <wk@g10code.com>
        * estream.c (estream_cookie_mem): Make MEMORY unsigned char*.
        (es_write): Make BUFFER a void *.
        (es_writen): Ditto.
-       (es_func_fd_read, es_func_fd_write, es_func_mem_read) 
+       (es_func_fd_read, es_func_fd_write, es_func_mem_read)
        (es_func_mem_write): Ditto.
        (es_read, es_readn): Ditto.
        (es_func_mem_write): Made MEMORY_NEW an unsigned char *.
 
        * estream.c: Use HAVE_CONFIG_H and not USE_CONFIG_H!
        (es_func_fd_read, es_func_fd_write): Protect against EINTR.
-       
+
 2005-06-01  Werner Koch  <wk@g10code.com>
 
        * Makefile.am (AM_CPPFLAGS): Added.
 
        * signal.c (got_fatal_signal, got_usr_signal)
        (got_fatal_signal) [DOSISH]: Don't build.
-       * simple-gettext.c: Include sysutils.h 
+       * simple-gettext.c: Include sysutils.h
 
        * homedir.c: New. Use CSIDL_APPDATA for W32 as the default home
        directory.
 2003-08-14  Timo Schulz  <twoaday@freakmail.de>
 
        * dynload.h. New. W32 wrapper around the dynload mechanism.
-       
+
 2003-07-15  Werner Koch  <wk@gnupg.org>
 
-       * simple-pwquery.c, simple-pwquery.h:  New; moved from ../agent.  
+       * simple-pwquery.c, simple-pwquery.h:  New; moved from ../agent.
        * Makefile.am (libsimple_pwquery_a_LIBADD): New.
 
 2003-06-25  Werner Koch  <wk@gnupg.org>
        * sysutils.c: New.  This is the misc.c file from gnupg 1.0.6 with
        the OpenPGP stuff removed.
        * sysutils.h: New.
-       
+
 2002-01-15  Werner Koch  <wk@gnupg.org>
 
-       * maperror.c: Add mapping for Not_Trusted. 
+       * maperror.c: Add mapping for Not_Trusted.
 
 2002-01-11  Werner Koch  <wk@gnupg.org>
 
 
        * util.h (digitp, hexdigitp): New ctype like macros.
        (atoi_1,atoi_2,atoi_4,xtoi_1,xtoi_2): New.
-       
-       
- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-          2008, 2009 Free Software Foundation, Inc.
+
+
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+          2009, 2010 Free Software Foundation, Inc.
 
  This file is free software; as a special exception the author gives
  unlimited permission to copy and/or distribute it, with or without
  This file is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-               
-
index d3e8b64..aa3a3a8 100644 (file)
@@ -115,7 +115,7 @@ do_bin2hex (const void *buffer, size_t length, char *stringbuf, int with_colon)
       size_t nbytes = n * length + 1; 
       if (length &&  (nbytes-1) / n != length) 
         {
-          errno = ENOMEM;
+          gpg_err_set_errno (ENOMEM);
           return NULL;
         }
       stringbuf = xtrymalloc (nbytes);
@@ -232,7 +232,7 @@ hex2str_alloc (const char *hexstring, size_t *r_count)
     {
       if (r_count)
         *r_count = 0;
-      errno = EINVAL;
+      gpg_err_set_errno (EINVAL);
       return NULL;
     }
   if (r_count)
index 54ecb23..3955a01 100644 (file)
@@ -1,5 +1,5 @@
-/* estream-printf.c - Versatile C-99 compliant printf formatting
- * Copyright (C) 2007, 2008, 2009 g10 Code GmbH
+/* estream-printf.c - Versatile mostly C-99 compliant printf formatting
+ * Copyright (C) 2007, 2008, 2009, 2010 g10 Code GmbH
  *
  * This file is part of Libestream.
  *
  *
  * You should have received a copy of the GNU General Public License
  * along with Libestream; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * ALTERNATIVELY, Libestream may be distributed under the terms of the
+ * following license, in which case the provisions of this license are
+ * required INSTEAD OF the GNU General Public License. If you wish to
+ * allow use of your version of this file only under the terms of the
+ * GNU General Public License, and not to allow others to use your
+ * version of this file under the terms of the following license,
+ * indicate your decision by deleting this paragraph and the license
+ * below.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 /*  Required autoconf tests:
 # include <config.h>
 #endif
 
+#if defined(_WIN32) && !defined(HAVE_W32_SYSTEM)
+# define HAVE_W32_SYSTEM 1
+# if defined(__MINGW32CE__) && !defined (HAVE_W32CE_SYSTEM)
+#  define HAVE_W32CE_SYSTEM
+# endif
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -57,6 +98,9 @@
 #ifdef HAVE_LANGINFO_THOUSANDS_SEP
 #include <langinfo.h>
 #endif
+#ifdef HAVE_W32CE_SYSTEM
+#include <gpg-error.h>  /* ERRNO replacement.  */
+#endif
 #ifdef _ESTREAM_PRINTF_EXTRA_INCLUDE
 # include _ESTREAM_PRINTF_EXTRA_INCLUDE
 #endif
 #define my_printf_free(a)   free((a))
 #endif
 
+/* A wrapper to set ERRNO.  */
+#ifdef HAVE_W32CE_SYSTEM
+# define _set_errno(a)  gpg_err_set_errno ((a))
+#else
+# define _set_errno(a)  do { errno = (a); } while (0)
+#endif
+
 
 /* Calculate array dimension.  */
 #ifndef DIM
@@ -634,7 +685,7 @@ parse_format (const char *format,
   return 0; /* Success.  */
   
  leave_einval:
-  errno = EINVAL;
+  _set_errno (EINVAL);
  leave:
   if (argspecs != *argspecs_addr)
     free (argspecs);
@@ -1540,7 +1591,7 @@ estream_format (estream_printf_out_t outfnc,
   goto leave;
   
  leave_einval:
-  errno = EINVAL;
+  _set_errno (EINVAL);
  leave_error:
   rc = -1;
  leave:
@@ -1702,7 +1753,7 @@ dynamic_buffer_out (void *outfncarg, const char *buf, size_t buflen)
     {
       /* Just in case some formatting routine did not checked for an
          error. */
-      errno = parm->error_flag;
+      _set_errno (parm->error_flag);
       return -1;
     }
 
@@ -1755,7 +1806,7 @@ estream_vasprintf (char **bufp, const char *format, va_list arg_ptr)
   if (rc != -1 && parm.error_flag)
     {
       rc = -1;
-      errno = parm.error_flag;
+      _set_errno (parm.error_flag);
     }
   if (rc == -1)
     {
index 3987b33..16e4249 100644 (file)
@@ -1,5 +1,5 @@
-/* estream-printf.h - Versatile C-99 compliant printf formatting.
- * Copyright (C) 2007 g10 Code GmbH
+/* estream-printf.h - Versatile mostly C-99 compliant printf formatting.
+ * Copyright (C) 2007, 2010 g10 Code GmbH
  *
  * This file is part of Libestream.
  *
  *
  * You should have received a copy of the GNU General Public License
  * along with Libestream; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * ALTERNATIVELY, Libestream may be distributed under the terms of the
+ * following license, in which case the provisions of this license are
+ * required INSTEAD OF the GNU General Public License. If you wish to
+ * allow use of your version of this file only under the terms of the
+ * GNU General Public License, and not to allow others to use your
+ * version of this file under the terms of the following license,
+ * indicate your decision by deleting this paragraph and the license
+ * below.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #ifndef ESTREAM_PRINTF_H
index 4015905..af7da70 100644 (file)
@@ -1,5 +1,5 @@
 /* estream.c - Extended Stream I/O Library
- * Copyright (C) 2004, 2005, 2006, 2007, 2009 g10 Code GmbH
+ * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 g10 Code GmbH
  *
  * This file is part of Libestream.
  *
  *
  * You should have received a copy of the GNU General Public License
  * along with Libestream; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * ALTERNATIVELY, Libestream may be distributed under the terms of the
+ * following license, in which case the provisions of this license are
+ * required INSTEAD OF the GNU General Public License. If you wish to
+ * allow use of your version of this file only under the terms of the
+ * GNU General Public License, and not to allow others to use your
+ * version of this file under the terms of the following license,
+ * indicate your decision by deleting this paragraph and the license
+ * below.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #ifdef USE_ESTREAM_SUPPORT_H
@@ -27,6 +61,9 @@
 
 #if defined(_WIN32) && !defined(HAVE_W32_SYSTEM)
 # define HAVE_W32_SYSTEM 1
+# if defined(__MINGW32CE__) && !defined (HAVE_W32CE_SYSTEM)
+#  define HAVE_W32CE_SYSTEM
+# endif
 #endif
 
 #include <sys/types.h>
@@ -44,6 +81,9 @@
 #ifdef HAVE_W32_SYSTEM
 # include <windows.h>
 #endif
+#ifdef HAVE_W32CE_SYSTEM
+# include <gpg-error.h> /* ERRNO replacement.  */
+#endif
 
 #ifdef WITHOUT_GNU_PTH /* Give the Makefile a chance to build without Pth.  */
 # undef HAVE_PTH
@@ -76,6 +116,13 @@ void *memrchr (const void *block, int c, size_t size);
 #define O_BINARY 0
 #endif
 
+#ifdef HAVE_W32CE_SYSTEM
+# define _set_errno(a)  gpg_err_set_errno ((a))
+#else
+# define _set_errno(a)  do { errno = (a); } while (0)
+#endif
+
+
 /* Generally used types.  */
 
 typedef void *(*func_realloc_t) (void *mem, size_t size);
@@ -427,7 +474,7 @@ es_func_mem_create (void *ES__RESTRICT *ES__RESTRICT cookie,
 
   if (!data && (data_n || data_len))
     {
-      errno = EINVAL;
+      _set_errno (EINVAL);
       return -1;
     }
 
@@ -511,7 +558,7 @@ es_func_mem_write (void *cookie, const void *buffer, size_t size)
         newsize = mem_cookie->memory_size + (nleft - size);
       if (newsize < mem_cookie->offset)
         {
-          errno = EINVAL;
+          _set_errno (EINVAL);
           return -1;
         }
 
@@ -522,7 +569,7 @@ es_func_mem_write (void *cookie, const void *buffer, size_t size)
           newsize += mem_cookie->block_size - 1;
           if (newsize < mem_cookie->offset)
             {
-              errno = EINVAL;
+              _set_errno (EINVAL);
               return -1;
             }
           newsize /= mem_cookie->block_size;
@@ -532,7 +579,7 @@ es_func_mem_write (void *cookie, const void *buffer, size_t size)
       /* Check for a total limit.  */
       if (mem_cookie->memory_limit && newsize > mem_cookie->memory_limit)
         {
-          errno = ENOSPC;
+          _set_errno (ENOSPC);
           return -1;
         }
       
@@ -581,7 +628,7 @@ es_func_mem_seek (void *cookie, off_t *offset, int whence)
       break;
 
     default:
-      errno = EINVAL;
+      _set_errno (EINVAL);
       return -1;
     }
 
@@ -592,14 +639,14 @@ es_func_mem_seek (void *cookie, off_t *offset, int whence)
 
       if (!mem_cookie->flags.grow)
        {
-         errno = ENOSPC;
+         _set_errno (ENOSPC);
          return -1;
         }
 
       newsize = pos_new + mem_cookie->block_size - 1;
       if (newsize < pos_new)
         {
-          errno = EINVAL;
+          _set_errno (EINVAL);
           return -1;
         }
       newsize /= mem_cookie->block_size;
@@ -607,7 +654,7 @@ es_func_mem_seek (void *cookie, off_t *offset, int whence)
 
       if (mem_cookie->memory_limit && newsize > mem_cookie->memory_limit)
         {
-          errno = ENOSPC;
+          _set_errno (ENOSPC);
           return -1;
         }
       
@@ -971,7 +1018,7 @@ es_convert_mode (const char *mode, unsigned int *modeflags)
       oflags = O_APPEND | O_CREAT;
       break;
     default:
-      errno = EINVAL;
+      _set_errno (EINVAL);
       return -1;
     }
   for (mode++; *mode; mode++)
@@ -1010,7 +1057,7 @@ es_fill (estream_t stream)
 
   if (!stream->intern->func_read)
     {
-      errno = EOPNOTSUPP;
+      _set_errno (EOPNOTSUPP);
       err = -1;
     }
   else
@@ -1173,7 +1220,7 @@ es_deinitialize (estream_t stream)
       int save_errno = errno;
       fclose (stream->intern->print_fp);
       stream->intern->print_fp = NULL;
-      errno = save_errno;
+      _set_errno (save_errno);
     }
 
   func_close = stream->intern->func_close;
@@ -1460,7 +1507,7 @@ es_seek (estream_t ES__RESTRICT stream, off_t offset, int whence,
 
   if (! func_seek)
     {
-      errno = EOPNOTSUPP;
+      _set_errno (EOPNOTSUPP);
       err = -1;
       goto out;
     }
@@ -1730,7 +1777,7 @@ es_skip (estream_t stream, size_t size)
 
   if (stream->data_offset + size > stream->data_len)
     {
-      errno = EINVAL;
+      _set_errno (EINVAL);
       err = -1;
     }
   else
@@ -2309,7 +2356,7 @@ es_freopen (const char *ES__RESTRICT path, const char *ES__RESTRICT mode,
   else
     {
       /* FIXME?  We don't support re-opening at the moment.  */
-      errno = EINVAL;
+      _set_errno (EINVAL);
       es_deinitialize (stream);
       es_destroy (stream);
       stream = NULL;
@@ -2821,7 +2868,7 @@ es_read_line (estream_t stream,
     {
       /* This should never happen. If it does, the function has been
          called with wrong arguments. */
-      errno = EINVAL;
+      _set_errno (EINVAL);
       return -1;
     }
   length -= 3; /* Reserve 3 bytes for CR,LF,EOL. */
@@ -2855,7 +2902,7 @@ es_read_line (estream_t stream,
               if (max_length)
                 *max_length = 0;
               ESTREAM_UNLOCK (stream);
-              errno = save_errno;
+              _set_errno (save_errno);
               return -1;
             }
           buffer = *addr_of_buffer;
@@ -2973,21 +3020,32 @@ tmpfd (void)
 {
 #ifdef HAVE_W32_SYSTEM
   int attempts, n;
+#ifdef HAVE_W32CE_SYSTEM
+  wchar_t buffer[MAX_PATH+9+12+1];
+# define mystrlen(a) wcslen (a)
+  wchar_t *name, *p;
+#else
   char buffer[MAX_PATH+9+12+1];
+# define mystrlen(a) strlen (a)
   char *name, *p;
+#endif
   HANDLE file;
   int pid = GetCurrentProcessId ();
   unsigned int value;
   int i;
   
   n = GetTempPath (MAX_PATH+1, buffer);
-  if (!n || n > MAX_PATH || strlen (buffer) > MAX_PATH)
+  if (!n || n > MAX_PATH || mystrlen (buffer) > MAX_PATH)
     {
-      errno = ENOENT;
+      _set_errno (ENOENT);
       return -1;
     }
-  p = buffer + strlen (buffer);
+  p = buffer + mystrlen (buffer);
+#ifdef HAVE_W32CE_SYSTEM
+  wcscpy (p, L"_estream");
+#else
   strcpy (p, "_estream");
+#endif
   p += 8;
   /* We try to create the directory but don't care about an error as
      it may already exist and the CreateFile would throw an error
@@ -3004,7 +3062,11 @@ tmpfd (void)
           *p++ = tohex (((value >> 28) & 0x0f));
           value <<= 4;
         }
+#ifdef HAVE_W32CE_SYSTEM
+      wcscpy (p, L".tmp");
+#else
       strcpy (p, ".tmp");
+#endif
       file = CreateFile (buffer,
                          GENERIC_READ | GENERIC_WRITE,
                          0,
@@ -3014,17 +3076,21 @@ tmpfd (void)
                          NULL);
       if (file != INVALID_HANDLE_VALUE)
         {
+#ifdef HAVE_W32CE_SYSTEM
+          int fd = (int)file;
+#else
           int fd = _open_osfhandle ((long)file, 0);
           if (fd == -1)
             {
               CloseHandle (file);
               return -1;
             }
+#endif
           return fd;
         }
       Sleep (1); /* One ms as this is the granularity of GetTickCount.  */
     }
-  errno = ENOENT;
+  _set_errno (ENOENT);
   return -1;
 #else /*!HAVE_W32_SYSTEM*/
   FILE *fp;
@@ -3109,7 +3175,7 @@ es_setvbuf (estream_t ES__RESTRICT stream,
     }
   else
     {
-      errno = EINVAL;
+      _set_errno (EINVAL);
       err = -1;
     }
 
index d1f9472..b22c5de 100644 (file)
@@ -1,5 +1,5 @@
 /* estream.h - Extended stream I/O Library
- * Copyright (C) 2004, 2005, 2006, 2007 g10 Code GmbH
+ * Copyright (C) 2004, 2005, 2006, 2007, 2010 g10 Code GmbH
  *
  * This file is part of Libestream.
  *
  *
  * You should have received a copy of the GNU General Public License
  * along with Libestream; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * ALTERNATIVELY, Libestream may be distributed under the terms of the
+ * following license, in which case the provisions of this license are
+ * required INSTEAD OF the GNU General Public License. If you wish to
+ * allow use of your version of this file only under the terms of the
+ * GNU General Public License, and not to allow others to use your
+ * version of this file under the terms of the following license,
+ * indicate your decision by deleting this paragraph and the license
+ * below.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #ifndef ESTREAM_H
index 1b4e435..52f94b5 100644 (file)
@@ -500,7 +500,7 @@ void
 dump_isotime (const gnupg_isotime_t t)
 {
   if (!t || !*t)
-    log_printf (_("[none]"));
+    log_printf ("%s", _("[none]"));
   else
     log_printf ("%.4s-%.2s-%.2s %.2s:%.2s:%s",
                 t, t+4, t+6, t+9, t+11, t+13);
index 5f2e31e..a8bec42 100644 (file)
@@ -1,5 +1,5 @@
 /* homedir.c - Setup the home directory.
- *     Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc.
+ * Copyright (C) 2004, 2006, 2007, 2010 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -114,7 +114,18 @@ standard_homedir (void)
           
           /* Try to create the directory if it does not yet exists.  */
           if (access (dir, F_OK))
-            CreateDirectory (dir, NULL);
+            {
+#ifdef HAVE_W32CE_SYSTEM
+              wchar_t *wdir = utf8_to_wchar (dir);
+              if (wdir)
+                {
+                  CreateDirectory (wdir, NULL);
+                  xfree (wdir);
+                }
+#else              
+              CreateDirectory (dir, NULL);
+#endif
+            }
         }
       else
         dir = GNUPG_DEFAULT_HOMEDIR;
@@ -178,8 +189,20 @@ w32_rootdir (void)
   if (!got_dir)
     {
       char *p;
-
-      if ( !GetModuleFileName ( NULL, dir, MAX_PATH) )
+      int rc;
+
+#ifdef HAVE_W32CE_SYSTEM
+      {
+        wchar_t wdir [MAX_PATH+5];
+        rc = GetModuleFileName (NULL, wdir, MAX_PATH);
+        if (rc && WideCharToMultiByte (CP_UTF8, 0, wdir, -1, dir, MAX_PATH-4,
+                                       NULL, NULL) < 0)
+          rc = 0;
+      }
+#else
+      rc = GetModuleFileName (NULL, dir, MAX_PATH);
+#endif
+      if (!rc)
         {
           log_debug ("GetModuleFileName failed: %s\n", w32_strerror (0));
           *dir = 0;
index c12bd2b..a7f6739 100644 (file)
@@ -1225,7 +1225,7 @@ my_read_line (
              int save_errno = errno;
              xfree (buffer);
              *length_of_buffer = *max_length = 0;
-             errno = save_errno;
+             gpg_err_set_errno (save_errno);
              return 0;
            }
          buffer = *addr_of_buffer;
@@ -1548,12 +1548,13 @@ connect_server (const char *server, unsigned short port,
   int srv, connected;
   int last_errno = 0;
   struct srventry *serverlist = NULL;
-
+#ifdef HAVE_W32_SYSTEM
+  unsigned long inaddr;
+#endif
   /* Not currently using the flags */
   (void)flags;
 
 #ifdef HAVE_W32_SYSTEM
-  unsigned long inaddr;
 
 #ifndef HTTP_NO_WSASTARTUP
   init_sockets ();
@@ -1724,7 +1725,7 @@ connect_server (const char *server, unsigned short port,
 #endif
       if (sock != -1)
        sock_close (sock);
-      errno = last_errno;
+      gpg_err_set_errno (last_errno);
       return -1;
     }
   return sock;
@@ -1805,7 +1806,7 @@ cookie_read (void *cookie, void *buffer, size_t size)
           if (nread == GNUTLS_E_REHANDSHAKE)
             goto again; /* A client is allowed to just ignore this request. */
           log_info ("TLS network read failed: %s\n", gnutls_strerror (nread));
-          errno = EIO;
+          gpg_err_set_errno (EIO);
           return -1;
         }
     }
@@ -1856,7 +1857,7 @@ cookie_write (void *cookie, const void *buffer, size_t size)
                 }
               log_info ("TLS network write failed: %s\n",
                         gnutls_strerror (nwritten));
-              errno = EIO;
+              gpg_err_set_errno (EIO);
               return -1;
             }
           nleft -= nwritten;
@@ -1868,7 +1869,7 @@ cookie_write (void *cookie, const void *buffer, size_t size)
     {
       if ( write_server (c->fd, buffer, size) )
         {
-          errno = EIO;
+          gpg_err_set_errno (EIO);
           nwritten = -1;
         }
       else
index db5ddf5..7601cf8 100644 (file)
@@ -1,5 +1,5 @@
 /* i18n.c - gettext initialization
- *     Copyright (C) 2007 Free Software Foundation, Inc.
+ *     Copyright (C) 2007, 2010 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -51,8 +51,8 @@ char *
 i18n_switchto_utf8 (void)
 {
 #ifdef USE_SIMPLE_GETTEXT
-  gettext_select_utf8 (1);
-  return NULL;
+  /* Return an arbitrary pointer as true value.  */
+  return gettext_use_utf8 (1) ? (char*)(-1) : NULL;
 #elif defined(ENABLE_NLS)
   char *orig_codeset = bind_textdomain_codeset (PACKAGE_GT, NULL);
 # ifdef HAVE_LANGINFO_CODESET
@@ -82,8 +82,7 @@ void
 i18n_switchback (char *saved_codeset)
 {
 #ifdef USE_SIMPLE_GETTEXT
-  (void)saved_codeset;
-  gettext_select_utf8 (0);
+  gettext_use_utf8 (!!saved_codeset);
 #elif defined(ENABLE_NLS)
   if (saved_codeset)
     {
index 0d2a5a5..356e9cd 100644 (file)
@@ -306,7 +306,21 @@ direct_open (const char *fname, const char *mode)
       sm = FILE_SHARE_READ;
     }
 
+#ifdef HAVE_W32CE_SYSTEM
+  {
+    wchar_t *wfname = utf8_to_wchar (fname);
+    if (wfname)
+      {
+        hfile = CreateFile (wfname, da, sm, NULL, cd,
+                            FILE_ATTRIBUTE_NORMAL, NULL);
+        xfree (wfname);
+      }
+    else
+      hfile = INVALID_HANDLE_VALUE;
+  }
+#else
   hfile = CreateFile (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL);
+#endif
   return hfile;
 #else /*!HAVE_W32_SYSTEM*/
   int oflag;
@@ -1188,7 +1202,14 @@ iobuf_cancel (iobuf_t a)
     {
       /* Argg, MSDOS does not allow to remove open files.  So
        * we have to do it here */
+#ifdef HAVE_W32CE_SYSTEM
+      wchar_t *wtmp = utf8_to_wchar (remove_name);
+      if (wtmp)
+        DeleteFile (wtmp);
+      xfree (wtmp);
+#else
       remove (remove_name);
+#endif
       xfree (remove_name);
     }
 #endif
index 737930b..dc8f6f6 100644 (file)
@@ -105,7 +105,7 @@ get_membuf (membuf_t *mb, size_t *len)
           xfree (mb->buf);
           mb->buf = NULL;
         }
-      errno = mb->out_of_core;
+      gpg_err_set_errno (mb->out_of_core);
       return NULL;
     }
 
index 98859a4..2147dac 100644 (file)
@@ -21,7 +21,9 @@
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <signal.h>
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif
 #include <unistd.h>
 #include <string.h>
 #include <errno.h>
index 8e0c75c..822ceab 100644 (file)
@@ -130,31 +130,20 @@ enable_core_dumps (void)
 
 
 
-/* Return a string which is used as a kind of process ID */
+/* Return a string which is used as a kind of process ID */
 const byte *
-get_session_marker( size_t *rlen )
+get_session_marker (size_t *rlen)
 {
-    static byte marker[SIZEOF_UNSIGNED_LONG*2];
-    static int initialized;
-
-    if ( !initialized ) {
-        volatile ulong aa, bb; /* we really want the uninitialized value */
-        ulong a, b;
-
-        initialized = 1;
-        /* Although this marker is guessable it is not easy to use
-         * for a faked control packet because an attacker does not
-         * have enough control about the time the verification does 
-         * take place.  Of course, we can add just more random but 
-         * than we need the random generator even for verification
-         * tasks - which does not make sense. */
-        a = aa ^ (ulong)getpid();
-        b = bb ^ (ulong)time(NULL);
-        memcpy( marker, &a, SIZEOF_UNSIGNED_LONG );
-        memcpy( marker+SIZEOF_UNSIGNED_LONG, &b, SIZEOF_UNSIGNED_LONG );
+  static byte marker[SIZEOF_UNSIGNED_LONG*2];
+  static int initialized;
+  
+  if (!initialized)
+    {
+      gcry_create_nonce (marker, sizeof marker);
+      initialized = 1;
     }
-    *rlen = sizeof(marker);
-    return marker;
+  *rlen = sizeof (marker);
+  return marker;
 }
 
 
@@ -286,7 +275,10 @@ gnupg_sleep (unsigned int seconds)
 int
 translate_sys2libc_fd (gnupg_fd_t fd, int for_write)
 {
-#ifdef HAVE_W32_SYSTEM
+#if defined(HAVE_W32CE_SYSTEM)
+  (void)for_write;
+  return (int)fd;
+#elif defined(HAVE_W32_SYSTEM)
   int x;
 
   if (fd == GNUPG_INVALID_FD)
@@ -331,8 +323,15 @@ gnupg_tmpfile (void)
 {
 #ifdef HAVE_W32_SYSTEM
   int attempts, n;
+#ifdef HAVE_W32CE_SYSTEM
+  wchar_t buffer[MAX_PATH+7+12+1];
+# define mystrlen(a) wcslen (a)
+  wchar_t *name, *p;
+#else
   char buffer[MAX_PATH+7+12+1];
+# define mystrlen(a) strlen (a)
   char *name, *p;
+#endif
   HANDLE file;
   int pid = GetCurrentProcessId ();
   unsigned int value;
@@ -344,13 +343,18 @@ gnupg_tmpfile (void)
   sec_attr.bInheritHandle = TRUE;
 
   n = GetTempPath (MAX_PATH+1, buffer);
-  if (!n || n > MAX_PATH || strlen (buffer) > MAX_PATH)
+  if (!n || n > MAX_PATH || mystrlen (buffer) > MAX_PATH)
     {
-      errno = ENOENT;
+      gpg_err_set_errno (ENOENT);
       return NULL;
     }
-  p = buffer + strlen (buffer);
+  p = buffer + mystrlen (buffer);
+#ifdef HAVE_W32CE_SYSTEM
+  wcscpy (p, L"_gnupg");
+  p += 7;
+#else
   p = stpcpy (p, "_gnupg");
+#endif
   /* We try to create the directory but don't care about an error as
      it may already exist and the CreateFile would throw an error
      anyway.  */
@@ -366,7 +370,11 @@ gnupg_tmpfile (void)
           *p++ = tohex (((value >> 28) & 0x0f));
           value <<= 4;
         }
+#ifdef HAVE_W32CE_SYSTEM
+      wcscpy (p, L".tmp");
+#else
       strcpy (p, ".tmp");
+#endif
       file = CreateFile (buffer,
                          GENERIC_READ | GENERIC_WRITE,
                          0,
@@ -377,6 +385,10 @@ gnupg_tmpfile (void)
       if (file != INVALID_HANDLE_VALUE)
         {
           FILE *fp;
+#ifdef HAVE_W32CE_SYSTEM
+          int fd = (int)file;
+          fp = _wfdopen (fd, L"w+b");
+#else
           int fd = _open_osfhandle ((long)file, 0);
           if (fd == -1)
             {
@@ -384,19 +396,21 @@ gnupg_tmpfile (void)
               return NULL;
             }
           fp = fdopen (fd, "w+b");
+#endif
           if (!fp)
             {
               int save = errno;
               close (fd);
-              errno = save;
+              gpg_err_set_errno (save);
               return NULL;
             }
           return fp;
         }
       Sleep (1); /* One ms as this is the granularity of GetTickCount.  */
     }
-  errno = ENOENT;
+  gpg_err_set_errno (ENOENT);
   return NULL;
+#undef mystrlen
 #else /*!HAVE_W32_SYSTEM*/
   return tmpfile ();
 #endif /*!HAVE_W32_SYSTEM*/
@@ -490,3 +504,18 @@ gnupg_allow_set_foregound_window (pid_t pid)
                (unsigned long)pid, w32_strerror (-1));
 #endif
 }
+
+
+
+#ifdef HAVE_W32CE_SYSTEM
+/* Replacement for getenv which takes care of the our use of getenv.
+   The code is not thread safe but we expect it to work in all cases
+   because it is called for the first time early enough.  */
+char *
+_gnupg_getenv (const char *name)
+{
+  (void)name;
+  return NULL;
+}
+#endif /*HAVE_W32CE_SYSTEM*/
+
index 3eed4eb..5667862 100644 (file)
@@ -300,6 +300,13 @@ ttyname (int fd)
 }
 #endif /* !HAVE_TTYNAME */
 
+#ifdef HAVE_W32CE_SYSTEM
+#define getpid() GetCurrentProcessId ()
+char *_gnupg_getenv (const char *name); /* See sysutils.c */
+#define getenv(a)  _gnupg_getenv ((a))
+#endif
+
+
 
 /*-- Macros to replace ctype ones to avoid locale problems. --*/
 #define spacep(p)   (*(p) == ' ' || *(p) == '\t')
index 8ca72b7..4ea10d7 100644 (file)
@@ -98,7 +98,7 @@ read_line (FILE *fp,
               *length_of_buffer = 0;
               if (max_length)
                 *max_length = 0;
-              errno = save_errno;
+              gpg_err_set_errno (save_errno);
               return -1;
             }
           buffer = *addr_of_buffer;
index abb26cf..f53f8d9 100644 (file)
@@ -999,8 +999,8 @@ fi
 #
 AC_MSG_NOTICE([checking for header files])
 AC_HEADER_STDC
-AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h])
-AC_CHECK_HEADERS([pty.h pwd.h inttypes.h])
+AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h \
+                  pty.h pwd.h inttypes.h signal.h])
 AC_HEADER_TIME