1255e72915d4cbddceb435e13d81601755714e9fSE Android/* 2255e72915d4cbddceb435e13d81601755714e9fSE Android * Copyright (C) 2006 Tresys Technology, LLC 3255e72915d4cbddceb435e13d81601755714e9fSE Android * 4255e72915d4cbddceb435e13d81601755714e9fSE Android * This library is free software; you can redistribute it and/or 5255e72915d4cbddceb435e13d81601755714e9fSE Android * modify it under the terms of the GNU Lesser General Public 6255e72915d4cbddceb435e13d81601755714e9fSE Android * License as published by the Free Software Foundation; either 7255e72915d4cbddceb435e13d81601755714e9fSE Android * version 2.1 of the License, or (at your option) any later version. 8255e72915d4cbddceb435e13d81601755714e9fSE Android * 9255e72915d4cbddceb435e13d81601755714e9fSE Android * This library is distributed in the hope that it will be useful, 10255e72915d4cbddceb435e13d81601755714e9fSE Android * but WITHOUT ANY WARRANTY; without even the implied warranty of 11255e72915d4cbddceb435e13d81601755714e9fSE Android * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12255e72915d4cbddceb435e13d81601755714e9fSE Android * Lesser General Public License for more details. 13255e72915d4cbddceb435e13d81601755714e9fSE Android * 14255e72915d4cbddceb435e13d81601755714e9fSE Android * You should have received a copy of the GNU Lesser General Public 15255e72915d4cbddceb435e13d81601755714e9fSE Android * License along with this library; if not, write to the Free Software 16255e72915d4cbddceb435e13d81601755714e9fSE Android * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17255e72915d4cbddceb435e13d81601755714e9fSE Android */ 18255e72915d4cbddceb435e13d81601755714e9fSE Android 19255e72915d4cbddceb435e13d81601755714e9fSE Android#ifndef _SEPOL_INTERNAL_DEBUG_H_ 20255e72915d4cbddceb435e13d81601755714e9fSE Android#define _SEPOL_INTERNAL_DEBUG_H_ 21255e72915d4cbddceb435e13d81601755714e9fSE Android 22255e72915d4cbddceb435e13d81601755714e9fSE Android#include <stdio.h> 23255e72915d4cbddceb435e13d81601755714e9fSE Android#include <sepol/debug.h> 24255e72915d4cbddceb435e13d81601755714e9fSE Android#include "dso.h" 25255e72915d4cbddceb435e13d81601755714e9fSE Android#include "handle.h" 26255e72915d4cbddceb435e13d81601755714e9fSE Android 27255e72915d4cbddceb435e13d81601755714e9fSE Android#define STATUS_SUCCESS 0 28255e72915d4cbddceb435e13d81601755714e9fSE Android#define STATUS_ERR -1 29255e72915d4cbddceb435e13d81601755714e9fSE Android#define STATUS_NODATA 1 30255e72915d4cbddceb435e13d81601755714e9fSE Android 31255e72915d4cbddceb435e13d81601755714e9fSE Android/* FIXME: this needs to become a real function. Declaring variables 32255e72915d4cbddceb435e13d81601755714e9fSE Android * in a macro is _evil_ as it can shadow other variables in local scope. 33255e72915d4cbddceb435e13d81601755714e9fSE Android * The variable h has been renamed to _sepol_h to reduce this chance, but 34255e72915d4cbddceb435e13d81601755714e9fSE Android * it is still wrong. 35255e72915d4cbddceb435e13d81601755714e9fSE Android */ 36255e72915d4cbddceb435e13d81601755714e9fSE Android#define msg_write(handle_arg, level_arg, \ 37255e72915d4cbddceb435e13d81601755714e9fSE Android channel_arg, func_arg, ...) do { \ 38255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_handle_t *_sepol_h = (handle_arg) ?: &sepol_compat_handle; \ 39255e72915d4cbddceb435e13d81601755714e9fSE Android if (_sepol_h->msg_callback) { \ 40255e72915d4cbddceb435e13d81601755714e9fSE Android _sepol_h->msg_fname = func_arg; \ 41255e72915d4cbddceb435e13d81601755714e9fSE Android _sepol_h->msg_channel = channel_arg; \ 42255e72915d4cbddceb435e13d81601755714e9fSE Android _sepol_h->msg_level = level_arg; \ 43255e72915d4cbddceb435e13d81601755714e9fSE Android \ 44255e72915d4cbddceb435e13d81601755714e9fSE Android _sepol_h->msg_callback( \ 45255e72915d4cbddceb435e13d81601755714e9fSE Android _sepol_h->msg_callback_arg, \ 46255e72915d4cbddceb435e13d81601755714e9fSE Android _sepol_h, __VA_ARGS__); \ 47255e72915d4cbddceb435e13d81601755714e9fSE Android } \ 48255e72915d4cbddceb435e13d81601755714e9fSE Android } while(0) 49255e72915d4cbddceb435e13d81601755714e9fSE Android 50255e72915d4cbddceb435e13d81601755714e9fSE Android#define ERR(handle, ...) \ 51255e72915d4cbddceb435e13d81601755714e9fSE Android msg_write(handle, SEPOL_MSG_ERR, "libsepol", \ 52255e72915d4cbddceb435e13d81601755714e9fSE Android __FUNCTION__, __VA_ARGS__) 53255e72915d4cbddceb435e13d81601755714e9fSE Android 54255e72915d4cbddceb435e13d81601755714e9fSE Android#define INFO(handle, ...) \ 55255e72915d4cbddceb435e13d81601755714e9fSE Android msg_write(handle, SEPOL_MSG_INFO, "libsepol", \ 56255e72915d4cbddceb435e13d81601755714e9fSE Android __FUNCTION__, __VA_ARGS__) 57255e72915d4cbddceb435e13d81601755714e9fSE Android 58255e72915d4cbddceb435e13d81601755714e9fSE Android#define WARN(handle, ...) \ 59255e72915d4cbddceb435e13d81601755714e9fSE Android msg_write(handle, SEPOL_MSG_WARN, "libsepol", \ 60255e72915d4cbddceb435e13d81601755714e9fSE Android __FUNCTION__, __VA_ARGS__) 61255e72915d4cbddceb435e13d81601755714e9fSE Android 62255e72915d4cbddceb435e13d81601755714e9fSE Android#ifdef __GNUC__ 63255e72915d4cbddceb435e13d81601755714e9fSE Android__attribute__ ((format(printf, 3, 4))) 64255e72915d4cbddceb435e13d81601755714e9fSE Android#endif 65255e72915d4cbddceb435e13d81601755714e9fSE Androidextern void hidden sepol_msg_default_handler(void *varg, 66255e72915d4cbddceb435e13d81601755714e9fSE Android sepol_handle_t * msg, 67255e72915d4cbddceb435e13d81601755714e9fSE Android const char *fmt, ...); 68255e72915d4cbddceb435e13d81601755714e9fSE Android 69255e72915d4cbddceb435e13d81601755714e9fSE Androidextern struct sepol_handle sepol_compat_handle; 70255e72915d4cbddceb435e13d81601755714e9fSE Android 71255e72915d4cbddceb435e13d81601755714e9fSE Androidhidden_proto(sepol_msg_get_channel) 72255e72915d4cbddceb435e13d81601755714e9fSE Android hidden_proto(sepol_msg_get_fname) 73255e72915d4cbddceb435e13d81601755714e9fSE Android hidden_proto(sepol_msg_get_level) 74255e72915d4cbddceb435e13d81601755714e9fSE Android#endif 75