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