Skip to content

Commit

Permalink
debug: Add ability to dump_data per debug class
Browse files Browse the repository at this point in the history
Signed-off-by: Kai Blin <[email protected]>
Reviewed-by: Andrew Bartlett <[email protected]>
  • Loading branch information
kblin committed May 18, 2013
1 parent 1c9ef67 commit 30cba0d
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
7 changes: 7 additions & 0 deletions lib/util/debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) && \
Expand Down
8 changes: 8 additions & 0 deletions lib/util/samba_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,14 @@ void dump_data_file(const uint8_t *buf, int len, bool omit_zero_bytes,
*/
_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.
*
Expand Down
30 changes: 30 additions & 0 deletions lib/util/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -502,6 +515,23 @@ _PUBLIC_ void dump_data(int level, const uint8_t *buf, int len)
dump_data_cb(buf, len, false, debugadd_cb, &level);
}

/**
* 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.
*
Expand Down

0 comments on commit 30cba0d

Please sign in to comment.