Add code to parse a debug category string
Use strdup to be able to use strtok on the category string and add a test case. Also safe some more information to be able to use color in the print statement.
This commit is contained in:
parent
42f50bb3ee
commit
d546e31628
|
@ -21,5 +21,6 @@ AC_OUTPUT(
|
|||
include/Makefile
|
||||
src/Makefile
|
||||
tests/Makefile
|
||||
tests/debug/Makefile
|
||||
tests/timer/Makefile
|
||||
Makefile)
|
||||
|
|
|
@ -18,5 +18,6 @@
|
|||
#endif
|
||||
|
||||
void debugp(unsigned int subsys, char *file, int line, const char *format, ...);
|
||||
void parse_category_mask(const char* mask);
|
||||
|
||||
#endif /* _DEBUG_H */
|
||||
|
|
48
src/debug.c
48
src/debug.c
|
@ -1,5 +1,6 @@
|
|||
/* Debugging/Logging support code */
|
||||
/* (C) 2008 by Harald Welte <laforge@gnumonks.org>
|
||||
* (C) 2008 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||
* All Rights Reserved
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -19,14 +20,61 @@
|
|||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <openbsc/debug.h>
|
||||
|
||||
static unsigned int debug_mask = 0xffffffff & ~DMI;
|
||||
|
||||
struct debug_info {
|
||||
const char *name;
|
||||
const char *color;
|
||||
const char *description;
|
||||
int number;
|
||||
};
|
||||
|
||||
#define DEBUG_CATEGORY(NUMBER, NAME, COLOR, DESCRIPTION) \
|
||||
{ .name = NAME, .color = COLOR, .description = DESCRIPTION, .number = NUMBER },
|
||||
|
||||
#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
|
||||
|
||||
static const struct debug_info debug_info[] = {
|
||||
DEBUG_CATEGORY(DRLL, "DRLL", "", "")
|
||||
DEBUG_CATEGORY(DCC, "DCC", "", "")
|
||||
DEBUG_CATEGORY(DNM, "DMM", "", "")
|
||||
DEBUG_CATEGORY(DRR, "DRR", "", "")
|
||||
DEBUG_CATEGORY(DRSL, "DRSSL","", "")
|
||||
DEBUG_CATEGORY(DNM, "DNM", "", "")
|
||||
};
|
||||
|
||||
/*
|
||||
* Parse the category mask.
|
||||
* category1:category2:category3
|
||||
*/
|
||||
void parse_category_mask(const char *_mask)
|
||||
{
|
||||
unsigned int new_mask = 0;
|
||||
int i = 0;
|
||||
char *mask = strdup(_mask);
|
||||
char *category_token = NULL;
|
||||
|
||||
category_token = strtok(mask, ":");
|
||||
do {
|
||||
for (i = 0; i < ARRAY_SIZE(debug_info); ++i) {
|
||||
if (strcasecmp(debug_info[i].name, category_token) == 0)
|
||||
new_mask |= debug_info[i].number;
|
||||
}
|
||||
} while (category_token = strtok(NULL, ":"));
|
||||
|
||||
|
||||
free(mask);
|
||||
debug_mask = new_mask;
|
||||
}
|
||||
|
||||
void debugp(unsigned int subsys, char *file, int line, const char *format, ...)
|
||||
{
|
||||
char *timestr;
|
||||
|
|
|
@ -1 +1 @@
|
|||
SUBDIRS = timer
|
||||
SUBDIRS = debug timer
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
INCLUDES = $(all_includes) -I$(top_srcdir)/include
|
||||
noinst_PROGRAMS = debug_test
|
||||
|
||||
debug_test_SOURCES = debug_test.c $(top_srcdir)/src/debug.c
|
|
@ -0,0 +1,34 @@
|
|||
/* simple test for the debug interface */
|
||||
/*
|
||||
* (C) 2008 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||
* All Rights Reserved
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <openbsc/debug.h>
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
parse_category_mask("DRLL");
|
||||
DEBUGP(DCC, "You should not see this\n");
|
||||
|
||||
parse_category_mask("DRLL:DCC");
|
||||
DEBUGP(DRLL, "You should see this\n");
|
||||
DEBUGP(DCC, "You should see this\n");
|
||||
DEBUGP(DMM, "You should not see this\n");
|
||||
}
|
Loading…
Reference in New Issue