Whamcloud - gitweb
New tag 2.15.63
[fs/lustre-release.git] / lustre / utils / ll_decode_linkea.c
index 01ae43e..9e84ff8 100644 (file)
 #include <errno.h>
 #include <string.h>
 #include <limits.h>
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/xattr.h>
-#include <lustre/lustre_fid.h>
+#include <linux/lustre/lustre_fid.h>
 
 #define BUFFER_SIZE 65536
 
-int decode_linkea(const char *fname)
+static void print_name(const char *cp, int len)
+{
+       unsigned char ch;
+
+       while (len--) {
+               ch = *cp++;
+               if (!isprint(ch) || ch == '\\')
+                       printf("\\x%02x", ch);
+               else
+                       putchar(ch);
+       }
+}
+
+static int decode_linkea(const char *fname)
 {
        char buf[BUFFER_SIZE];
        struct link_ea_header *leh;
@@ -86,7 +100,7 @@ int decode_linkea(const char *fname)
        if (leh->leh_len > size) {
                fprintf(stderr,
                        "%s: invalid length %llu, should smaller than %zd\n",
-                       fname, leh->leh_len, size);
+                       fname, (unsigned long long)leh->leh_len, size);
                return -1;
        }
 
@@ -98,22 +112,26 @@ int decode_linkea(const char *fname)
                length += reclen;
                if (length > leh->leh_len) {
                        fprintf(stderr,
-                               "%s: length exceeded, expected %lld, got %lld\n",
-                               fname, leh->leh_len, length);
+                               "%s: length exceeded, expected %llu, got %llu\n",
+                               fname, (unsigned long long)leh->leh_len,
+                               (unsigned long long)length);
                        return -1;
                }
                memcpy(&pfid, &lee->lee_parent_fid, sizeof(pfid));
                fid_be_to_cpu(&pfid, &pfid);
 
-               printf("    %d: pfid "DFID", name '%s'\n", i, PFID(&pfid),
-                      lee->lee_name);
+               printf("    %d: pfid "DFID", name '", i, PFID(&pfid));
+               print_name(lee->lee_name, reclen - (int)sizeof(*lee));
+               printf("'\n");
                lee = (struct link_ea_entry *)((char *)lee + reclen);
        }
 
        if (length != leh->leh_len) {
                fprintf(stderr,
-                       "%s: length mismatch, expected %lld, got %lld\n",
-                       fname, leh->leh_len, length);
+                       "%s: length mismatch, expected %llu, got %llu\n",
+                       fname,
+                       (unsigned long long)leh->leh_len,
+                       (unsigned long long)length);
                return -1;
        }