From 6de2e6c07b3b9607bdaa993e7cc74bf06be5726f Mon Sep 17 00:00:00 2001 From: Jan Tulak Date: Tue, 10 May 2016 17:16:07 +1000 Subject: [PATCH] mkfs: unit conversions are case insensitive 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 Reviewed-by: Dave Chinner Signed-off-by: Dave Chinner --- mkfs/xfs_mkfs.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 0a55a1776..95a1caee2 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -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; } -- 2.47.2