]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: unit conversions are case insensitive
authorJan Tulak <jtulak@redhat.com>
Tue, 10 May 2016 07:16:07 +0000 (17:16 +1000)
committerDave Chinner <david@fromorbit.com>
Tue, 10 May 2016 07:16:07 +0000 (17:16 +1000)
Solves the question "Should I use 10g or 10G?"

[dchinner: rewrite to convert *sp to lower only once we know it
 is not null and the only character remaining in the number string. ]

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
mkfs/xfs_mkfs.c

index 0a55a1776c0e3939fbeb297a965397bd7810975c..95a1caee25ad3453a29f7c205e5e56edf0e2c36a 100644 (file)
@@ -3596,6 +3596,7 @@ cvtnum(
 {
        long long       i;
        char            *sp;
+       int             c;
 
        i = strtoll(s, &sp, 0);
        if (i == 0 && sp == s)
@@ -3603,23 +3604,31 @@ cvtnum(
        if (*sp == '\0')
                return i;
 
-       if (*sp == 'b' && sp[1] == '\0')
+       if (sp[1] != '\0')
+               return -1LL;
+
+       if (*sp == 'b')
                return i * blksize;
-       if (*sp == 's' && sp[1] == '\0')
+       if (*sp == 's')
                return i * sectsize;
 
-       if (*sp == 'k' && sp[1] == '\0')
-               return 1024LL * i;
-       if (*sp == 'm' && sp[1] == '\0')
-               return 1024LL * 1024LL * i;
-       if (*sp == 'g' && sp[1] == '\0')
-               return 1024LL * 1024LL * 1024LL * i;
-       if (*sp == 't' && sp[1] == '\0')
-               return 1024LL * 1024LL * 1024LL * 1024LL * i;
-       if (*sp == 'p' && sp[1] == '\0')
-               return 1024LL * 1024LL * 1024LL * 1024LL * 1024LL * i;
-       if (*sp == 'e' && sp[1] == '\0')
-               return 1024LL * 1024LL * 1024LL * 1024LL * 1024LL * 1024LL * i;
+       c = tolower(*sp);
+       switch (c) {
+       case 'e':
+               i *= 1024LL;
+       case 'p':
+               i *= 1024LL;
+       case 't':
+               i *= 1024LL;
+       case 'g':
+               i *= 1024LL;
+       case 'm':
+               i *= 1024LL;
+       case 'k':
+               return i * 1024LL;
+       default:
+               break;
+       }
        return -1LL;
 }