Merge branch 'master' into key-storage-work
[gnupg.git] / common / types.h
1 /* types.h - define some extra types
2  *      Copyright (C) 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
3  *
4  * This file is part of JNLIB, which is a subsystem of GnuPG.
5  *
6  * JNLIB is free software; you can redistribute it and/or modify it
7  * under the terms of either
8  *
9  *   - the GNU Lesser General Public License as published by the Free
10  *     Software Foundation; either version 3 of the License, or (at
11  *     your option) any later version.
12  *
13  * or
14  *
15  *   - the GNU General Public License as published by the Free
16  *     Software Foundation; either version 2 of the License, or (at
17  *     your option) any later version.
18  *
19  * or both in parallel, as here.
20  *
21  * JNLIB is distributed in the hope that it will be useful, but
22  * WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * General Public License for more details.
25  *
26  * You should have received a copies of the GNU General Public License
27  * and the GNU Lesser General Public License along with this program;
28  * if not, see <http://www.gnu.org/licenses/>.
29  */
30
31 #ifndef LIBJNLIB_TYPES_H
32 #define LIBJNLIB_TYPES_H
33
34 /* The AC_CHECK_SIZEOF() in configure fails for some machines.
35  * we provide some fallback values here */
36 #if !SIZEOF_UNSIGNED_SHORT
37 #  undef SIZEOF_UNSIGNED_SHORT
38 #  define SIZEOF_UNSIGNED_SHORT 2
39 #endif
40 #if !SIZEOF_UNSIGNED_INT
41 #  undef SIZEOF_UNSIGNED_INT
42 #  define SIZEOF_UNSIGNED_INT 4
43 #endif
44 #if !SIZEOF_UNSIGNED_LONG
45 #  undef SIZEOF_UNSIGNED_LONG
46 #  define SIZEOF_UNSIGNED_LONG 4
47 #endif
48
49
50 #include <sys/types.h>
51
52
53 #ifndef HAVE_BYTE_TYPEDEF
54 #  undef byte       /* There might be a macro with this name.  */
55 /* Windows typedefs byte in the rpc headers.  Avoid warning about
56    double definition.  */
57 #if !(defined(_WIN32) && defined(cbNDRContext))
58   typedef unsigned char byte;
59 #endif
60 #  define HAVE_BYTE_TYPEDEF
61 #endif
62
63 #ifndef HAVE_USHORT_TYPEDEF
64 #  undef ushort     /* There might be a macro with this name.  */
65    typedef unsigned short ushort;
66 #  define HAVE_USHORT_TYPEDEF
67 #endif
68
69 #ifndef HAVE_ULONG_TYPEDEF
70 #  undef ulong      /* There might be a macro with this name.  */
71    typedef unsigned long ulong;
72 #  define HAVE_ULONG_TYPEDEF
73 #endif
74
75 #ifndef HAVE_U16_TYPEDEF
76 #  undef u16        /* There might be a macro with this name.  */
77 #  if SIZEOF_UNSIGNED_INT == 2
78      typedef unsigned int   u16;
79 #  elif SIZEOF_UNSIGNED_SHORT == 2
80      typedef unsigned short u16;
81 #  else
82 #    error no typedef for u16
83 #  endif
84 #  define HAVE_U16_TYPEDEF
85 #endif
86
87 #ifndef HAVE_U32_TYPEDEF
88 #  undef u32        /* There might be a macro with this name.  */
89 #  if SIZEOF_UNSIGNED_INT == 4
90      typedef unsigned int u32;
91 #  elif SIZEOF_UNSIGNED_LONG == 4
92      typedef unsigned long u32;
93 #  else
94 #    error no typedef for u32
95 #  endif
96 #  define HAVE_U32_TYPEDEF
97 #endif
98
99 #ifndef HAVE_U64_TYPEDEF
100 #  undef u64        /* There might be a macro with this name.  */
101 #  if SIZEOF_UNSIGNED_INT == 8
102      typedef unsigned int u64;
103 #    define HAVE_U64_TYPEDEF
104 #  elif SIZEOF_UNSIGNED_LONG == 8
105      typedef unsigned long u64;
106 #    define HAVE_U64_TYPEDEF
107 #  elif __GNUC__ >= 2 || defined(__SUNPRO_C)
108      typedef unsigned long long u64;
109 #    define HAVE_U64_TYPEDEF
110 #  endif
111 #endif
112
113
114 /* Some GCC attributes.  Note that we use also define some in
115    mischelp.h, but this header and types.h are not always included.
116    Should eventually be put into one file (e.g. nlib-common.h).  */
117 #if __GNUC__ >= 4
118 # define GNUPG_GCC_A_SENTINEL(a) __attribute__ ((sentinel(a)))
119 #else
120 # define GNUPG_GCC_A_SENTINEL(a)
121 #endif
122
123
124
125 #endif /*LIBJNLIB_TYPES_H*/