From: Darrick J. Wong <djwong@xxxxxxxxxx> Define a field type for hex strings so that we can print things such as: file_digest = deadbeef31337023aaaa Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- db/field.c | 2 ++ db/field.h | 1 + db/fprint.c | 24 ++++++++++++++++++++++++ db/fprint.h | 2 ++ 4 files changed, 29 insertions(+) diff --git a/db/field.c b/db/field.c index d5879f4ada7d..066239ae6073 100644 --- a/db/field.c +++ b/db/field.c @@ -158,6 +158,8 @@ const ftattr_t ftattrtab[] = { { FLDT_CHARNS, "charns", fp_charns, NULL, SI(bitsz(char)), 0, NULL, NULL }, { FLDT_CHARS, "chars", fp_num, "%c", SI(bitsz(char)), 0, NULL, NULL }, + { FLDT_HEXSTRING, "hexstring", fp_hexstr, NULL, SI(bitsz(char)), 0, NULL, + NULL }, { FLDT_REXTLEN, "rextlen", fp_num, "%u", SI(RMAPBT_BLOCKCOUNT_BITLEN), 0, NULL, NULL }, { FLDT_RFILEOFFD, "rfileoffd", fp_num, "%llu", SI(RMAPBT_OFFSET_BITLEN), diff --git a/db/field.h b/db/field.h index f1b4f4e217de..89752d07b84c 100644 --- a/db/field.h +++ b/db/field.h @@ -67,6 +67,7 @@ typedef enum fldt { FLDT_CFSBLOCK, FLDT_CHARNS, FLDT_CHARS, + FLDT_HEXSTRING, FLDT_REXTLEN, FLDT_RFILEOFFD, FLDT_REXTFLG, diff --git a/db/fprint.c b/db/fprint.c index ac916d511e87..182e5b7cb27c 100644 --- a/db/fprint.c +++ b/db/fprint.c @@ -54,6 +54,30 @@ fp_charns( return 1; } +int +fp_hexstr( + void *obj, + int bit, + int count, + char *fmtstr, + int size, + int arg, + int base, + int array) +{ + int i; + char *p; + + ASSERT(bitoffs(bit) == 0); + ASSERT(size == bitsz(char)); + for (i = 0, p = (char *)obj + byteize(bit); + i < count && !seenint(); + i++, p++) { + dbprintf("%02x", *p & 0xff); + } + return 1; +} + int fp_num( void *obj, diff --git a/db/fprint.h b/db/fprint.h index a1ea935ca531..348e04215588 100644 --- a/db/fprint.h +++ b/db/fprint.h @@ -9,6 +9,8 @@ typedef int (*prfnc_t)(void *obj, int bit, int count, char *fmtstr, int size, extern int fp_charns(void *obj, int bit, int count, char *fmtstr, int size, int arg, int base, int array); +extern int fp_hexstr(void *obj, int bit, int count, char *fmtstr, int size, + int arg, int base, int array); extern int fp_num(void *obj, int bit, int count, char *fmtstr, int size, int arg, int base, int array); extern int fp_sarray(void *obj, int bit, int count, char *fmtstr, int size,