1 /* This is an example of a header file for platforms/compilers that do 2 * not come with stdint.h/stddef.h/stdbool.h/string.h. To use it, define 3 * PB_SYSTEM_HEADER as "pb_syshdr.h", including the quotes, and add the 4 * extra folder to your include path. 5 * 6 * It is very likely that you will need to customize this file to suit 7 * your platform. For any compiler that supports C99, this file should 8 * not be necessary. 9 */ 10 11 #ifndef _PB_SYSHDR_H_ 12 #define _PB_SYSHDR_H_ 13 14 /* stdint.h subset */ 15 #ifdef HAVE_STDINT_H 16 #include <stdint.h> 17 #else 18 /* You will need to modify these to match the word size of your platform. */ 19 typedef signed char int8_t; 20 typedef unsigned char uint8_t; 21 typedef signed short int16_t; 22 typedef unsigned short uint16_t; 23 typedef signed int int32_t; 24 typedef unsigned int uint32_t; 25 typedef signed long long int64_t; 26 typedef unsigned long long uint64_t; 27 28 /* These are ok for most platforms, unless uint8_t is actually not available, 29 * in which case you should give the smallest available type. */ 30 typedef int8_t int_least8_t; 31 typedef uint8_t uint_least8_t; 32 typedef uint8_t uint_fast8_t; 33 typedef int16_t int_least16_t; 34 typedef uint16_t uint_least16_t; 35 #endif 36 37 /* stddef.h subset */ 38 #ifdef HAVE_STDDEF_H 39 #include <stddef.h> 40 #else 41 42 typedef uint32_t size_t; 43 #define offsetof(st, m) ((size_t)(&((st *)0)->m)) 44 45 #ifndef NULL 46 #define NULL 0 47 #endif 48 49 #endif 50 51 /* stdbool.h subset */ 52 #ifdef HAVE_STDBOOL_H 53 #include <stdbool.h> 54 #else 55 56 #ifndef __cplusplus 57 typedef int bool; 58 #define false 0 59 #define true 1 60 #endif 61 62 #endif 63 64 /* stdlib.h subset */ 65 #ifdef PB_ENABLE_MALLOC 66 #ifdef HAVE_STDLIB_H 67 #include <stdlib.h> 68 #else 69 void *realloc(void *ptr, size_t size); 70 void free(void *ptr); 71 #endif 72 #endif 73 74 /* string.h subset */ 75 #ifdef HAVE_STRING_H 76 #include <string.h> 77 #else 78 79 /* Implementations are from the Public Domain C Library (PDCLib). */ 80 static size_t strlen( const char * s ) 81 { 82 size_t rc = 0; 83 while ( s[rc] ) 84 { 85 ++rc; 86 } 87 return rc; 88 } 89 90 static void * memcpy( void *s1, const void *s2, size_t n ) 91 { 92 char * dest = (char *) s1; 93 const char * src = (const char *) s2; 94 while ( n-- ) 95 { 96 *dest++ = *src++; 97 } 98 return s1; 99 } 100 101 static void * memset( void * s, int c, size_t n ) 102 { 103 unsigned char * p = (unsigned char *) s; 104 while ( n-- ) 105 { 106 *p++ = (unsigned char) c; 107 } 108 return s; 109 } 110 #endif 111 112 #endif 113