summaryrefslogtreecommitdiffstats
path: root/usr.bin/split/split.c
diff options
context:
space:
mode:
authoreadler <eadler@FreeBSD.org>2013-11-09 08:57:21 +0000
committereadler <eadler@FreeBSD.org>2013-11-09 08:57:21 +0000
commitc56ee6b0c20eaf721c4b2493222552adb193f8c8 (patch)
tree6b901212fae8c1a3a6a9e42f25cc2a78c9c657b6 /usr.bin/split/split.c
parent649c12d2d7aba75a53b8ba712a17f07a99c9c2a8 (diff)
downloadFreeBSD-src-c56ee6b0c20eaf721c4b2493222552adb193f8c8.zip
FreeBSD-src-c56ee6b0c20eaf721c4b2493222552adb193f8c8.tar.gz
Change manual string conversion to expand_number
Reviewed by: adrian
Diffstat (limited to 'usr.bin/split/split.c')
-rw-r--r--usr.bin/split/split.c20
1 files changed, 4 insertions, 16 deletions
diff --git a/usr.bin/split/split.c b/usr.bin/split/split.c
index 572af59..9a0b0ec 100644
--- a/usr.bin/split/split.c
+++ b/usr.bin/split/split.c
@@ -49,6 +49,7 @@ static const char sccsid[] = "@(#)split.c 8.2 (Berkeley) 4/16/94";
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
+#include <libutil.h>
#include <limits.h>
#include <locale.h>
#include <stdbool.h>
@@ -83,9 +84,8 @@ static void usage(void);
int
main(int argc, char **argv)
{
- intmax_t bytecnti;
- long scale;
int ch;
+ int error;
char *ep, *p;
setlocale(LC_ALL, "");
@@ -118,21 +118,9 @@ main(int argc, char **argv)
break;
case 'b': /* Byte count. */
errno = 0;
- if ((bytecnti = strtoimax(optarg, &ep, 10)) <= 0 ||
- strchr("kKmMgG", *ep) == NULL || errno != 0)
- errx(EX_USAGE,
- "%s: illegal byte count", optarg);
- if (*ep == 'k' || *ep == 'K')
- scale = 1024;
- else if (*ep == 'm' || *ep == 'M')
- scale = 1024 * 1024;
- else if (*ep == 'g' || *ep == 'G')
- scale = 1024 * 1024 * 1024;
- else
- scale = 1;
- if (bytecnti > OFF_MAX / scale)
+ error = expand_number(optarg, &bytecnt);
+ if (error == -1)
errx(EX_USAGE, "%s: offset too large", optarg);
- bytecnt = (off_t)(bytecnti * scale);
break;
case 'd': /* Decimal suffix */
dflag = true;
OpenPOWER on IntegriCloud