|
@ -1,4 +1,4 @@ |
|
|
/* $OpenBSD: fmt_scaled.c,v 1.11 2012/11/12 14:07:20 halex Exp $ */ |
|
|
|
|
|
|
|
|
/* $OpenBSD: fmt_scaled.c,v 1.12 2013/11/29 19:00:51 deraadt Exp $ */ |
|
|
|
|
|
|
|
|
/* |
|
|
/* |
|
|
* Copyright (c) 2001, 2002, 2003 Ian F. Darwin. All rights reserved. |
|
|
* Copyright (c) 2001, 2002, 2003 Ian F. Darwin. All rights reserved. |
|
@ -77,7 +77,7 @@ scan_scaled(char *scaled, long long *result) |
|
|
long long scale_fact = 1, whole = 0, fpart = 0; |
|
|
long long scale_fact = 1, whole = 0, fpart = 0; |
|
|
|
|
|
|
|
|
/* Skip leading whitespace */ |
|
|
/* Skip leading whitespace */ |
|
|
while (isascii(*p) && isspace(*p)) |
|
|
|
|
|
|
|
|
while (isascii((unsigned char)*p) && isspace((unsigned char)*p)) |
|
|
++p; |
|
|
++p; |
|
|
|
|
|
|
|
|
/* Then at most one leading + or - */ |
|
|
/* Then at most one leading + or - */ |
|
@ -104,7 +104,8 @@ scan_scaled(char *scaled, long long *result) |
|
|
* (but note that E for Exa might look like e to some!). |
|
|
* (but note that E for Exa might look like e to some!). |
|
|
* Advance 'p' to end, to get scale factor. |
|
|
* Advance 'p' to end, to get scale factor. |
|
|
*/ |
|
|
*/ |
|
|
for (; isascii(*p) && (isdigit(*p) || *p=='.'); ++p) { |
|
|
|
|
|
|
|
|
for (; isascii((unsigned char)*p) && |
|
|
|
|
|
(isdigit((unsigned char)*p) || *p=='.'); ++p) { |
|
|
if (*p == '.') { |
|
|
if (*p == '.') { |
|
|
if (fract_digits > 0) { /* oops, more than one '.' */ |
|
|
if (fract_digits > 0) { /* oops, more than one '.' */ |
|
|
errno = EINVAL; |
|
|
errno = EINVAL; |
|
@ -148,10 +149,10 @@ scan_scaled(char *scaled, long long *result) |
|
|
|
|
|
|
|
|
/* Are we there yet? */ |
|
|
/* Are we there yet? */ |
|
|
if (*p == scale_chars[i] || |
|
|
if (*p == scale_chars[i] || |
|
|
*p == tolower(scale_chars[i])) { |
|
|
|
|
|
|
|
|
*p == tolower((unsigned char)scale_chars[i])) { |
|
|
|
|
|
|
|
|
/* If it ends with alphanumerics after the scale char, bad. */ |
|
|
/* If it ends with alphanumerics after the scale char, bad. */ |
|
|
if (isalnum(*(p+1))) { |
|
|
|
|
|
|
|
|
if (isalnum((unsigned char)*(p+1))) { |
|
|
errno = EINVAL; |
|
|
errno = EINVAL; |
|
|
return -1; |
|
|
return -1; |
|
|
} |
|
|
} |
|
|