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:
Holger Freyther 2008-12-27 12:03:07 +00:00
parent 42f50bb3ee
commit d546e31628
6 changed files with 89 additions and 1 deletions

View File

@ -21,5 +21,6 @@ AC_OUTPUT(
include/Makefile
src/Makefile
tests/Makefile
tests/debug/Makefile
tests/timer/Makefile
Makefile)

View File

@ -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 */

View File

@ -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;

View File

@ -1 +1 @@
SUBDIRS = timer
SUBDIRS = debug timer

4
tests/debug/Makefile.am Normal file
View File

@ -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

34
tests/debug/debug_test.c Normal file
View File

@ -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");
}