1 /* 2 * Copyright 2011 Tresys Technology, LLC. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS 15 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 17 * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 18 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 21 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 22 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 * The views and conclusions contained in the software and documentation are those 26 * of the authors and should not be interpreted as representing official policies, 27 * either expressed or implied, of Tresys Technology, LLC. 28 */ 29 30 #include <stdlib.h> 31 #include <stdio.h> 32 #include <stdarg.h> 33 #include <string.h> 34 35 #include <cil/cil.h> 36 #include "cil_log.h" 37 38 static enum cil_log_level cil_log_level = CIL_ERR; 39 40 void cil_default_log_handler(__attribute__((unused)) int lvl, char *msg) 41 { 42 fprintf(stderr, "%s", msg); 43 } 44 45 void (*cil_log_handler)(int lvl, char *msg) = &cil_default_log_handler; 46 47 void cil_set_log_handler(void (*handler)(int lvl, char *msg)) 48 { 49 cil_log_handler = handler; 50 } 51 52 __attribute__ ((format (printf, 2, 0))) void cil_vlog(enum cil_log_level lvl, const char *msg, va_list args) 53 { 54 if (cil_log_level >= lvl) { 55 char buff[MAX_LOG_SIZE]; 56 vsnprintf(buff, MAX_LOG_SIZE, msg, args); 57 (*cil_log_handler)(cil_log_level, buff); 58 } 59 } 60 61 __attribute__ ((format (printf, 2, 3))) void cil_log(enum cil_log_level lvl, const char *msg, ...) 62 { 63 va_list args; 64 va_start(args, msg); 65 cil_vlog(lvl, msg, args); 66 va_end(args); 67 } 68 69 void cil_set_log_level(enum cil_log_level lvl) 70 { 71 cil_log_level = lvl; 72 } 73