Alejandro Colomar
b0498564b2
lib/atoi/a2i.[ch]: Add const-generic macros
...
These overloaded macros allow passing either a const or a non-const
endp, and will call the appropriate function. This kind of const
overloading has prior art in C23's string functions, such as memchr(3).
Martin suggested using an artificial function pointer in _Generic(3); it
allows switching on various types at the same time.
Also add a comment referring to liba2i's PDF manual for documentation.
Link: <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf#subsubsection.7.26.5.2 >
Link: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114731 >
Link: <http://www.alejandro-colomar.es/share/dist/liba2i/git/HEAD/liba2i-HEAD.pdf >
Co-developed-by: Martin Uecker <muecker@gwdg.de >
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-05-17 15:40:03 +02:00
Alejandro Colomar
f7fe4c5978
lib/atoi/: a2*(), str2*(): Add variants for other types
...
And type-generic macros that wrap them: a2i(), str2i()
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-03-29 14:29:13 -05:00
Alejandro Colomar
f39ac101ff
lib/, src/: str2*(): Rename functions and reorder parameters
...
This makes them compatible with liba2i's functions.
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-03-29 14:29:13 -05:00
Alejandro Colomar
b085c3f612
lib/atoi/: Add a2[su]l() and reimplement get[u]long() in terms of them
...
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-03-29 14:29:13 -05:00
Alejandro Colomar
27e236ca79
lib/, src/, po/: get[u]long(): Move functions to lib/atoi/str2i.h
...
And make them inline.
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-03-29 14:29:13 -05:00
Alejandro Colomar
f2b240595b
lib/atoi/strtou_noneg.[ch]: Add strtou_noneg()
...
It's like strtou_(), but rejects negative input, instead of silently
converting it to unsigned.
Link: <https://softwareengineering.stackexchange.com/a/449060/332848 >
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-01-31 22:26:19 -06:00
Alejandro Colomar
34ff8edb63
lib/atoi/strtoi.[ch]: strtoi_(), strtou_(): Add functions
...
These functions are identical to strtoi(3bsd) and strtou(3bsd), except
for one important thing: if both ERANGE and ENOTSUP conditions happen,
the BSD functions report ENOTSUP, which is bogus; our strtoi_() and
strtou_() report ERANGE.
Link: <https://lists.sr.ht/~hallyn/shadow/%3CZZoQDms6Sv6e5SPE%40debian%3E >
Link: <https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=57828 >
Cc: Thorsten Glaser <tg@mirbsd.de >
Cc: christos <christos@netbsd.org >
Cc: roy <roy@netbsd.org >
Cc: Guillem Jover <guillem@hadrons.org >
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-01-31 22:26:19 -06:00
Alejandro Colomar
4a2646f676
lib/atoi/strtou_noneg.[ch]: Add strtou[l]l_noneg()
...
These functions reject negative numbers, instead of silently converting
them into unsigned, which strtou[l]l(3) do.
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com >
Cc: "Serge E. Hallyn" <serge@hallyn.com >
Signed-off-by: Alejandro Colomar <alx@kernel.org >
2024-01-22 17:17:15 -06:00