summary refs log tree commit diff stats
path: root/libotr/libgpg-error-1.42/src/mkw32errmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'libotr/libgpg-error-1.42/src/mkw32errmap.c')
-rw-r--r--libotr/libgpg-error-1.42/src/mkw32errmap.c178
1 files changed, 178 insertions, 0 deletions
diff --git a/libotr/libgpg-error-1.42/src/mkw32errmap.c b/libotr/libgpg-error-1.42/src/mkw32errmap.c
new file mode 100644
index 0000000..508a513
--- /dev/null
+++ b/libotr/libgpg-error-1.42/src/mkw32errmap.c
@@ -0,0 +1,178 @@
+/* mkw32errmap.c - Generate mapping sources for Windows.
+   Copyright (C) 2010 g10 Code GmbH
+
+   This file is part of libgpg-error.
+
+   libgpg-error 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.
+ 
+   libgpg-error 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, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifdef RESOLVE_MACROS
+# include <winerror.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+static const char header_gpg_extra_errno_h[] =
+  "/* errno.h - WindowsCE errno.h substitute\n"
+  "   Copyright (C) 2010 g10 Code GmbH\n"
+  "\n"
+  "   This file is free software; as a special exception the author gives\n"
+  "   unlimited permission to copy and/or distribute it, with or without\n"
+  "   modifications, as long as this notice is preserved.\n"
+  "\n"
+  "   This file is distributed in the hope that it will be useful, but\n"
+  "   WITHOUT ANY WARRANTY, to the extent permitted by law; without even\n"
+  "   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n"
+  "   PURPOSE.\n"
+  "\n"
+  "   +++ Do not edit!  File has been generated by mkw32errmap.c +++\n"
+  "\n"
+  "   This file is intended to be used with ming32ce-gcc to implement an\n"
+  "   errno substitute under WindowsCE.  It must be included via gcc's\n"
+  "   -idirafter option.  The gpg-error-config script emits the\n"
+  "   appropriate option snippet.  The actual implementation of the errno\n"
+  "   related functions are part of libgpg-error.  A separate header file\n"
+  "   is required because errno.h is often included before gpg-error.h.\n"
+  " */\n"
+  "\n"
+  "#ifndef _GPG_ERROR_EXTRA_ERRNO_H\n"
+  "#define _GPG_ERROR_EXTRA_ERRNO_H\n"
+  "\n"
+  "/* Due to peculiarities in W32 we can't implement ERRNO as an\n"
+  "   writable lvalue.  This also allows us to easily find places\n"
+  "   where ERRNO is being written to.  See also gpg_err_set_errno.  */\n"
+  "int _gpg_w32ce_get_errno (void);\n"
+  "#define errno (_gpg_w32ce_get_errno ())\n"
+  "\n";
+static const char footer_gpg_extra_errno_h[] =
+  "\n"
+  "#endif /*_GPG_ERROR_EXTRA_ERRNO_H*/\n";
+
+
+/* The table below is used in two modes.  First we run the host
+   preprocessor over it to generate a new include file.  This include
+   file has the same content but the Windows error macros are
+   resolved.  This is so that we don't need to include winerror.h into
+   the generated errno.h.  The mkw32errmap_marker variable is only
+   here to have something to grep for after preprocessing.  */
+static int mkw32errmap_marker;
+struct table_s
+{
+  int *dummy;
+  const char *name;
+  int w32code;
+  int w32code2;
+};
+
+struct table_s table[] = 
+  {
+#ifdef RESOLVE_MACROS
+#define X(a,b,c)                                 \
+    {&mkw32errmap_marker, (a), (b), (c)}
+   X( "EPERM",	ERROR_CANNOT_MAKE               , 0 ), 
+   X( "ENOENT",	ERROR_FILE_NOT_FOUND            , ERROR_PATH_NOT_FOUND ),
+   X( "EINTR",	ERROR_INVALID_AT_INTERRUPT_TIME , 0 ),
+   X( "EIO",	ERROR_IO_DEVICE                 , 0 ),
+   X( "ENXIO",	ERROR_FILE_INVALID              , 0 ),
+   X( "EBADF",	ERROR_INVALID_HANDLE            , 0 ),
+   X( "EAGAIN",	ERROR_MORE_DATA                 , WSAEWOULDBLOCK ),
+
+   X( "ENOMEM",	ERROR_NOT_ENOUGH_MEMORY         , 0 ),
+   X( "EACCES",	ERROR_ACCESS_DENIED             , 0 ),
+   X( "EFAULT",	ERROR_PROCESS_ABORTED           , 0 ),
+   X( "EBUSY",	ERROR_BUSY                      , 0 ),
+   X( "EEXIST",	ERROR_FILE_EXISTS               , WSAEADDRINUSE  ),
+
+   X( "EXDEV",	ERROR_NOT_SAME_DEVICE           , 0 ),
+   X( "ENODEV",	ERROR_BAD_DEVICE                , ERROR_DEV_NOT_EXIST ),
+
+   X( "ENOTDIR",ERROR_DIRECTORY                 , 0 ),
+   X( "EINVAL",	ERROR_INVALID_PARAMETER         , 0 ),
+   X( "ENFILE",	ERROR_NO_MORE_FILES             , 0 ),
+   X( "EMFILE",	ERROR_TOO_MANY_OPEN_FILES       , 0 ),
+   X( "ENOSPC",	ERROR_DISK_FULL                 , 0 ),
+   X( "EROFS",	ERROR_WRITE_PROTECT             , 0 ),
+   X( "EPIPE",	ERROR_BROKEN_PIPE               , 0 ),
+   X( "ERANGE",	ERROR_ARITHMETIC_OVERFLOW       , 0 ),
+   X( "EDEADLOCK",ERROR_POSSIBLE_DEADLOCK       , 0 ),
+   X( "ENAMETOOLONG", ERROR_FILENAME_EXCED_RANGE, 0 ),
+   X( "ENOLCK",	ERROR_SHARING_BUFFER_EXCEEDED   , 0 ),
+   X( "ENOSYS",	ERROR_NOT_SUPPORTED             , 0 ),
+   X( "ENOTEMPTY",ERROR_DIR_NOT_EMPTY           , 0 ),
+   X( "ESPIPE",  ERROR_SEEK_ON_DEVICE           , 0 ),
+#if 0 /* FIXME: Find appropriate mappings.  */
+   X( "EILSEQ",		), 
+   X( "EDOM",		), 
+   X( "EMLINK",		), 
+   X( "ESRCH",		), /* No such process */
+   X( "E2BIG",		), /* Arg list too long */
+   X( "ENOEXEC",	), /* Exec format error */
+   X( "ECHILD",		), /* No child processes */
+   X( "EISDIR",		), /* Is a directory */
+   X( "ENOTTY",		), /* Inappropriate I/O control operation */
+   X( "EFBIG",		), /* File too large */
+#endif
+#undef X
+#else /*!RESOLVE_MACROS*/
+# include "mkw32errmap.tab.h"   
+#endif /*!RESOLVE_MACROS*/
+   { NULL, 0 }
+  };
+
+
+
+static int
+compare_table (const void *a_v, const void *b_v)
+{
+  const struct table_s *a = a_v;
+  const struct table_s *b = b_v;
+
+  return (a->w32code - b->w32code);
+}     
+
+
+int
+main (int argc, char **argv)
+{
+  int idx;
+
+  for (idx=0; table[idx].name; idx++)
+    ;
+  qsort (table, idx, sizeof *table, compare_table);
+  
+  if (argc == 2 && !strcmp (argv[1], "--map"))
+    {
+      fputs ("static int\n"
+             "map_w32codes (int err)\n"
+             "{\n"
+             "  switch (err)\n"
+             "    {\n", stdout );
+      for (idx=0; table[idx].name; idx++)
+        if (table[idx].w32code2)
+          printf ("    case %d: return %d;\n",
+                  table[idx].w32code2, table[idx].w32code);
+      fputs ("    default: return err;\n"
+             "    }\n"
+             "}\n", stdout);
+    }
+  else
+    {
+      fputs (header_gpg_extra_errno_h, stdout);
+      for (idx=0; table[idx].name; idx++)
+        printf ("#define %-12s %5d\n", table[idx].name, table[idx].w32code);
+      fputs (footer_gpg_extra_errno_h, stdout);
+    }
+
+  return 0;
+}