aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-02-08 16:55:03 +0100
committerHarald Welte <laforge@gnumonks.org>2011-02-08 16:55:03 +0100
commit3d0ac5e446314c08f3e590bb4dd976b551bff618 (patch)
tree237c37a59547bc9e308c24750f156823cdd2a487
parente7509083673381f5be0e66bf6d9d76195b5fad82 (diff)
[utils] add 'bitdump' function for bitfields
-rw-r--r--include/osmocore/utils.h1
-rw-r--r--src/utils.c30
2 files changed, 31 insertions, 0 deletions
diff --git a/include/osmocore/utils.h b/include/osmocore/utils.h
index 93cefbe6..da4eb959 100644
--- a/include/osmocore/utils.h
+++ b/include/osmocore/utils.h
@@ -20,6 +20,7 @@ uint8_t char2bcd(char c);
int hexparse(const char *str, uint8_t *b, int max_len);
char *hexdump(const unsigned char *buf, int len);
char *hexdump_nospc(const unsigned char *buf, int len);
+char *bitdump(const uint8_t *bits, unsigned int len);
#define static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1];
diff --git a/src/utils.c b/src/utils.c
index 405039f6..52007931 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -95,6 +95,36 @@ static char *_hexdump(const unsigned char *buf, int len, char *delim)
return hexd_buff;
}
+char *bitdump(const uint8_t *bits, unsigned int len)
+{
+ int i;
+
+ if (len > sizeof(hexd_buff)-1)
+ len = sizeof(hexd_buff)-1;
+ memset(hexd_buff, 0, sizeof(hexd_buff));
+
+ for (i = 0; i < len; i++) {
+ char outch;
+ switch (bits[i]) {
+ case 0:
+ outch = '0';
+ break;
+ case 0xff:
+ outch = '?';
+ break;
+ case 1:
+ outch = '1';
+ break;
+ default:
+ outch = 'E';
+ break;
+ }
+ hexd_buff[i] = outch;
+ }
+ hexd_buff[sizeof(hexd_buff)-1] = 0;
+ return hexd_buff;
+}
+
char *hexdump(const unsigned char *buf, int len)
{
return _hexdump(buf, len, " ");