Home | History | Annotate | Download | only in src
      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