debug.c revision 255e72915d4cbddceb435e13d81601755714e9f3
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <stdarg.h> 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <stdlib.h> 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <stdio.h> 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "handle.h" 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "debug.h" 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/* Deprecated */ 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct sepol_handle sepol_compat_handle = { 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer .msg_callback = sepol_msg_default_handler, 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer .msg_callback_arg = NULL, 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid sepol_debug(int on) 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer{ 1555fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth sepol_compat_handle.msg_callback = (on) ? 162fa67efeaf66a9332c30a026dc1c21bef6c33a6cBenjamin Kramer sepol_msg_default_handler : NULL; 172fa67efeaf66a9332c30a026dc1c21bef6c33a6cBenjamin Kramer} 18bdc601b196c48d4cd56a5ceb45d41ae4e87371abKen Dyck 192fa67efeaf66a9332c30a026dc1c21bef6c33a6cBenjamin Kramer/* End deprecated */ 20aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 2149aa7ff1245abd03e6e998e01302df31e4c6f8f6Argyrios Kyrtzidisint sepol_msg_get_level(sepol_handle_t * handle) 22980e508ca70d6de75d2abfd96b4681fc98bb2698Steve Naroff{ 23aaba5e346dffdbad5d1c42765a89e4a7afb0da67Douglas Gregor return handle->msg_level; 24e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar} 25ea1471e0e967548c596a71469702f8846dbaf3c0John McCall 262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorhidden_def(sepol_msg_get_level) 2714110477887e3dc168ffc6c191e72d705051f99ePeter Collingbourne 282fa67efeaf66a9332c30a026dc1c21bef6c33a6cBenjamin Kramerconst char *sepol_msg_get_channel(sepol_handle_t * handle) 292fa67efeaf66a9332c30a026dc1c21bef6c33a6cBenjamin Kramer{ 301b63e4f732dbc73d90abf886b4d21f8e3a165f6dChris Lattner return handle->msg_channel; 31a9376d470ccb0eac74fe09a6b2a18a890f1d17c4Chris Lattner} 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 33f5942a44880be26878592eb052b737579349411eBenjamin Kramerhidden_def(sepol_msg_get_channel) 3485f9bceab1542aafff012d4d28e998f4ba16e362Anders Carlsson 352fa67efeaf66a9332c30a026dc1c21bef6c33a6cBenjamin Kramerconst char *sepol_msg_get_fname(sepol_handle_t * handle) 366fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman{ 37f5942a44880be26878592eb052b737579349411eBenjamin Kramer return handle->msg_fname; 382636197098e02fd7c90f9496056b8ab886dcbff0Argyrios Kyrtzidis} 3929445a0542d128cd7ee587ee52229670b9b54a12Anders Carlsson 405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerhidden_def(sepol_msg_get_fname) 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifdef __GNUC__ 421827403a7138946305c0058f262e02b595cf882fDouglas Gregor __attribute__ ((format(printf, 3, 4))) 431827403a7138946305c0058f262e02b595cf882fDouglas Gregor#endif 44225843186e3972ce798d3de00f86da9008b15a0eDouglas Gregorvoid hidden sepol_msg_default_handler(void *varg __attribute__ ((unused)), 45225843186e3972ce798d3de00f86da9008b15a0eDouglas Gregor sepol_handle_t * handle, 46ffe37fdda5b4b4f162a45155c30d9f60ce110c12Sean Hunt const char *fmt, ...) 47ffe37fdda5b4b4f162a45155c30d9f60ce110c12Sean Hunt{ 48a376d10acfacf19d6dfa41069f7929739a18dd7aDouglas Gregor 49a376d10acfacf19d6dfa41069f7929739a18dd7aDouglas Gregor FILE *stream = NULL; 50ffe37fdda5b4b4f162a45155c30d9f60ce110c12Sean Hunt 51ffe37fdda5b4b4f162a45155c30d9f60ce110c12Sean Hunt switch (sepol_msg_get_level(handle)) { 524923aa25eb39d64106a5817c02d560a3aecf8b2cDouglas Gregor 534923aa25eb39d64106a5817c02d560a3aecf8b2cDouglas Gregor case SEPOL_MSG_ERR: 544923aa25eb39d64106a5817c02d560a3aecf8b2cDouglas Gregor case SEPOL_MSG_WARN: 555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer stream = stderr; 56aa4a99b4a62615db243f7a5c433169f2fc704420Anton Korobeynikov break; 575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer case SEPOL_MSG_INFO: 585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer default: 59a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko stream = stdout; 60aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko break; 61aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko } 62aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko 63aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko fprintf(stream, "%s.%s: ", 64aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko sepol_msg_get_channel(handle), sepol_msg_get_fname(handle)); 65aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko 66aa0cd85838f2a024e589ea4e8c2094130065af21Dmitri Gribenko va_list ap; 67c3fee3539fd00a6ce21dc1f574baf76686640072Dmitri Gribenko va_start(ap, fmt); 68c3fee3539fd00a6ce21dc1f574baf76686640072Dmitri Gribenko vfprintf(stream, fmt, ap); 69c3fee3539fd00a6ce21dc1f574baf76686640072Dmitri Gribenko va_end(ap); 70c3fee3539fd00a6ce21dc1f574baf76686640072Dmitri Gribenko 71c41ace950dcf2254c9aa48e73647b89c35109f80Dmitri Gribenko fprintf(stream, "\n"); 72c41ace950dcf2254c9aa48e73647b89c35109f80Dmitri Gribenko 73c41ace950dcf2254c9aa48e73647b89c35109f80Dmitri Gribenko varg = NULL; 74c41ace950dcf2254c9aa48e73647b89c35109f80Dmitri Gribenko} 75c41ace950dcf2254c9aa48e73647b89c35109f80Dmitri Gribenko 76c41ace950dcf2254c9aa48e73647b89c35109f80Dmitri Gribenkoextern void sepol_msg_set_callback(sepol_handle_t * handle, 77dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko#ifdef __GNUC__ 78dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko __attribute__ ((format(printf, 3, 4))) 79dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko#endif 80dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko void (*msg_callback) (void *varg, 81dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko sepol_handle_t * 82dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko handle, 83dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko const char *fmt, ...), 84dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko void *msg_callback_arg) 85dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko{ 86dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko 87dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko handle->msg_callback = msg_callback; 88dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko handle->msg_callback_arg = msg_callback_arg; 89dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko} 90dce750b15eb5eb797ac9bbea118333d7d1896831Dmitri Gribenko