/* This is an example of a header file for platforms/compilers that do * not come with stdint.h/stddef.h/stdbool.h/string.h. To use it, define * PB_SYSTEM_HEADER as "pb_syshdr.h", including the quotes, and add the * extra folder to your include path. * * It is very likely that you will need to customize this file to suit * your platform. For any compiler that supports C99, this file should * not be necessary. */ #ifndef _PB_SYSHDR_H_ #define _PB_SYSHDR_H_ /* stdint.h subset */ #ifdef HAVE_STDINT_H #include <stdint.h> #else /* You will need to modify these to match the word size of your platform. */ typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed short int16_t; typedef unsigned short uint16_t; typedef signed int int32_t; typedef unsigned int uint32_t; typedef signed long long int64_t; typedef unsigned long long uint64_t; #endif /* stddef.h subset */ #ifdef HAVE_STDDEF_H #include <stddef.h> #else typedef uint32_t size_t; #define offsetof(st, m) ((size_t)(&((st *)0)->m)) #ifndef NULL #define NULL 0 #endif #endif /* stdbool.h subset */ #ifdef HAVE_STDBOOL_H #include <stdbool.h> #else #ifndef __cplusplus typedef int bool; #define false 0 #define true 1 #endif #endif /* stdlib.h subset */ #ifdef PB_ENABLE_MALLOC #ifdef HAVE_STDLIB_H #include <stdlib.h> #else void *realloc(void *ptr, size_t size); void free(void *ptr); #endif #endif /* string.h subset */ #ifdef HAVE_STRING_H #include <string.h> #else /* Implementations are from the Public Domain C Library (PDCLib). */ static size_t strlen( const char * s ) { size_t rc = 0; while ( s[rc] ) { ++rc; } return rc; } static void * memcpy( void *s1, const void *s2, size_t n ) { char * dest = (char *) s1; const char * src = (const char *) s2; while ( n-- ) { *dest++ = *src++; } return s1; } static void * memset( void * s, int c, size_t n ) { unsigned char * p = (unsigned char *) s; while ( n-- ) { *p++ = (unsigned char) c; } return s; } #endif #endif