The dump_fh() function in nfsmount can be misleading: always mentions NFS_FHSIZE as size, but can print more, can print nothing if passed less than 8 bytes. This is a more robust implementation also suitable for printing datastructures other than the file handle, with ASCII rendering as bonus; output like so: stuff: 0xbfffe41c, length 30 0000: 53 75 6e 20 4a 75 6e 20 20 35 20 31 34 3a 31 32 Sun Jun 5 1 4:12 0010: 3a 35 33 20 43 45 53 54 20 32 30 30 35 0a :53 CEST 200 5. Signed-off-by: Erik van Konijnenburg <ekonijn@xs4all.nl> Index: klibc-1.0.14/nfsmount/mount.c ==================================================================--- klibc-1.0.14.orig/nfsmount/mount.c 2005-06-04 13:50:02.000000000 +0200 +++ klibc-1.0.14/nfsmount/mount.c 2005-06-04 15:07:52.000000000 +0200 @@ -7,6 +7,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <ctype.h> #include "nfsmount.h" #include "sunrpc.h" @@ -92,6 +93,32 @@ return (len + 3) & ~3; } + +#ifdef NFS_DEBUG +void hex_dump (const char *msg, const char *buf, int len) { + int i, done = 0; + printf ("%s: %p, length %d\n", msg, buf, len); + while (done < len) { + printf ("%04x: ", done); + for (i = done; i < done + 16; i++) { + if (i < len) + printf ("%02x ", buf[i] & 0xff); + else + printf (" "); + if (i % 4 == 3) printf (" "); + } + for (i = done; i < done + 16; i++) { + if (i < len) + printf ("%c", isprint(buf[i]) ? buf[i] : '.'); + if (i % 4 == 3) printf (" "); + } + printf ("\n"); + done += 16; + } +} +#endif NFS_DEBUG + + static inline void dump_params(__u32 server, const char *path, const struct nfs_mount_data *data) @@ -122,23 +149,7 @@ static inline void dump_fh(const char *data, int len) { #ifdef NFS_DEBUG - int i = 0; - int max = len - (len % 8); - - printf("Root file handle: %d bytes\n", NFS2_FHSIZE); - - while (i < max) { - int j; - - printf(" %4d: ", i); - for (j = 0; j < 4; j++) { - printf("%02x %02x %02x %02x ", - data[i] & 0xff, data[i + 1] & 0xff, - data[i + 2] & 0xff, data[i + 3] & 0xff); - } - i += j; - printf("\n"); - } + hex_dump ("Root file handle", data, len); #endif }