summaryrefslogtreecommitdiffstats
path: root/src/debug.c
diff options
context:
space:
mode:
authorHolger Freyther <zecke@selfish.org>2008-12-27 12:03:07 +0000
committerHolger Freyther <zecke@selfish.org>2008-12-27 12:03:07 +0000
commitd546e316280dabcca301699ba238c3bed35b10ec (patch)
tree2df1097eb9b7966602e59f17a89a0e87b4db0b89 /src/debug.c
parent42f50bb3ee543d4571ed0bfad3262148282ec0ed (diff)
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.
Diffstat (limited to 'src/debug.c')
-rw-r--r--src/debug.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/debug.c b/src/debug.c
index a814224c8..2b91814ad 100644
--- a/src/debug.c
+++ b/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;