NAME
strsuftoll,
strsuftollx —
convert a string to a long long, with suffix parsing
LIBRARY
Standard C Library (libc, -lc)
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 functions
strsuftoll() 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:
- b
- Block; multiply by 512
- k
- Kibi; multiply by 1024 (1 KiB)
- m
- Mebi; multiply by 1048576 (1 MiB)
- g
- Gibi; multiply by 1073741824 (1 GiB)
- t
- Tebi; multiply by 1099511627776 (1 TiB)
- w
- Word; multiply by the number of bytes in an integer
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
errx(3),
strtoll(3),
orders(7)
BUGS
At least few limitations should be mentioned:
- Both functions ignore the current locale.
- Neither strsuftoll() nor
strsuftollx() 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 only
strsuftoll() should be exposed to a caller.