1255e72915d4cbddceb435e13d81601755714e9fSE Android#include <stdarg.h> 2255e72915d4cbddceb435e13d81601755714e9fSE Android#include <stdlib.h> 3255e72915d4cbddceb435e13d81601755714e9fSE Android#include <stdio.h> 4255e72915d4cbddceb435e13d81601755714e9fSE Android#include "handle.h" 5255e72915d4cbddceb435e13d81601755714e9fSE Android#include "debug.h" 6255e72915d4cbddceb435e13d81601755714e9fSE Android 7255e72915d4cbddceb435e13d81601755714e9fSE Android/* Deprecated */ 8255e72915d4cbddceb435e13d81601755714e9fSE Androidstruct sepol_handle sepol_compat_handle = { 9255e72915d4cbddceb435e13d81601755714e9fSE Android .msg_callback = sepol_msg_default_handler, 10255e72915d4cbddceb435e13d81601755714e9fSE Android .msg_callback_arg = NULL, 11255e72915d4cbddceb435e13d81601755714e9fSE Android}; 12255e72915d4cbddceb435e13d81601755714e9fSE Android 13255e72915d4cbddceb435e13d81601755714e9fSE Androidvoid sepol_debug(int on) 14255e72915d4cbddceb435e13d81601755714e9fSE Android{ 15255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_compat_handle.msg_callback = (on) ? 16255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_msg_default_handler : NULL; 17255e72915d4cbddceb435e13d81601755714e9fSE Android} 18255e72915d4cbddceb435e13d81601755714e9fSE Android 19255e72915d4cbddceb435e13d81601755714e9fSE Android/* End deprecated */ 20255e72915d4cbddceb435e13d81601755714e9fSE Android 21255e72915d4cbddceb435e13d81601755714e9fSE Androidint sepol_msg_get_level(sepol_handle_t * handle) 22255e72915d4cbddceb435e13d81601755714e9fSE Android{ 23255e72915d4cbddceb435e13d81601755714e9fSE Android return handle->msg_level; 24255e72915d4cbddceb435e13d81601755714e9fSE Android} 25255e72915d4cbddceb435e13d81601755714e9fSE Android 26255e72915d4cbddceb435e13d81601755714e9fSE Androidhidden_def(sepol_msg_get_level) 27255e72915d4cbddceb435e13d81601755714e9fSE Android 28255e72915d4cbddceb435e13d81601755714e9fSE Androidconst char *sepol_msg_get_channel(sepol_handle_t * handle) 29255e72915d4cbddceb435e13d81601755714e9fSE Android{ 30255e72915d4cbddceb435e13d81601755714e9fSE Android return handle->msg_channel; 31255e72915d4cbddceb435e13d81601755714e9fSE Android} 32255e72915d4cbddceb435e13d81601755714e9fSE Android 33255e72915d4cbddceb435e13d81601755714e9fSE Androidhidden_def(sepol_msg_get_channel) 34255e72915d4cbddceb435e13d81601755714e9fSE Android 35255e72915d4cbddceb435e13d81601755714e9fSE Androidconst char *sepol_msg_get_fname(sepol_handle_t * handle) 36255e72915d4cbddceb435e13d81601755714e9fSE Android{ 37255e72915d4cbddceb435e13d81601755714e9fSE Android return handle->msg_fname; 38255e72915d4cbddceb435e13d81601755714e9fSE Android} 39255e72915d4cbddceb435e13d81601755714e9fSE Android 40255e72915d4cbddceb435e13d81601755714e9fSE Androidhidden_def(sepol_msg_get_fname) 41255e72915d4cbddceb435e13d81601755714e9fSE Android#ifdef __GNUC__ 42255e72915d4cbddceb435e13d81601755714e9fSE Android __attribute__ ((format(printf, 3, 4))) 43255e72915d4cbddceb435e13d81601755714e9fSE Android#endif 44255e72915d4cbddceb435e13d81601755714e9fSE Androidvoid hidden sepol_msg_default_handler(void *varg __attribute__ ((unused)), 45255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_handle_t * handle, 46255e72915d4cbddceb435e13d81601755714e9fSE Android const char *fmt, ...) 47255e72915d4cbddceb435e13d81601755714e9fSE Android{ 48255e72915d4cbddceb435e13d81601755714e9fSE Android 49255e72915d4cbddceb435e13d81601755714e9fSE Android FILE *stream = NULL; 50255e72915d4cbddceb435e13d81601755714e9fSE Android 51255e72915d4cbddceb435e13d81601755714e9fSE Android switch (sepol_msg_get_level(handle)) { 52255e72915d4cbddceb435e13d81601755714e9fSE Android 53255e72915d4cbddceb435e13d81601755714e9fSE Android case SEPOL_MSG_ERR: 54255e72915d4cbddceb435e13d81601755714e9fSE Android case SEPOL_MSG_WARN: 55255e72915d4cbddceb435e13d81601755714e9fSE Android stream = stderr; 56255e72915d4cbddceb435e13d81601755714e9fSE Android break; 57255e72915d4cbddceb435e13d81601755714e9fSE Android case SEPOL_MSG_INFO: 58255e72915d4cbddceb435e13d81601755714e9fSE Android default: 59255e72915d4cbddceb435e13d81601755714e9fSE Android stream = stdout; 60255e72915d4cbddceb435e13d81601755714e9fSE Android break; 61255e72915d4cbddceb435e13d81601755714e9fSE Android } 62255e72915d4cbddceb435e13d81601755714e9fSE Android 63255e72915d4cbddceb435e13d81601755714e9fSE Android fprintf(stream, "%s.%s: ", 64255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_msg_get_channel(handle), sepol_msg_get_fname(handle)); 65255e72915d4cbddceb435e13d81601755714e9fSE Android 66255e72915d4cbddceb435e13d81601755714e9fSE Android va_list ap; 67255e72915d4cbddceb435e13d81601755714e9fSE Android va_start(ap, fmt); 68255e72915d4cbddceb435e13d81601755714e9fSE Android vfprintf(stream, fmt, ap); 69255e72915d4cbddceb435e13d81601755714e9fSE Android va_end(ap); 70255e72915d4cbddceb435e13d81601755714e9fSE Android 71255e72915d4cbddceb435e13d81601755714e9fSE Android fprintf(stream, "\n"); 72255e72915d4cbddceb435e13d81601755714e9fSE Android 73255e72915d4cbddceb435e13d81601755714e9fSE Android varg = NULL; 74255e72915d4cbddceb435e13d81601755714e9fSE Android} 75255e72915d4cbddceb435e13d81601755714e9fSE Android 76255e72915d4cbddceb435e13d81601755714e9fSE Androidextern void sepol_msg_set_callback(sepol_handle_t * handle, 77255e72915d4cbddceb435e13d81601755714e9fSE Android#ifdef __GNUC__ 78255e72915d4cbddceb435e13d81601755714e9fSE Android __attribute__ ((format(printf, 3, 4))) 79255e72915d4cbddceb435e13d81601755714e9fSE Android#endif 80255e72915d4cbddceb435e13d81601755714e9fSE Android void (*msg_callback) (void *varg, 81255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_handle_t * 82255e72915d4cbddceb435e13d81601755714e9fSE Android handle, 83255e72915d4cbddceb435e13d81601755714e9fSE Android const char *fmt, ...), 84255e72915d4cbddceb435e13d81601755714e9fSE Android void *msg_callback_arg) 85255e72915d4cbddceb435e13d81601755714e9fSE Android{ 86255e72915d4cbddceb435e13d81601755714e9fSE Android 87255e72915d4cbddceb435e13d81601755714e9fSE Android handle->msg_callback = msg_callback; 88255e72915d4cbddceb435e13d81601755714e9fSE Android handle->msg_callback_arg = msg_callback_arg; 89255e72915d4cbddceb435e13d81601755714e9fSE Android} 90