From: Karel Zak Date: Wed, 21 Mar 2012 18:35:22 +0000 (+0100) Subject: hexdump: use strtosize() for -n and -s X-Git-Tag: v2.22-rc1~616 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=807e40c6557ecf52a668b08df0f528bbcdcb33d4;p=thirdparty%2Futil-linux.git hexdump: use strtosize() for -n and -s strtosize() is based on uintmax_t and supports all possible suffixes (B,M,G,T ...) Reported-by: Simon de Vlieger Signed-off-by: Karel Zak --- diff --git a/text-utils/hexdump.c b/text-utils/hexdump.c index 553220d899..7edb053dba 100644 --- a/text-utils/hexdump.c +++ b/text-utils/hexdump.c @@ -47,7 +47,7 @@ FS *fshead; /* head of format strings */ int blocksize; /* data block size */ int exitval; /* final exit value */ -int length = -1; /* max bytes to read */ +ssize_t length = -1; /* max bytes to read */ int main(int argc, char **argv) { diff --git a/text-utils/hexdump.h b/text-utils/hexdump.h index 52a64bfe9c..622407627f 100644 --- a/text-utils/hexdump.h +++ b/text-utils/hexdump.h @@ -75,7 +75,7 @@ extern FS *fshead; /* head of format strings list */ extern int blocksize; /* data block size */ extern int deprecated; /* od compatibility */ extern int exitval; /* final exit value */ -extern int length; /* max bytes to read */ +extern ssize_t length; /* max bytes to read */ extern off_t skip; /* bytes to skip */ enum _vflag { ALL, DUP, FIRST, WAIT }; /* -v values */ diff --git a/text-utils/hexsyntax.c b/text-utils/hexsyntax.c index 5cdd1de962..19bb76b0b2 100644 --- a/text-utils/hexsyntax.c +++ b/text-utils/hexsyntax.c @@ -53,7 +53,8 @@ void newsyntax(int argc, char ***argvp) { int ch; - char *p, **argv; + char **argv; + uintmax_t o; argv = *argvp; while ((ch = getopt(argc, argv, "bcCde:f:n:os:vxV")) != -1) { @@ -82,26 +83,20 @@ newsyntax(int argc, char ***argvp) addfile(optarg); break; case 'n': - length = strtol_or_err(optarg, _("bad length value")); + if (strtosize(optarg, &o)) + errx(EXIT_FAILURE, + _("invalid length value '%s' specified"), optarg); + length = o; break; case 'o': add("\"%07.7_Ax\n\""); add("\"%07.7_ax \" 8/2 \" %06o \" \"\\n\""); break; case 's': - if ((skip = strtol(optarg, &p, 0)) < 0) - err(EXIT_FAILURE, _("bad skip value")); - switch(*p) { - case 'b': - skip *= 512; - break; - case 'k': - skip *= 1024; - break; - case 'm': - skip *= 1048576; - break; - } + if (strtosize(optarg, &o)) + errx(EXIT_FAILURE, + _("invalid skip value '%s' specified"), optarg); + skip = o; break; case 'v': vflag = ALL;