[misc] Add debug levels and a VSC__DEBUG macro.
authorMatthias Bolte <matthias.bolte@googlemail.com>
Thu, 23 Apr 2009 20:00:58 +0000 (22:00 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Thu, 23 Apr 2009 20:00:58 +0000 (22:00 +0200)
Signed-off-by: Matthias Bolte <matthias.bolte@googlemail.com>

include/libvscmisc/Makefile
include/libvscmisc/assert.h
include/libvscmisc/debug.h [new file with mode: 0644]
include/libvscmisc/types.h
misc/Makefile
misc/assert.c
misc/debug.c [new file with mode: 0644]

index 847fefb..26fa9d8 100644 (file)
@@ -7,8 +7,8 @@
 
 include ../../config.mk
 
-HEADERS  = assert.h error.h filesystem.h libvscmisc.h list.h memory.h string.h \
-           types.h
+HEADERS  = assert.h debug.h error.h filesystem.h libvscmisc.h list.h memory.h \
+           string.h types.h
 TARGET   = libvscmisc
 
 #
index 7d32246..29d93ea 100644 (file)
 #define __VSC_MISC__ASSERT_H__
 
 #ifndef NDEBUG
+
 #define VSC__ASSERT(condition) \
        do { \
                if (! (condition)) { \
                        vsc_assert_failed (__FILE__, __LINE__, __FUNCTION__, #condition); \
                } \
        } while (0)
+
 #else
+
 #define VSC__ASSERT(condition) do { } while (0)
+
 #endif
 
 #ifdef __cplusplus
diff --git a/include/libvscmisc/debug.h b/include/libvscmisc/debug.h
new file mode 100644 (file)
index 0000000..6702939
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * debug.h: Library of miscellaneous stuff for other libvsc* libraries
+ *
+ * Copyright (C) 2009 Matthias Bolte <matthias.bolte@googlemail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+#ifndef __VSC_MISC__DEBUG_H__
+#define __VSC_MISC__DEBUG_H__
+
+#include "types.h"
+
+#ifndef NDEBUG
+
+#define VSC__DEBUG1(message) \
+       vsc_debug_report (__FILE__, __LINE__, __FUNCTION__, message)
+
+#define VSC__DEBUG2(message, ...) \
+       vsc_debug_report (__FILE__, __LINE__, __FUNCTION__, message, __VA_ARGS__)
+
+#else
+
+#define VSC__DEBUG1(message) do { } while (0)
+
+#define VSC__DEBUG2(message, ...) do { } while (0)
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void
+vsc_debug_set_level (enum VscDebugLevel debug_level);
+
+void
+vsc_debug_report (const char *file, int line, const char *function,
+                  const char *message, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __VSC_MISC__DEBUG_H__ */
index 10e5ec0..c8f120c 100644 (file)
 extern "C" {
 #endif
 
+enum VscDebugLevel {
+       VSC__DEBUG_LEVEL__NONE = 0,
+       VSC__DEBUG_LEVEL__DEBUG,
+};
+
 enum VscErrorCode {
        VSC__ERROR_CODE__UNDEFINED = 0,
        VSC__ERROR_CODE__INTERNAL_ERROR,
index 9bdf67b..b939052 100644 (file)
@@ -7,7 +7,7 @@
 
 include ../config.mk
 
-OBJS     = assert.o error.o filesystem.o list.o memory.o string.o
+OBJS     = assert.o debug.o error.o filesystem.o list.o memory.o string.o
 TARGET   = libvscmisc.so
 
 #
index 0e883ff..6e6d3f6 100644 (file)
@@ -40,7 +40,7 @@ vsc_assert_failed (const char *file, int line, const char *function,
        gettimeofday (&timestamp, NULL);
        localtime_r (&timestamp.tv_sec, &time_info);
 
-       fprintf (stderr, "%02d:%02d:%02d.%03d %s:%d %s : assertion '%s' failed\n",
+       fprintf (stderr, "%02d:%02d:%02d.%03d %s:%d %s : Assertion '%s' failed\n",
                 time_info.tm_hour, time_info.tm_min, time_info.tm_sec,
                 (int) timestamp.tv_usec / 1000, file, line, function, condition);
 
diff --git a/misc/debug.c b/misc/debug.c
new file mode 100644 (file)
index 0000000..7b3608b
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * debug.c: Library of miscellaneous stuff for other libvsc* libraries
+ *
+ * Copyright (C) 2009 Matthias Bolte <matthias.bolte@googlemail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+#include "../include/libvscmisc/debug.h"
+
+#include "../include/libvscmisc/assert.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/time.h>
+
+static enum VscDebugLevel _debug_level = VSC__DEBUG_LEVEL__NONE;
+
+void
+vsc_debug_set_level (enum VscDebugLevel debug_level)
+{
+       _debug_level = debug_level;
+}
+
+void
+vsc_debug_report (const char *file, int line, const char *function,
+                  const char *message, ...)
+{
+       va_list args;
+       struct timeval timestamp;
+       struct tm time_info;
+
+       VSC__ASSERT (file != NULL);
+       VSC__ASSERT (line >= 0);
+       VSC__ASSERT (function != NULL);
+       VSC__ASSERT (message != NULL);
+
+       if (_debug_level < VSC__DEBUG_LEVEL__DEBUG) {
+               return;
+       }
+
+       gettimeofday (&timestamp, NULL);
+       localtime_r (&timestamp.tv_sec, &time_info);
+
+       printf ("%02d:%02d:%02d.%03d %s:%d %s : Debug : ",
+                time_info.tm_hour, time_info.tm_min, time_info.tm_sec,
+                (int) timestamp.tv_usec / 1000, file, line, function);
+
+       va_start (args, message);
+       vprintf (message, args);
+       va_end (args);
+
+       printf ("\n");
+}