1/* Copyright (c) 2012 Apple Inc. All rights reserved. */
2
3#ifndef _SECURITY_AUTH_DEBUGGING_H_
4#define _SECURITY_AUTH_DEBUGGING_H_
5
6#if defined(__cplusplus)
7extern "C" {
8#endif
9
10enum {
11    AUTH_LOG_NORMAL,
12    AUTH_LOG_VERBOSE,
13    AUTH_LOG_ERROR
14};
15
16#define LOG(...) security_auth_log(AUTH_LOG_NORMAL, ##__VA_ARGS__)
17#define LOGV(...) security_auth_log(AUTH_LOG_VERBOSE, ##__VA_ARGS__)
18#define LOGE(...) security_auth_log(AUTH_LOG_ERROR, ##__VA_ARGS__)
19#if DEBUG
20#define LOGD(...) security_auth_log(AUTH_LOG_VERBOSE, ##__VA_ARGS__)
21#else
22#define LOGD(...)
23#endif
24
25void security_auth_log(int,const char *,...) __printflike(2, 3);
26
27#define CFReleaseSafe(CF) { CFTypeRef _cf = (CF); if (_cf) CFRelease(_cf); }
28#define CFReleaseNull(CF) { CFTypeRef _cf = (CF); \
29    if (_cf) { (CF) = NULL; CFRelease(_cf); } }
30#define CFRetainSafe(CF) { CFTypeRef _cf = (CF); if (_cf) CFRetain(_cf); }
31
32#define xpc_release_safe(obj)  if (obj) { xpc_release(obj); obj = NULL; }
33#define free_safe(obj)  if (obj) { free(obj); obj = NULL; }
34
35void _show_cf(CFTypeRef);
36
37#if defined(__cplusplus)
38}
39#endif
40
41#endif /* !_SECURITY_AUTH_DEBUGGING_H_ */
42