17ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* This is an example of a header file for platforms/compilers that do 27ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * not come with stdint.h/stddef.h/stdbool.h/string.h. To use it, define 37ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * PB_SYSTEM_HEADER as "pb_syshdr.h", including the quotes, and add the 47ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * extra folder to your include path. 57ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * 67ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * It is very likely that you will need to customize this file to suit 77ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * your platform. For any compiler that supports C99, this file should 87ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * not be necessary. 97ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen */ 107ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 117ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifndef _PB_SYSHDR_H_ 127ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#define _PB_SYSHDR_H_ 137ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 147ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* stdint.h subset */ 157ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifdef HAVE_STDINT_H 167ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <stdint.h> 177ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#else 187ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* You will need to modify these to match the word size of your platform. */ 197ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef signed char int8_t; 207ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef unsigned char uint8_t; 217ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef signed short int16_t; 227ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef unsigned short uint16_t; 237ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef signed int int32_t; 247ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef unsigned int uint32_t; 257ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef signed long long int64_t; 267ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef unsigned long long uint64_t; 277ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 287ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 297ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* stddef.h subset */ 307ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifdef HAVE_STDDEF_H 317ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <stddef.h> 327ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#else 337ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 347ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef uint32_t size_t; 357ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#define offsetof(st, m) ((size_t)(&((st *)0)->m)) 367ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 377ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifndef NULL 387ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#define NULL 0 397ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 407ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 417ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 427ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 437ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* stdbool.h subset */ 447ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifdef HAVE_STDBOOL_H 457ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <stdbool.h> 467ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#else 477ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 487ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifndef __cplusplus 497ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohentypedef int bool; 507ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#define false 0 517ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#define true 1 527ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 537ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 547ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 557ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 567ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* stdlib.h subset */ 577ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifdef PB_ENABLE_MALLOC 587ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifdef HAVE_STDLIB_H 597ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <stdlib.h> 607ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#else 617ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenvoid *realloc(void *ptr, size_t size); 627ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenvoid free(void *ptr); 637ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 647ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 657ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 667ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* string.h subset */ 677ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#ifdef HAVE_STRING_H 687ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <string.h> 697ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#else 707ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 717ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* Implementations are from the Public Domain C Library (PDCLib). */ 727ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenstatic size_t strlen( const char * s ) 737ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen{ 747ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen size_t rc = 0; 757ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen while ( s[rc] ) 767ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 777ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen ++rc; 787ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 797ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return rc; 807ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen} 817ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 827ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenstatic void * memcpy( void *s1, const void *s2, size_t n ) 837ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen{ 847ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen char * dest = (char *) s1; 857ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen const char * src = (const char *) s2; 867ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen while ( n-- ) 877ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 887ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen *dest++ = *src++; 897ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 907ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return s1; 917ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen} 927ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 937ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenstatic void * memset( void * s, int c, size_t n ) 947ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen{ 957ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen unsigned char * p = (unsigned char *) s; 967ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen while ( n-- ) 977ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 987ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen *p++ = (unsigned char) c; 997ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 1007ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return s; 1017ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen} 1027ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 1037ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 1047ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#endif 105