Change manual string conversion to expand_number

Reviewed by:	adrian
This commit is contained in:
eadler 2013-11-09 08:57:21 +00:00
parent 649c12d2d7
commit c56ee6b0c2
2 changed files with 5 additions and 16 deletions

View File

@ -2,5 +2,6 @@
# $FreeBSD$
PROG= split
LDADD= -lutil
.include <bsd.prog.mk>

View File

@ -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;