dump: Support common alternate custom currency types.
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 28 Oct 2014 04:45:46 +0000 (21:45 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 28 Oct 2014 04:45:46 +0000 (21:45 -0700)
Still one weird outlier where the custom currency types are missing.

dump.c

diff --git a/dump.c b/dump.c
index 4d77609cad8c15f7a1c84ef66e1a25ca73e396ac..60056f55b951f8450badf7b9e3001b50ab2acff8 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -19,15 +19,41 @@ all_ascii(const uint8_t *p, size_t n)
 }
 
 static size_t
-find(const char *target, size_t target_len)
+try_find(const char *target, size_t target_len)
 {
   const uint8_t *pos = (const uint8_t *) memmem (data, n, target, target_len);
+  return pos ? pos - data : 0;
+}
+
+static size_t
+try_find_tail(const char *target, size_t target_len)
+{
+  size_t pos = try_find(target, target_len);
+  return pos ? pos + target_len : 0;
+}
+
+static size_t
+find(const char *target, size_t target_len)
+{
+  size_t pos = try_find(target, target_len);
+  if (!pos)
+    {
+      fprintf (stderr, "not found\n");
+      exit(1);
+    }
+  return pos;
+}
+
+static size_t
+find_tail(const char *target, size_t target_len)
+{
+  size_t pos = try_find_tail(target, target_len);
   if (!pos)
     {
       fprintf (stderr, "not found\n");
       exit(1);
     }
-  return pos - data;
+  return pos;
 }
 
 size_t pos;
@@ -206,17 +232,14 @@ dump_value(int level)
       printf ("nested %d bytes", subn);
       pos += subn;
       printf ("; \"%s\", substitutions:", get_string());
-      fprintf (stderr, "substitutions:");
       for (;;)
         {
           int n_subst = get_u32();
           if (!n_subst)
             break;
           printf (" %d", n_subst);
-          fprintf (stderr, " %d", n_subst);
           total_subs *= n_subst;
         }
-      putc ('\n', stderr);
 
       for (int i = 0; i < total_subs; i++)
         {
@@ -381,8 +404,17 @@ main(int argc, char *argv[])
         }
       else if (!strcmp(argv[1], "dimensions"))
         {
-          const char dimensions[] = "-,,,.\0";
-          start = find(dimensions, sizeof dimensions - 1) + sizeof dimensions - 1;
+          {
+            const char dimensions[] = "-,,,.\0";
+            start = try_find_tail(dimensions, sizeof dimensions - 1);
+          }
+
+          if (!start)
+            {
+              const char dimensions[] = "-,,, .\0";
+              start = find_tail(dimensions, sizeof dimensions - 1);
+            }
+
           pos = start;
           dump_dims ();
           return 0;