#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";
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#endif
#undef X
#else
# include "mkw32errmap.tab.h"
#endif
{ 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;
}