-       endch = 'c';
-       new->o_data = find_parsenum(new, "-size", arg, &endch);
-       if (endch == 'c')
-               divsize = 0;
+       new->o_data = find_parsenum(new, "-size", arg, &endp);
+       if (endp) {
+               if (strlen(endp) > 1)
+                       errx(1, "invalid postfix '%s'", endp);
+
+               switch (*endp) {
+               case 'c':
+                       divsize = 1;
+                       break;
+               case 'k':
+                       divsize = 1024;
+                       break;
+               case 'm':
+                       divsize = 1024 * 1024;
+                       break;
+               case 'g':
+                       divsize = 1024 * 1024 * UINT64_C(1024);
+                       break;
+               case 't':
+                       divsize = 1024 * 1024 * UINT64_C(1024) * 1024;
+                       break;
+               case 'p':
+                       divsize = 1024 * 1024 * UINT64_C(1024) * 1024 * 1024;
+                       break;
+               default:
+                       errx(1, "unknown postfix '%c'", *endp);
+               }
+       }
        return (new);
 }

I like the idea of this change. Just curious - did you choose to ignore 
scan_scaled(3)?

Reply via email to