system-header-simulator.h revision b7a747b0c271faeeb8d0f886f0e691eb25f637d9
1865f88afc0d59d886fb2ad50429e584ecf17fa81Brian// Like the compiler, the static analyzer treats some functions differently if
2865f88afc0d59d886fb2ad50429e584ecf17fa81Brian// they come from a system header -- for example, it is assumed that system
3827e72de7537e62cac9652f8b7344ff356de9bb1Brian// functions do not arbitrarily free() their parameters, and that some bugs
4865f88afc0d59d886fb2ad50429e584ecf17fa81Brian// found in system headers cannot be fixed by the user and should be
5827e72de7537e62cac9652f8b7344ff356de9bb1Brian// suppressed.
6865f88afc0d59d886fb2ad50429e584ecf17fa81Brian#pragma clang system_header
7865f88afc0d59d886fb2ad50429e584ecf17fa81Brian
8865f88afc0d59d886fb2ad50429e584ecf17fa81Brian#ifdef __cplusplus
9865f88afc0d59d886fb2ad50429e584ecf17fa81Brian#define restrict /*restrict*/
10865f88afc0d59d886fb2ad50429e584ecf17fa81Brian#endif
11865f88afc0d59d886fb2ad50429e584ecf17fa81Brian
12865f88afc0d59d886fb2ad50429e584ecf17fa81Briantypedef struct _FILE FILE;
13865f88afc0d59d886fb2ad50429e584ecf17fa81Brianextern FILE *stdin;
14865f88afc0d59d886fb2ad50429e584ecf17fa81Brianextern FILE *stdout;
15865f88afc0d59d886fb2ad50429e584ecf17fa81Brianextern FILE *stderr;
16865f88afc0d59d886fb2ad50429e584ecf17fa81Brian// Include a variant of standard streams that occur in the pre-processed file.
17865f88afc0d59d886fb2ad50429e584ecf17fa81Brianextern FILE *__stdinp;
18865f88afc0d59d886fb2ad50429e584ecf17fa81Brianextern FILE *__stdoutp;
19865f88afc0d59d886fb2ad50429e584ecf17fa81Brianextern FILE *__stderrp;
20865f88afc0d59d886fb2ad50429e584ecf17fa81Brian
21865f88afc0d59d886fb2ad50429e584ecf17fa81Brianint scanf(const char *restrict format, ...);
22865f88afc0d59d886fb2ad50429e584ecf17fa81Brianint fscanf(FILE *restrict, const char *restrict, ...);
23865f88afc0d59d886fb2ad50429e584ecf17fa81Brianint printf(const char *restrict format, ...);
24865f88afc0d59d886fb2ad50429e584ecf17fa81Brianint fprintf(FILE *restrict, const char *restrict, ...);
25c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brianint getchar(void);
26c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brian
27c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brian// Note, on some platforms errno macro gets replaced with a function call.
28c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brianextern int errno;
29c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brian
30865f88afc0d59d886fb2ad50429e584ecf17fa81Briantypedef __typeof(sizeof(int)) size_t;
31c968d3d410a1897ecbb41d3557adaef69a4c627aBrian
32865f88afc0d59d886fb2ad50429e584ecf17fa81Briansize_t strlen(const char *);
33865f88afc0d59d886fb2ad50429e584ecf17fa81Brian
34865f88afc0d59d886fb2ad50429e584ecf17fa81Brianchar *strcpy(char *restrict, const char *restrict);
35865f88afc0d59d886fb2ad50429e584ecf17fa81Brianvoid *memcpy(void *dst, const void *src, size_t n);
3654c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
3754c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef unsigned long __darwin_pthread_key_t;
3854c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef __darwin_pthread_key_t pthread_key_t;
3954c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paulint pthread_setspecific(pthread_key_t, const void *);
4054c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
4154c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef long long __int64_t;
4254c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef __int64_t __darwin_off_t;
4354c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef __darwin_off_t fpos_t;
4454c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
4554c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paulvoid setbuf(FILE * restrict, char * restrict);
4654c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paulint setvbuf(FILE * restrict, char * restrict, int, size_t);
4754c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
4854c62ba5c36f3e2b279151f5df851d2ceee15319Brian PaulFILE *fopen(const char * restrict, const char * restrict);
4954c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paulint fclose(FILE *);
5054c62ba5c36f3e2b279151f5df851d2ceee15319Brian PaulFILE *funopen(const void *,
5154c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul                 int (*)(void *, char *, int),
5254c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul                 int (*)(void *, const char *, int),
5354c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul                 fpos_t (*)(void *, fpos_t, int),
5454c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul                 int (*)(void *));
5554c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
5654c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paulint sqlite3_bind_text_my(int, const char*, int n, void(*)(void*));
5754c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
5854c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef void (*freeCallback) (void*);
5954c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paultypedef struct {
6054c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul  int i;
6154c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul  freeCallback fc;
6254c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul} StWithCallback;
6354c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
6454c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paulint dealocateMemWhenDoneByVal(void*, StWithCallback);
65ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paulint dealocateMemWhenDoneByRef(StWithCallback*, const void*);
66ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul
67865f88afc0d59d886fb2ad50429e584ecf17fa81Briantypedef struct CGContext *CGContextRef;
68865f88afc0d59d886fb2ad50429e584ecf17fa81BrianCGContextRef CGBitmapContextCreate(void *data/*, size_t width, size_t height,
69ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul                                   size_t bitsPerComponent, size_t bytesPerRow,
70ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul                                   CGColorSpaceRef space,
71865f88afc0d59d886fb2ad50429e584ecf17fa81Brian                                   CGBitmapInfo bitmapInfo*/);
72827e72de7537e62cac9652f8b7344ff356de9bb1Brianvoid *CGBitmapContextGetData(CGContextRef context);
73865f88afc0d59d886fb2ad50429e584ecf17fa81Brian
74be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paul// Include xpc.
75be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paultypedef struct _xpc_connection_s * xpc_connection_t;
76be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paultypedef void (*xpc_finalizer_t)(void *value);
77be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paulvoid xpc_connection_set_context(xpc_connection_t connection, void *context);
78c71fa34728ef4eddd074aeb2bee49ae6a7acb3d1Brian Paulvoid xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer);
79ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paulvoid xpc_connection_resume(xpc_connection_t connection);
80be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paul
81be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paul//The following are fake system header functions for generic testing.
82be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paulvoid fakeSystemHeaderCallInt(int *);
83be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paulvoid fakeSystemHeaderCallIntPtr(int **);
8454c62ba5c36f3e2b279151f5df851d2ceee15319Brian Paul
85be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paultypedef struct __SomeStruct {
86be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paul  char * p;
8788f3656ea7ae57d22141225db0c5d90ceab420ddBrian Paul} SomeStruct;
88be1a76f88f4c3482e61e0a048a0b28b6b628f223Brian Paulvoid fakeSystemHeaderCall(SomeStruct *);
89865f88afc0d59d886fb2ad50429e584ecf17fa81Brian