NAME
strsuftoll
,
strsuftollx
—
convert a string to a long long, with
suffix parsing
LIBRARY
library “libc”
SYNOPSIS
#include
<stdlib.h>
long long
strsuftoll
(const
char *desc, const char
*val, long long
min, long long
max);
long long
strsuftollx
(const
char *desc, const char
*val, long long
min, long long max,
char *errbuf,
size_t errbuflen);
DESCRIPTION
The functionsstrsuftoll
()
and strsuftollx
() convert val
into a number of type long long, checking that the
result is not smaller than min or larger than
max. Two or more decimal numbers may be separated by an
“x” to indicate a product.
Each decimal number may have one of the following optional suffixes:
In the case of an error (range overflow or an
invalid number),
strsuftollx
()
places an error message into errbuf (which is
errbuflen bytes long) and returns 0, and
strsuftoll
() displays that error and terminates the
process. The parameter desc is used to construct
errbuf.
Neither desc nor val
may be NULL
.
RETURN VALUES
The functions strsuftoll
() and
strsuftollx
() return either the result of the
conversion, unless the value overflows or is not a number; in the latter
case, strsuftoll
() displays an error message and
terminates the process with exit code EXIT_FAILURE
,
and strsuftollx
() returns with 0 and
errbuf contains a non-empty error message.
ERRORS
- [
ERANGE
] - The given string was out of range; the value converted has been clamped.
SEE ALSO
BUGS
At least few limitations should be mentioned:
- Both functions ignore the current locale.
- Neither
strsuftoll
() norstrsuftollx
() fail gracefully in case of invalid,NULL
, pointers. - Arguably the return type should be intmax_t instead of long long.
- The
strsuftollx
() function is prone to buffer overflows if used incorrectly. Arguably onlystrsuftoll
() should be exposed to a caller.