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. */ 19typedef signed char int8_t; 20typedef unsigned char uint8_t; 21typedef signed short int16_t; 22typedef unsigned short uint16_t; 23typedef signed int int32_t; 24typedef unsigned int uint32_t; 25typedef signed long long int64_t; 26typedef unsigned long long uint64_t; 27#endif 28 29/* stddef.h subset */ 30#ifdef HAVE_STDDEF_H 31#include <stddef.h> 32#else 33 34typedef uint32_t size_t; 35#define offsetof(st, m) ((size_t)(&((st *)0)->m)) 36 37#ifndef NULL 38#define NULL 0 39#endif 40 41#endif 42 43/* stdbool.h subset */ 44#ifdef HAVE_STDBOOL_H 45#include <stdbool.h> 46#else 47 48#ifndef __cplusplus 49typedef int bool; 50#define false 0 51#define true 1 52#endif 53 54#endif 55 56/* stdlib.h subset */ 57#ifdef PB_ENABLE_MALLOC 58#ifdef HAVE_STDLIB_H 59#include <stdlib.h> 60#else 61void *realloc(void *ptr, size_t size); 62void free(void *ptr); 63#endif 64#endif 65 66/* string.h subset */ 67#ifdef HAVE_STRING_H 68#include <string.h> 69#else 70 71/* Implementations are from the Public Domain C Library (PDCLib). */ 72static size_t strlen( const char * s ) 73{ 74 size_t rc = 0; 75 while ( s[rc] ) 76 { 77 ++rc; 78 } 79 return rc; 80} 81 82static void * memcpy( void *s1, const void *s2, size_t n ) 83{ 84 char * dest = (char *) s1; 85 const char * src = (const char *) s2; 86 while ( n-- ) 87 { 88 *dest++ = *src++; 89 } 90 return s1; 91} 92 93static void * memset( void * s, int c, size_t n ) 94{ 95 unsigned char * p = (unsigned char *) s; 96 while ( n-- ) 97 { 98 *p++ = (unsigned char) c; 99 } 100 return s; 101} 102#endif 103 104#endif 105