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