Fix NULL pointer dereference
[openal-soft.git] / Alc / logging.h
blob18093b756a7554e1c565c67c6510844fc1b42b6f
1 #ifndef LOGGING_H
2 #define LOGGING_H
4 #include <stdio.h>
7 #ifdef __GNUC__
8 #define DECL_FORMAT(x, y, z) __attribute__((format(x, (y), (z))))
9 #else
10 #define DECL_FORMAT(x, y, z)
11 #endif
13 extern FILE *LogFile;
15 #if defined(__GNUC__) && !defined(_WIN32)
16 #define AL_PRINT(T, MSG, ...) fprintf(LogFile, "AL lib: %s %s: "MSG, T, __FUNCTION__ , ## __VA_ARGS__)
17 #else
18 void al_print(const char *type, const char *func, const char *fmt, ...) DECL_FORMAT(printf, 3,4);
19 #define AL_PRINT(T, ...) al_print((T), __FUNCTION__, __VA_ARGS__)
20 #endif
22 #ifdef __ANDROID__
23 #include <android/log.h>
24 #define LOG_ANDROID(T, MSG, ...) __android_log_print(T, "openal", "AL lib: %s: "MSG, __FUNCTION__ , ## __VA_ARGS__)
25 #else
26 #define LOG_ANDROID(T, MSG, ...) ((void)0)
27 #endif
29 enum LogLevel {
30 NoLog,
31 LogError,
32 LogWarning,
33 LogTrace,
34 LogRef
36 extern enum LogLevel LogLevel;
38 #define TRACEREF(...) do { \
39 if(LogLevel >= LogRef) \
40 AL_PRINT("(--)", __VA_ARGS__); \
41 } while(0)
43 #define TRACE(...) do { \
44 if(LogLevel >= LogTrace) \
45 AL_PRINT("(II)", __VA_ARGS__); \
46 LOG_ANDROID(ANDROID_LOG_DEBUG, __VA_ARGS__); \
47 } while(0)
49 #define WARN(...) do { \
50 if(LogLevel >= LogWarning) \
51 AL_PRINT("(WW)", __VA_ARGS__); \
52 LOG_ANDROID(ANDROID_LOG_WARN, __VA_ARGS__); \
53 } while(0)
55 #define ERR(...) do { \
56 if(LogLevel >= LogError) \
57 AL_PRINT("(EE)", __VA_ARGS__); \
58 LOG_ANDROID(ANDROID_LOG_ERROR, __VA_ARGS__); \
59 } while(0)
61 #endif /* LOGGING_H */