[PATCH 1/3] debug: Add ability to dump_data per debug class

Kai Blin kai at samba.org
Fri May 17 02:16:16 MDT 2013


Signed-off-by: Kai Blin <kai at samba.org>
---
 lib/util/debug.h      |  7 +++++++
 lib/util/samba_util.h |  8 ++++++++
 lib/util/util.c       | 30 ++++++++++++++++++++++++++++++
 3 files changed, 45 insertions(+)

diff --git a/lib/util/debug.h b/lib/util/debug.h
index feea0a8..30df787 100644
--- a/lib/util/debug.h
+++ b/lib/util/debug.h
@@ -161,10 +161,17 @@ extern int  *DEBUGLEVEL_CLASS;
   ( ((level) <= MAX_DEBUG_LEVEL) && \
     unlikely(DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level)))
 
+#define CHECK_DEBUGLVLC( dbgc_class, level ) \
+  ( ((level) <= MAX_DEBUG_LEVEL) && \
+    unlikely(DEBUGLEVEL_CLASS[ dbgc_class ] >= (level)))
+
 #define DEBUGLVL( level ) \
   ( CHECK_DEBUGLVL(level) \
    && dbghdrclass( level, DBGC_CLASS, __location__, __FUNCTION__ ) )
 
+#define DEBUGLVLC( dbgc_class, level ) \
+  ( CHECK_DEBUGLVLC( dbgc_class, level ) \
+   && dbghdrclass( level, dbgc_class, __location__, __FUNCTION__ ) )
 
 #define DEBUG( level, body ) \
   (void)( ((level) <= MAX_DEBUG_LEVEL) && \
diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h
index 6a4373e..89aa9aa 100644
--- a/lib/util/samba_util.h
+++ b/lib/util/samba_util.h
@@ -693,6 +693,14 @@ _PUBLIC_ void dump_data(int level, const uint8_t *buf,int len);
 /**
  * Write dump of binary data to the log file.
  *
+ * The data is only written if the log level is at least level for
+ * debug class dbgc_class.
+ */
+_PUBLIC_ void dump_data_dbgc(int dbgc_class, int level, const uint8_t *buf, int len);
+
+/**
+ * Write dump of binary data to the log file.
+ *
  * The data is only written if the log level is at least level.
  * 16 zero bytes in a row are omitted
  */
diff --git a/lib/util/util.c b/lib/util/util.c
index 7962c1e..7c669fb 100644
--- a/lib/util/util.c
+++ b/lib/util/util.c
@@ -384,6 +384,19 @@ _PUBLIC_ bool fcntl_lock(int fd, int op, off_t offset, off_t count, int type)
 	return true;
 }
 
+struct debug_channel_level {
+	int channel;
+	int level;
+};
+
+static void debugadd_channel_cb(const char *buf, void *private_data)
+{
+	struct debug_channel_level *dcl =
+		(struct debug_channel_level *)private_data;
+
+	DEBUGADDC(dcl->channel, dcl->level,("%s", buf));
+}
+
 static void debugadd_cb(const char *buf, void *private_data)
 {
 	int *plevel = (int *)private_data;
@@ -505,6 +518,23 @@ _PUBLIC_ void dump_data(int level, const uint8_t *buf, int len)
 /**
  * Write dump of binary data to the log file.
  *
+ * The data is only written if the log level is at least level for
+ * debug class dbgc_class.
+ */
+_PUBLIC_ void dump_data_dbgc(int dbgc_class, int level, const uint8_t *buf, int len)
+{
+	struct debug_channel_level dcl = { dbgc_class, level };
+
+	if (!DEBUGLVLC(dbgc_class, level)) {
+		DEBUG(0, ("dbgc_class is %d\n", dbgc_class));
+		return;
+	}
+	dump_data_cb(buf, len, false, debugadd_channel_cb, &dcl);
+}
+
+/**
+ * Write dump of binary data to the log file.
+ *
  * The data is only written if the log level is at least level.
  * 16 zero bytes in a row are omitted
  */
-- 
1.8.1.2



More information about the samba-technical mailing list