aboutsummaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--configure.in1
-rw-r--r--include/openbsc/debug.h1
-rw-r--r--src/debug.c48
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/debug/Makefile.am4
-rw-r--r--tests/debug/debug_test.c34
6 files changed, 89 insertions, 1 deletions
diff --git a/configure.in b/configure.in
index 034972a43..d4902d6d4 100644
--- a/configure.in
+++ b/configure.in
@@ -21,5 +21,6 @@ AC_OUTPUT(
include/Makefile
src/Makefile
tests/Makefile
+ tests/debug/Makefile
tests/timer/Makefile
Makefile)
diff --git a/include/openbsc/debug.h b/include/openbsc/debug.h
index b95b1a7d4..b3b170260 100644
--- a/include/openbsc/debug.h
+++ b/include/openbsc/debug.h
@@ -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 */
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;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f7cfd549f..f964be129 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1 +1 @@
-SUBDIRS = timer
+SUBDIRS = debug timer
diff --git a/tests/debug/Makefile.am b/tests/debug/Makefile.am
new file mode 100644
index 000000000..0cdf46ad5
--- /dev/null
+++ b/tests/debug/Makefile.am
@@ -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
diff --git a/tests/debug/debug_test.c b/tests/debug/debug_test.c
new file mode 100644
index 000000000..4fe539c5a
--- /dev/null
+++ b/tests/debug/debug_test.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");
+}