MySmartUSB-MK3-Interface

git clone git://xatko.vsos.ethz.ch/MySmartUSB-MK3-Interface.git
Log | Files | Refs

log.c (1937B)


      1 /*
      2  * MySmartUSB MK3 Interface
      3  * 
      4  * @copyright: 	Copyright (c) 2012, Dominik Schmidt
      5  * @author:		Dominik Schmidt <das1993@hotmail.com>
      6  * @version:	0.0.0 
      7  * @license: 	CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)
      8  * 
      9 */
     10 #include <log.h>
     11 #include <stdio.h>
     12 #include <errno.h>
     13 #include <stdlib.h>
     14 #include <string.h>
     15 #include <option.h>
     16 char LOG_LEVEL_names[LOG_LEVEL_COUNT][8]={"DEBUG","INFO","WARNING","ERROR","FATAL"};
     17 void log_string(char *str, unsigned short int level, char *force_color){
     18 	FILE *stream;
     19 	if(level>=LOG_LEVEL_WARNING&&level!=LOG_LEVEL_COUNT){
     20 		stream=stderr;
     21 	}
     22 	else{
     23 		stream=stdout;
     24 	}
     25 	char *color=(force_color==NULL) ? "" : force_color;
     26 	char *reset_color="\e[0m";
     27 	if(configuration.color&&force_color==NULL){
     28 	switch(level){
     29 			case LOG_LEVEL_DEBUG:
     30 				color="\e[2;37;40m";
     31 				break;
     32 			case LOG_LEVEL_INFO:
     33 				color="\e[0;37;40m";
     34 				break;
     35 			case LOG_LEVEL_WARNING:
     36 				color="\e[1;33;40m";
     37 				break;
     38 			case LOG_LEVEL_ERROR:
     39 				color="\e[1;31;40m";
     40 				break;
     41 			case LOG_LEVEL_FATAL:
     42 				color="\e[1;33;41m";
     43 				break;
     44 		}
     45 	}
     46 	if((configuration.log_level>LOG_LEVEL_FATAL) ? LOG_LEVEL_FATAL : configuration.log_level<=level){
     47 		fprintf(stream,"%s%s%s\n",color, str, reset_color);
     48 	}
     49 }
     50 void do_log(char *src, char *msg, unsigned short int level, unsigned short int type){
     51 	int error=errno;
     52 	char success_color[]="\e[1;32m";
     53 	char *force_color=NULL;
     54 	if(type==LOG_TYPE_SUCCESS){
     55 		level=LOG_LEVEL_COUNT;
     56 		force_color=success_color;
     57 	}
     58 	char *str=malloc(strlen("%s[%s]: %s (%s)")+strlen(src)+strlen(msg)+strlen(LOG_LEVEL_names[level])+strlen(strerror(error)));
     59 	if(type==LOG_TYPE_SIGNAL){
     60 		sprintf(str,"%s[%s]: %s (%s)",LOG_LEVEL_names[level],src,msg,strerror(error));
     61 	}
     62 	else if(type==LOG_TYPE_RESULT){
     63 		level=LOG_LEVEL_COUNT;
     64 		sprintf(str,"%s",msg);
     65 	}
     66 	else{
     67 		sprintf(str,"%s[%s]: %s",LOG_LEVEL_names[level],src,msg);
     68 	}
     69 	log_string(str,level, force_color);
     70 	free(str);
     71 }