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