system-header-simulator.h revision 374ae320b87c15b0262c40e5c46e8990111df5ca
195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// Like the compiler, the static analyzer treats some functions differently if
295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// they come from a system header -- for example, it is assumed that system
395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// functions do not arbitrarily free() their parameters, and that some bugs
495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// found in system headers cannot be fixed by the user and should be
595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// suppressed.
695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#pragma clang system_header
795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __cplusplus
995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define restrict /*restrict*/
1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif
1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef struct _FILE FILE;
1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern FILE *stdin;
1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern FILE *stdout;
1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern FILE *stderr;
1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// Include a variant of standard streams that occur in the pre-processed file.
1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern FILE *__stdinp;
1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern FILE *__stdoutp;
1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern FILE *__stderrp;
2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint scanf(const char *restrict format, ...);
2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint fscanf(FILE *restrict, const char *restrict, ...);
2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint printf(const char *restrict format, ...);
2495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint fprintf(FILE *restrict, const char *restrict, ...);
2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint getchar(void);
2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// Note, on some platforms errno macro gets replaced with a function call.
2895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern int errno;
2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
3095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef __typeof(sizeof(int)) size_t;
3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleysize_t strlen(const char *);
3395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleychar *strcpy(char *restrict, const char *restrict);
3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef unsigned long __darwin_pthread_key_t;
3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef __darwin_pthread_key_t pthread_key_t;
3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint pthread_setspecific(pthread_key_t, const void *);
3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef long long __int64_t;
4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef __int64_t __darwin_off_t;
4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef __darwin_off_t fpos_t;
4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid setbuf(FILE * restrict, char * restrict);
4595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint setvbuf(FILE * restrict, char * restrict, int, size_t);
4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
4795c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyFILE *fopen(const char * restrict, const char * restrict);
4895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint fclose(FILE *);
4995c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyFILE *funopen(const void *,
5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                 int (*)(void *, char *, int),
5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                 int (*)(void *, const char *, int),
5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                 fpos_t (*)(void *, fpos_t, int),
5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                 int (*)(void *));
5495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint sqlite3_bind_text_my(int, const char*, int n, void(*)(void*));
5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
5795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef void (*freeCallback) (void*);
5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef struct {
5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley  int i;
6095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley  freeCallback fc;
6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} StWithCallback;
6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
6395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint dealocateMemWhenDoneByVal(void*, StWithCallback);
6495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint dealocateMemWhenDoneByRef(StWithCallback*, const void*);
6595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
6695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef struct CGContext *CGContextRef;
6795c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyCGContextRef CGBitmapContextCreate(void *data/*, size_t width, size_t height,
6895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                                   size_t bitsPerComponent, size_t bytesPerRow,
6995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                                   CGColorSpaceRef space,
7095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley                                   CGBitmapInfo bitmapInfo*/);
7195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid *CGBitmapContextGetData(CGContextRef context);
7295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
7395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// Include xpc.
7495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef struct _xpc_connection_s * xpc_connection_t;
7595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef void (*xpc_finalizer_t)(void *value);
7695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid xpc_connection_set_context(xpc_connection_t connection, void *context);
7795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer);
7895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid xpc_connection_resume(xpc_connection_t connection);
7995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
8095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley//The following are fake system header functions for generic testing.
8195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid fakeSystemHeaderCallInt(int *);
8295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid fakeSystemHeaderCallIntPtr(int **);
8395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley
8495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef struct __SomeStruct {
8595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley  char * p;
8695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} SomeStruct;
8795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid fakeSystemHeaderCall(SomeStruct *);
8895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley