1/* types.h - some common typedefs 2 * Copyright (C) 1998, 2000, 2002, 2003 Free Software Foundation, Inc. 3 * 4 * This file is part of Libgcrypt. 5 * 6 * Libgcrypt is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser general Public License as 8 * published by the Free Software Foundation; either version 2.1 of 9 * the License, or (at your option) any later version. 10 * 11 * Libgcrypt is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 19 */ 20 21#ifndef GCRYPT_TYPES_H 22#define GCRYPT_TYPES_H 23 24 25/* The AC_CHECK_SIZEOF() in configure fails for some machines. 26 * we provide some fallback values here */ 27#if !SIZEOF_UNSIGNED_SHORT 28#undef SIZEOF_UNSIGNED_SHORT 29#define SIZEOF_UNSIGNED_SHORT 2 30#endif 31#if !SIZEOF_UNSIGNED_INT 32#undef SIZEOF_UNSIGNED_INT 33#define SIZEOF_UNSIGNED_INT 4 34#endif 35#if !SIZEOF_UNSIGNED_LONG 36#undef SIZEOF_UNSIGNED_LONG 37#define SIZEOF_UNSIGNED_LONG 4 38#endif 39 40 41#include <sys/types.h> 42 43 44#ifndef HAVE_BYTE_TYPEDEF 45#undef byte /* maybe there is a macro with this name */ 46/* Windows typedefs byte in the rpc headers. Avoid warning about 47 double definition. */ 48#if !(defined(_WIN32) && defined(cbNDRContext)) 49 typedef unsigned char byte; 50#endif 51#define HAVE_BYTE_TYPEDEF 52#endif 53 54#ifndef HAVE_USHORT_TYPEDEF 55#undef ushort /* maybe there is a macro with this name */ 56 typedef unsigned short ushort; 57#define HAVE_USHORT_TYPEDEF 58#endif 59 60#ifndef HAVE_ULONG_TYPEDEF 61#undef ulong /* maybe there is a macro with this name */ 62 typedef unsigned long ulong; 63#define HAVE_ULONG_TYPEDEF 64#endif 65 66#ifndef HAVE_U16_TYPEDEF 67#undef u16 /* maybe there is a macro with this name */ 68#if SIZEOF_UNSIGNED_INT == 2 69 typedef unsigned int u16; 70#elif SIZEOF_UNSIGNED_SHORT == 2 71 typedef unsigned short u16; 72#else 73#error no typedef for u16 74#endif 75#define HAVE_U16_TYPEDEF 76#endif 77 78#ifndef HAVE_U32_TYPEDEF 79#undef u32 /* maybe there is a macro with this name */ 80#if SIZEOF_UNSIGNED_INT == 4 81 typedef unsigned int u32; 82#elif SIZEOF_UNSIGNED_LONG == 4 83 typedef unsigned long u32; 84#else 85#error no typedef for u32 86#endif 87#define HAVE_U32_TYPEDEF 88#endif 89 90/**************** 91 * Warning: Some systems segfault when this u64 typedef and 92 * the dummy code in cipher/md.c is not available. Examples are 93 * Solaris and IRIX. 94 */ 95#ifndef HAVE_U64_TYPEDEF 96#undef u64 /* maybe there is a macro with this name */ 97#if SIZEOF_UNSIGNED_INT == 8 98 typedef unsigned int u64; 99#define U64_C(c) (c ## U) 100#define HAVE_U64_TYPEDEF 101#elif SIZEOF_UNSIGNED_LONG == 8 102 typedef unsigned long u64; 103#define U64_C(c) (c ## UL) 104#define HAVE_U64_TYPEDEF 105#elif SIZEOF_UNSIGNED_LONG_LONG == 8 106 typedef unsigned long long u64; 107#define U64_C(c) (c ## ULL) 108#define HAVE_U64_TYPEDEF 109#elif SIZEOF_UINT64_T == 8 110 typedef uint64_t u64; 111#define U64_C(c) (UINT64_C(c)) 112#define HAVE_U64_TYPEDEF 113#endif 114#endif 115 116typedef union { 117 int a; 118 short b; 119 char c[1]; 120 long d; 121#ifdef HAVE_U64_TYPEDEF 122 u64 e; 123#endif 124 float f; 125 double g; 126} PROPERLY_ALIGNED_TYPE; 127 128#endif /*GCRYPT_TYPES_H*/ 129