alloc/x/xmalloc.h \
alloc/x/xrealloc.c \
alloc/x/xrealloc.h \
- atoi/a2i.c \
- atoi/a2i.h \
+ atoi/a2i/a2i.c \
+ atoi/a2i/a2i.h \
+ atoi/a2i/a2s.c \
+ atoi/a2i/a2s.h \
+ atoi/a2i/a2s_c.c \
+ atoi/a2i/a2s_c.h \
+ atoi/a2i/a2s_nc.c \
+ atoi/a2i/a2s_nc.h \
+ atoi/a2i/a2u.c \
+ atoi/a2i/a2u.h \
+ atoi/a2i/a2u_c.c \
+ atoi/a2i/a2u_c.h \
+ atoi/a2i/a2u_nc.c \
+ atoi/a2i/a2u_nc.h \
atoi/getnum.c \
atoi/getnum.h \
- atoi/str2i.c \
- atoi/str2i.h \
- atoi/strtoi.c \
- atoi/strtoi.h \
- atoi/strtou_noneg.c \
- atoi/strtou_noneg.h \
+ atoi/str2i/str2i.c \
+ atoi/str2i/str2i.h \
+ atoi/str2i/str2s.c \
+ atoi/str2i/str2s.h \
+ atoi/str2i/str2u.c \
+ atoi/str2i/str2u.h \
+ atoi/strtoi/strtoi.c \
+ atoi/strtoi/strtoi.h \
+ atoi/strtoi/strtou.c \
+ atoi/strtoi/strtou.h \
+ atoi/strtoi/strtou_noneg.c \
+ atoi/strtoi/strtou_noneg.h \
attr.h \
audit_help.c \
basename.c \
+++ /dev/null
-// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
-// SPDX-License-Identifier: BSD-3-Clause
-
-
-#include <config.h>
-
-#include "atoi/a2i.h"
-
-
-extern inline int a2sh_c(short *restrict n, const char *s,
- const char **restrict endp, int base, short min, short max);
-extern inline int a2si_c(int *restrict n, const char *s,
- const char **restrict endp, int base, int min, int max);
-extern inline int a2sl_c(long *restrict n, const char *s,
- const char **restrict endp, int base, long min, long max);
-extern inline int a2sll_c(long long *restrict n, const char *s,
- const char **restrict endp, int base, long long min, long long max);
-extern inline int a2uh_c(unsigned short *restrict n, const char *s,
- const char **restrict endp, int base, unsigned short min,
- unsigned short max);
-extern inline int a2ui_c(unsigned int *restrict n, const char *s,
- const char **restrict endp, int base, unsigned int min, unsigned int max);
-extern inline int a2ul_c(unsigned long *restrict n, const char *s,
- const char **restrict endp, int base, unsigned long min, unsigned long max);
-extern inline int a2ull_c(unsigned long long *restrict n, const char *s,
- const char **restrict endp, int base, unsigned long long min,
- unsigned long long max);
-
-
-extern inline int a2sh_nc(short *restrict n, char *s,
- char **restrict endp, int base, short min, short max);
-extern inline int a2si_nc(int *restrict n, char *s,
- char **restrict endp, int base, int min, int max);
-extern inline int a2sl_nc(long *restrict n, char *s,
- char **restrict endp, int base, long min, long max);
-extern inline int a2sll_nc(long long *restrict n, char *s,
- char **restrict endp, int base, long long min, long long max);
-extern inline int a2uh_nc(unsigned short *restrict n, char *s,
- char **restrict endp, int base, unsigned short min, unsigned short max);
-extern inline int a2ui_nc(unsigned int *restrict n, char *s,
- char **restrict endp, int base, unsigned int min, unsigned int max);
-extern inline int a2ul_nc(unsigned long *restrict n, char *s,
- char **restrict endp, int base, unsigned long min, unsigned long max);
-extern inline int a2ull_nc(unsigned long long *restrict n, char *s,
- char **restrict endp, int base, unsigned long long min,
- unsigned long long max);
+++ /dev/null
-// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
-// SPDX-License-Identifier: BSD-3-Clause
-
-
-#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_H_
-#define SHADOW_INCLUDE_LIB_ATOI_A2I_H_
-
-
-#include <config.h>
-
-#include <errno.h>
-
-#include "atoi/strtoi.h"
-#include "atoi/strtou_noneg.h"
-#include "attr.h"
-
-
-/*
- * See the manual of these macros in liba2i's documentation:
- * <http://www.alejandro-colomar.es/share/dist/liba2i/git/HEAD/liba2i-HEAD.pdf>
- */
-
-
-#define a2i(TYPE, n, s, ...) \
-( \
- _Generic((void (*)(TYPE, typeof(s))) 0, \
- void (*)(short, const char *): a2sh_c, \
- void (*)(short, const void *): a2sh_c, \
- void (*)(short, char *): a2sh_nc, \
- void (*)(short, void *): a2sh_nc, \
- void (*)(int, const char *): a2si_c, \
- void (*)(int, const void *): a2si_c, \
- void (*)(int, char *): a2si_nc, \
- void (*)(int, void *): a2si_nc, \
- void (*)(long, const char *): a2sl_c, \
- void (*)(long, const void *): a2sl_c, \
- void (*)(long, char *): a2sl_nc, \
- void (*)(long, void *): a2sl_nc, \
- void (*)(long long, const char *): a2sll_c, \
- void (*)(long long, const void *): a2sll_c, \
- void (*)(long long, char *): a2sll_nc, \
- void (*)(long long, void *): a2sll_nc, \
- void (*)(unsigned short, const char *): a2uh_c, \
- void (*)(unsigned short, const void *): a2uh_c, \
- void (*)(unsigned short, char *): a2uh_nc, \
- void (*)(unsigned short, void *): a2uh_nc, \
- void (*)(unsigned int, const char *): a2ui_c, \
- void (*)(unsigned int, const void *): a2ui_c, \
- void (*)(unsigned int, char *): a2ui_nc, \
- void (*)(unsigned int, void *): a2ui_nc, \
- void (*)(unsigned long, const char *): a2ul_c, \
- void (*)(unsigned long, const void *): a2ul_c, \
- void (*)(unsigned long, char *): a2ul_nc, \
- void (*)(unsigned long, void *): a2ul_nc, \
- void (*)(unsigned long long, const char *): a2ull_c, \
- void (*)(unsigned long long, const void *): a2ull_c, \
- void (*)(unsigned long long, char *): a2ull_nc, \
- void (*)(unsigned long long, void *): a2ull_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-
-#define a2sh(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2sh_c, \
- const void *: a2sh_c, \
- char *: a2sh_nc, \
- void *: a2sh_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2si(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2si_c, \
- const void *: a2si_c, \
- char *: a2si_nc, \
- void *: a2si_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2sl(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2sl_c, \
- const void *: a2sl_c, \
- char *: a2sl_nc, \
- void *: a2sl_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2sll(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2sll_c, \
- const void *: a2sll_c, \
- char *: a2sll_nc, \
- void *: a2sll_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2uh(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2uh_c, \
- const void *: a2uh_c, \
- char *: a2uh_nc, \
- void *: a2uh_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2ui(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2ui_c, \
- const void *: a2ui_c, \
- char *: a2ui_nc, \
- void *: a2ui_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2ul(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2ul_c, \
- const void *: a2ul_c, \
- char *: a2ul_nc, \
- void *: a2ul_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-#define a2ull(n, s, ...) \
-( \
- _Generic(s, \
- const char *: a2ull_c, \
- const void *: a2ull_c, \
- char *: a2ull_nc, \
- void *: a2ull_nc \
- )(n, s, __VA_ARGS__) \
-)
-
-
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2sh_c(short *restrict n, const char *s,
- const char **restrict endp, int base, short min, short max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2si_c(int *restrict n, const char *s,
- const char **restrict endp, int base, int min, int max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2sl_c(long *restrict n, const char *s,
- const char **restrict endp, int base, long min, long max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2sll_c(long long *restrict n, const char *s,
- const char **restrict endp, int base, long long min, long long max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2uh_c(unsigned short *restrict n, const char *s,
- const char **restrict endp, int base, unsigned short min,
- unsigned short max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2ui_c(unsigned int *restrict n, const char *s,
- const char **restrict endp, int base, unsigned int min, unsigned int max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2ul_c(unsigned long *restrict n, const char *s,
- const char **restrict endp, int base, unsigned long min, unsigned long max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2ull_c(unsigned long long *restrict n, const char *s,
- const char **restrict endp, int base, unsigned long long min,
- unsigned long long max);
-
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2sh_nc(short *restrict n, char *s,
- char **restrict endp, int base, short min, short max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2si_nc(int *restrict n, char *s,
- char **restrict endp, int base, int min, int max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2sl_nc(long *restrict n, char *s,
- char **restrict endp, int base, long min, long max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2sll_nc(long long *restrict n, char *s,
- char **restrict endp, int base, long long min, long long max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2uh_nc(unsigned short *restrict n, char *s,
- char **restrict endp, int base, unsigned short min, unsigned short max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2ui_nc(unsigned int *restrict n, char *s,
- char **restrict endp, int base, unsigned int min, unsigned int max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2ul_nc(unsigned long *restrict n, char *s,
- char **restrict endp, int base, unsigned long min, unsigned long max);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
-inline int a2ull_nc(unsigned long long *restrict n, char *s,
- char **restrict endp, int base, unsigned long long min,
- unsigned long long max);
-
-
-inline int
-a2sh_c(short *restrict n, const char *s,
- const char **restrict endp, int base, short min, short max)
-{
- return a2sh(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2si_c(int *restrict n, const char *s,
- const char **restrict endp, int base, int min, int max)
-{
- return a2si(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2sl_c(long *restrict n, const char *s,
- const char **restrict endp, int base, long min, long max)
-{
- return a2sl(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2sll_c(long long *restrict n, const char *s,
- const char **restrict endp, int base, long long min, long long max)
-{
- return a2sll(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2uh_c(unsigned short *restrict n, const char *s,
- const char **restrict endp, int base, unsigned short min,
- unsigned short max)
-{
- return a2uh(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2ui_c(unsigned int *restrict n, const char *s,
- const char **restrict endp, int base, unsigned int min, unsigned int max)
-{
- return a2ui(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2ul_c(unsigned long *restrict n, const char *s,
- const char **restrict endp, int base, unsigned long min, unsigned long max)
-{
- return a2ul(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2ull_c(unsigned long long *restrict n, const char *s,
- const char **restrict endp, int base, unsigned long long min,
- unsigned long long max)
-{
- return a2ull(n, (char *) s, (char **) endp, base, min, max);
-}
-
-
-inline int
-a2sh_nc(short *restrict n, char *s,
- char **restrict endp, int base, short min, short max)
-{
- int status;
-
- *n = strtoi_(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2si_nc(int *restrict n, char *s,
- char **restrict endp, int base, int min, int max)
-{
- int status;
-
- *n = strtoi_(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2sl_nc(long *restrict n, char *s,
- char **restrict endp, int base, long min, long max)
-{
- int status;
-
- *n = strtoi_(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2sll_nc(long long *restrict n, char *s,
- char **restrict endp, int base, long long min, long long max)
-{
- int status;
-
- *n = strtoi_(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2uh_nc(unsigned short *restrict n, char *s,
- char **restrict endp, int base, unsigned short min,
- unsigned short max)
-{
- int status;
-
- *n = strtou_noneg(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2ui_nc(unsigned int *restrict n, char *s,
- char **restrict endp, int base, unsigned int min, unsigned int max)
-{
- int status;
-
- *n = strtou_noneg(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2ul_nc(unsigned long *restrict n, char *s,
- char **restrict endp, int base, unsigned long min, unsigned long max)
-{
- int status;
-
- *n = strtou_noneg(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-inline int
-a2ull_nc(unsigned long long *restrict n, char *s,
- char **restrict endp, int base, unsigned long long min,
- unsigned long long max)
-{
- int status;
-
- *n = strtou_noneg(s, endp, base, min, max, &status);
- if (status != 0) {
- errno = status;
- return -1;
- }
- return 0;
-}
-
-
-#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2i.h"
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2I_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2I_H_
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2s_c.h"
+#include "atoi/a2i/a2s_nc.h"
+#include "atoi/a2i/a2u_c.h"
+#include "atoi/a2i/a2u_nc.h"
+
+
+/*
+ * See the manual of these macros in liba2i's documentation:
+ * <http://www.alejandro-colomar.es/share/dist/liba2i/git/HEAD/liba2i-HEAD.pdf>
+ */
+
+
+#define a2i(TYPE, n, s, ...) \
+( \
+ _Generic((void (*)(TYPE, typeof(s))) 0, \
+ void (*)(short, const char *): a2sh_c, \
+ void (*)(short, const void *): a2sh_c, \
+ void (*)(short, char *): a2sh_nc, \
+ void (*)(short, void *): a2sh_nc, \
+ void (*)(int, const char *): a2si_c, \
+ void (*)(int, const void *): a2si_c, \
+ void (*)(int, char *): a2si_nc, \
+ void (*)(int, void *): a2si_nc, \
+ void (*)(long, const char *): a2sl_c, \
+ void (*)(long, const void *): a2sl_c, \
+ void (*)(long, char *): a2sl_nc, \
+ void (*)(long, void *): a2sl_nc, \
+ void (*)(long long, const char *): a2sll_c, \
+ void (*)(long long, const void *): a2sll_c, \
+ void (*)(long long, char *): a2sll_nc, \
+ void (*)(long long, void *): a2sll_nc, \
+ void (*)(unsigned short, const char *): a2uh_c, \
+ void (*)(unsigned short, const void *): a2uh_c, \
+ void (*)(unsigned short, char *): a2uh_nc, \
+ void (*)(unsigned short, void *): a2uh_nc, \
+ void (*)(unsigned int, const char *): a2ui_c, \
+ void (*)(unsigned int, const void *): a2ui_c, \
+ void (*)(unsigned int, char *): a2ui_nc, \
+ void (*)(unsigned int, void *): a2ui_nc, \
+ void (*)(unsigned long, const char *): a2ul_c, \
+ void (*)(unsigned long, const void *): a2ul_c, \
+ void (*)(unsigned long, char *): a2ul_nc, \
+ void (*)(unsigned long, void *): a2ul_nc, \
+ void (*)(unsigned long long, const char *): a2ull_c, \
+ void (*)(unsigned long long, const void *): a2ull_c, \
+ void (*)(unsigned long long, char *): a2ull_nc, \
+ void (*)(unsigned long long, void *): a2ull_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2s.h"
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2S_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2S_H_
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2s_c.h"
+#include "atoi/a2i/a2s_nc.h"
+
+
+#define a2sh(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2sh_c, \
+ const void *: a2sh_c, \
+ char *: a2sh_nc, \
+ void *: a2sh_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+#define a2si(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2si_c, \
+ const void *: a2si_c, \
+ char *: a2si_nc, \
+ void *: a2si_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+#define a2sl(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2sl_c, \
+ const void *: a2sl_c, \
+ char *: a2sl_nc, \
+ void *: a2sl_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+#define a2sll(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2sll_c, \
+ const void *: a2sll_c, \
+ char *: a2sll_nc, \
+ void *: a2sll_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2s_c.h"
+
+
+extern inline int a2sh_c(short *restrict n, const char *s,
+ const char **restrict endp, int base, short min, short max);
+extern inline int a2si_c(int *restrict n, const char *s,
+ const char **restrict endp, int base, int min, int max);
+extern inline int a2sl_c(long *restrict n, const char *s,
+ const char **restrict endp, int base, long min, long max);
+extern inline int a2sll_c(long long *restrict n, const char *s,
+ const char **restrict endp, int base, long long min, long long max);
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2S_C_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2S_C_H_
+
+
+#include <config.h>
+
+#include <errno.h>
+#include <inttypes.h>
+
+#include "atoi/a2i/a2s_nc.h"
+#include "attr.h"
+
+
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2sh_c(short *restrict n, const char *s,
+ const char **restrict endp, int base, short min, short max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2si_c(int *restrict n, const char *s,
+ const char **restrict endp, int base, int min, int max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2sl_c(long *restrict n, const char *s,
+ const char **restrict endp, int base, long min, long max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2sll_c(long long *restrict n, const char *s,
+ const char **restrict endp, int base, long long min, long long max);
+
+
+inline int
+a2sh_c(short *restrict n, const char *s,
+ const char **restrict endp, int base, short min, short max)
+{
+ return a2sh_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+inline int
+a2si_c(int *restrict n, const char *s,
+ const char **restrict endp, int base, int min, int max)
+{
+ return a2si_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+inline int
+a2sl_c(long *restrict n, const char *s,
+ const char **restrict endp, int base, long min, long max)
+{
+ return a2sl_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+inline int
+a2sll_c(long long *restrict n, const char *s,
+ const char **restrict endp, int base, long long min, long long max)
+{
+ return a2sll_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2s_nc.h"
+
+
+extern inline int a2sh_nc(short *restrict n, char *s,
+ char **restrict endp, int base, short min, short max);
+extern inline int a2si_nc(int *restrict n, char *s,
+ char **restrict endp, int base, int min, int max);
+extern inline int a2sl_nc(long *restrict n, char *s,
+ char **restrict endp, int base, long min, long max);
+extern inline int a2sll_nc(long long *restrict n, char *s,
+ char **restrict endp, int base, long long min, long long max);
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2S_NC_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2S_NC_H_
+
+
+#include <config.h>
+
+#include <errno.h>
+
+#include "atoi/strtoi/strtoi.h"
+#include "attr.h"
+
+
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2sh_nc(short *restrict n, char *s,
+ char **restrict endp, int base, short min, short max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2si_nc(int *restrict n, char *s,
+ char **restrict endp, int base, int min, int max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2sl_nc(long *restrict n, char *s,
+ char **restrict endp, int base, long min, long max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2sll_nc(long long *restrict n, char *s,
+ char **restrict endp, int base, long long min, long long max);
+
+
+inline int
+a2sh_nc(short *restrict n, char *s,
+ char **restrict endp, int base, short min, short max)
+{
+ int status;
+
+ *n = strtoi_(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+inline int
+a2si_nc(int *restrict n, char *s,
+ char **restrict endp, int base, int min, int max)
+{
+ int status;
+
+ *n = strtoi_(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+inline int
+a2sl_nc(long *restrict n, char *s,
+ char **restrict endp, int base, long min, long max)
+{
+ int status;
+
+ *n = strtoi_(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+inline int
+a2sll_nc(long long *restrict n, char *s,
+ char **restrict endp, int base, long long min, long long max)
+{
+ int status;
+
+ *n = strtoi_(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2u.h"
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2U_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2U_H_
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2u_c.h"
+#include "atoi/a2i/a2u_nc.h"
+
+
+#define a2uh(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2uh_c, \
+ const void *: a2uh_c, \
+ char *: a2uh_nc, \
+ void *: a2uh_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+#define a2ui(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2ui_c, \
+ const void *: a2ui_c, \
+ char *: a2ui_nc, \
+ void *: a2ui_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+#define a2ul(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2ul_c, \
+ const void *: a2ul_c, \
+ char *: a2ul_nc, \
+ void *: a2ul_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+#define a2ull(n, s, ...) \
+( \
+ _Generic(s, \
+ const char *: a2ull_c, \
+ const void *: a2ull_c, \
+ char *: a2ull_nc, \
+ void *: a2ull_nc \
+ )(n, s, __VA_ARGS__) \
+)
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2u_c.h"
+
+
+extern inline int a2uh_c(unsigned short *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned short min,
+ unsigned short max);
+extern inline int a2ui_c(unsigned int *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned int min, unsigned int max);
+extern inline int a2ul_c(unsigned long *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned long min, unsigned long max);
+extern inline int a2ull_c(unsigned long long *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned long long min,
+ unsigned long long max);
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2U_C_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2U_C_H_
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2u_nc.h"
+#include "attr.h"
+
+
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2uh_c(unsigned short *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned short min,
+ unsigned short max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2ui_c(unsigned int *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned int min, unsigned int max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2ul_c(unsigned long *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned long min, unsigned long max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2ull_c(unsigned long long *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned long long min,
+ unsigned long long max);
+
+
+inline int
+a2uh_c(unsigned short *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned short min,
+ unsigned short max)
+{
+ return a2uh_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+inline int
+a2ui_c(unsigned int *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned int min, unsigned int max)
+{
+ return a2ui_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+inline int
+a2ul_c(unsigned long *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned long min, unsigned long max)
+{
+ return a2ul_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+inline int
+a2ull_c(unsigned long long *restrict n, const char *s,
+ const char **restrict endp, int base, unsigned long long min,
+ unsigned long long max)
+{
+ return a2ull_nc(n, (char *) s, (char **) endp, base, min, max);
+}
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/a2i/a2u_nc.h"
+
+
+extern inline int a2uh_nc(unsigned short *restrict n, char *s,
+ char **restrict endp, int base, unsigned short min, unsigned short max);
+extern inline int a2ui_nc(unsigned int *restrict n, char *s,
+ char **restrict endp, int base, unsigned int min, unsigned int max);
+extern inline int a2ul_nc(unsigned long *restrict n, char *s,
+ char **restrict endp, int base, unsigned long min, unsigned long max);
+extern inline int a2ull_nc(unsigned long long *restrict n, char *s,
+ char **restrict endp, int base, unsigned long long min,
+ unsigned long long max);
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_A2U_NC_H_
+#define SHADOW_INCLUDE_LIB_ATOI_A2I_A2U_NC_H_
+
+
+#include <config.h>
+
+#include <errno.h>
+
+#include "atoi/strtoi/strtou_noneg.h"
+#include "attr.h"
+
+
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2uh_nc(unsigned short *restrict n, char *s,
+ char **restrict endp, int base, unsigned short min, unsigned short max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2ui_nc(unsigned int *restrict n, char *s,
+ char **restrict endp, int base, unsigned int min, unsigned int max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2ul_nc(unsigned long *restrict n, char *s,
+ char **restrict endp, int base, unsigned long min, unsigned long max);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1) ATTR_ACCESS(write_only, 3)
+inline int a2ull_nc(unsigned long long *restrict n, char *s,
+ char **restrict endp, int base, unsigned long long min,
+ unsigned long long max);
+
+
+inline int
+a2uh_nc(unsigned short *restrict n, char *s,
+ char **restrict endp, int base, unsigned short min,
+ unsigned short max)
+{
+ int status;
+
+ *n = strtou_noneg(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+inline int
+a2ui_nc(unsigned int *restrict n, char *s,
+ char **restrict endp, int base, unsigned int min, unsigned int max)
+{
+ int status;
+
+ *n = strtou_noneg(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+inline int
+a2ul_nc(unsigned long *restrict n, char *s,
+ char **restrict endp, int base, unsigned long min, unsigned long max)
+{
+ int status;
+
+ *n = strtou_noneg(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+inline int
+a2ull_nc(unsigned long long *restrict n, char *s,
+ char **restrict endp, int base, unsigned long long min,
+ unsigned long long max)
+{
+ int status;
+
+ *n = strtou_noneg(s, endp, base, min, max, &status);
+ if (status != 0) {
+ errno = status;
+ return -1;
+ }
+ return 0;
+}
+
+
+#endif // include guard
#include <stddef.h>
#include <sys/types.h>
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2i.h"
+#include "atoi/a2i/a2s.h"
#include "attr.h"
#include "typetraits.h"
+++ /dev/null
-// SPDX-FileCopyrightText: 2007-2009, Nicolas François
-// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
-// SPDX-License-Identifier: BSD-3-Clause
-
-
-#ifndef SHADOW_INCLUDE_LIB_ATOI_STR2I_H_
-#define SHADOW_INCLUDE_LIB_ATOI_STR2I_H_
-
-
-#include <config.h>
-
-#include <limits.h>
-#include <stddef.h>
-
-#include "atoi/a2i.h"
-#include "attr.h"
-
-
-#define str2i(TYPE, ...) \
-( \
- _Generic((TYPE) 0, \
- short: str2sh, \
- int: str2si, \
- long: str2sl, \
- long long: str2sll, \
- unsigned short: str2uh, \
- unsigned int: str2ui, \
- unsigned long: str2ul, \
- unsigned long long: str2ull \
- )(__VA_ARGS__) \
-)
-
-
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2sh(short *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2si(int *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2sl(long *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2sll(long long *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2uh(unsigned short *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2ui(unsigned int *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2ul(unsigned long *restrict n, const char *restrict s);
-ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
-inline int str2ull(unsigned long long *restrict n, const char *restrict s);
-
-
-inline int
-str2sh(short *restrict n, const char *restrict s)
-{
- return a2sh(n, s, NULL, 0, SHRT_MIN, SHRT_MAX);
-}
-
-
-inline int
-str2si(int *restrict n, const char *restrict s)
-{
- return a2si(n, s, NULL, 0, INT_MIN, INT_MAX);
-}
-
-
-inline int
-str2sl(long *restrict n, const char *restrict s)
-{
- return a2sl(n, s, NULL, 0, LONG_MIN, LONG_MAX);
-}
-
-
-inline int
-str2sll(long long *restrict n, const char *restrict s)
-{
- return a2sll(n, s, NULL, 0, LLONG_MIN, LLONG_MAX);
-}
-
-
-inline int
-str2uh(unsigned short *restrict n, const char *restrict s)
-{
- return a2uh(n, s, NULL, 0, 0, USHRT_MAX);
-}
-
-
-inline int
-str2ui(unsigned int *restrict n, const char *restrict s)
-{
- return a2ui(n, s, NULL, 0, 0, UINT_MAX);
-}
-
-
-inline int
-str2ul(unsigned long *restrict n, const char *restrict s)
-{
- return a2ul(n, s, NULL, 0, 0, ULONG_MAX);
-}
-
-
-inline int
-str2ull(unsigned long long *restrict n, const char *restrict s)
-{
- return a2ull(n, s, NULL, 0, 0, ULLONG_MAX);
-}
-
-
-#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2007-2009, Nicolas François
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/str2i/str2i.h"
--- /dev/null
+// SPDX-FileCopyrightText: 2007-2009, Nicolas François
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_STR2I_STR2I_H_
+#define SHADOW_INCLUDE_LIB_ATOI_STR2I_STR2I_H_
+
+
+#include <config.h>
+
+#include "atoi/str2i/str2s.h"
+#include "atoi/str2i/str2u.h"
+
+
+#define str2i(TYPE, ...) \
+( \
+ _Generic((TYPE) 0, \
+ short: str2sh, \
+ int: str2si, \
+ long: str2sl, \
+ long long: str2sll, \
+ unsigned short: str2uh, \
+ unsigned int: str2ui, \
+ unsigned long: str2ul, \
+ unsigned long long: str2ull \
+ )(__VA_ARGS__) \
+)
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2007-2009, Nicolas François
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/str2i/str2s.h"
+
+
+extern inline int str2sh(short *restrict n, const char *restrict s);
+extern inline int str2si(int *restrict n, const char *restrict s);
+extern inline int str2sl(long *restrict n, const char *restrict s);
+extern inline int str2sll(long long *restrict n, const char *restrict s);
--- /dev/null
+// SPDX-FileCopyrightText: 2007-2009, Nicolas François
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_STR2I_STR2S_H_
+#define SHADOW_INCLUDE_LIB_ATOI_STR2I_STR2S_H_
+
+
+#include <config.h>
+
+#include <limits.h>
+#include <stddef.h>
+
+#include "atoi/a2i/a2s.h"
+#include "attr.h"
+
+
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2sh(short *restrict n, const char *restrict s);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2si(int *restrict n, const char *restrict s);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2sl(long *restrict n, const char *restrict s);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2sll(long long *restrict n, const char *restrict s);
+
+
+inline int
+str2sh(short *restrict n, const char *restrict s)
+{
+ return a2sh(n, s, NULL, 0, SHRT_MIN, SHRT_MAX);
+}
+
+
+inline int
+str2si(int *restrict n, const char *restrict s)
+{
+ return a2si(n, s, NULL, 0, INT_MIN, INT_MAX);
+}
+
+
+inline int
+str2sl(long *restrict n, const char *restrict s)
+{
+ return a2sl(n, s, NULL, 0, LONG_MIN, LONG_MAX);
+}
+
+
+inline int
+str2sll(long long *restrict n, const char *restrict s)
+{
+ return a2sll(n, s, NULL, 0, LLONG_MIN, LLONG_MAX);
+}
+
+
+#endif // include guard
#include <config.h>
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2u.h"
-extern inline int str2sh(short *restrict n, const char *restrict s);
-extern inline int str2si(int *restrict n, const char *restrict s);
-extern inline int str2sl(long *restrict n, const char *restrict s);
-extern inline int str2sll(long long *restrict n, const char *restrict s);
extern inline int str2uh(unsigned short *restrict n, const char *restrict s);
extern inline int str2ui(unsigned int *restrict n, const char *restrict s);
extern inline int str2ul(unsigned long *restrict n, const char *restrict s);
--- /dev/null
+// SPDX-FileCopyrightText: 2007-2009, Nicolas François
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_STR2I_STR2U_H_
+#define SHADOW_INCLUDE_LIB_ATOI_STR2I_STR2U_H_
+
+
+#include <config.h>
+
+#include <limits.h>
+#include <stddef.h>
+
+#include "atoi/a2i/a2u.h"
+#include "attr.h"
+
+
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2uh(unsigned short *restrict n, const char *restrict s);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2ui(unsigned int *restrict n, const char *restrict s);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2ul(unsigned long *restrict n, const char *restrict s);
+ATTR_STRING(2) ATTR_ACCESS(write_only, 1)
+inline int str2ull(unsigned long long *restrict n, const char *restrict s);
+
+
+inline int
+str2uh(unsigned short *restrict n, const char *restrict s)
+{
+ return a2uh(n, s, NULL, 0, 0, USHRT_MAX);
+}
+
+
+inline int
+str2ui(unsigned int *restrict n, const char *restrict s)
+{
+ return a2ui(n, s, NULL, 0, 0, UINT_MAX);
+}
+
+
+inline int
+str2ul(unsigned long *restrict n, const char *restrict s)
+{
+ return a2ul(n, s, NULL, 0, 0, ULONG_MAX);
+}
+
+
+inline int
+str2ull(unsigned long long *restrict n, const char *restrict s)
+{
+ return a2ull(n, s, NULL, 0, 0, ULLONG_MAX);
+}
+
+
+#endif // include guard
+++ /dev/null
-// SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
-// SPDX-License-Identifier: BSD-3-Clause
-
-
-#include <config.h>
-
-#include "atoi/strtoi.h"
-
-#include <stdint.h>
-
-
-extern inline intmax_t strtoi_(const char *s, char **restrict endp, int base,
- intmax_t min, intmax_t max, int *restrict status);
-extern inline uintmax_t strtou_(const char *s, char **restrict endp, int base,
- uintmax_t min, uintmax_t max, int *restrict status);
+++ /dev/null
-// SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
-// SPDX-License-Identifier: BSD-3-Clause
-
-
-#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_H_
-#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_H_
-
-
-#include <config.h>
-
-#include <errno.h>
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/param.h>
-
-#include "attr.h"
-
-
-#define strtoNmax(TYPE, ...) \
-( \
- _Generic((TYPE) 0, \
- intmax_t: strtoimax, \
- uintmax_t: strtoumax \
- )(__VA_ARGS__) \
-)
-
-
-#define strtoN(s, endp, base, min, max, status, TYPE) \
-({ \
- const char *s_ = s; \
- char **endp_ = endp; \
- int base_ = base; \
- TYPE min_ = min; \
- TYPE max_ = max; \
- int *status_ = status; \
- \
- int e_, st_; \
- char *end_; \
- TYPE n_; \
- \
- if (endp_ == NULL) \
- endp_ = &end_; \
- if (status_ == NULL) \
- status_ = &st_; \
- \
- if (base_ != 0 && (base_ < 0 || base_ > 36)) { \
- *status_ = EINVAL; \
- n_ = 0; \
- \
- } else { \
- e_ = errno; \
- errno = 0; \
- n_ = strtoNmax(TYPE, s_, endp_, base_); \
- \
- if (*endp_ == s_) \
- *status_ = ECANCELED; \
- else if (errno == ERANGE || n_ < min_ || n_ > max_) \
- *status_ = ERANGE; \
- else if (**endp_ != '\0') \
- *status_ = ENOTSUP; \
- else \
- *status_ = 0; \
- \
- errno = e_; \
- } \
- MAX(min_, MIN(max_, n_)); \
-})
-
-
-ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
-inline intmax_t strtoi_(const char *s, char **restrict endp, int base,
- intmax_t min, intmax_t max, int *restrict status);
-ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
-inline uintmax_t strtou_(const char *s, char **restrict endp, int base,
- uintmax_t min, uintmax_t max, int *restrict status);
-
-
-inline intmax_t
-strtoi_(const char *s, char **restrict endp, int base,
- intmax_t min, intmax_t max, int *restrict status)
-{
- return strtoN(s, endp, base, min, max, status, intmax_t);
-}
-
-
-inline uintmax_t
-strtou_(const char *s, char **restrict endp, int base,
- uintmax_t min, uintmax_t max, int *restrict status)
-{
- return strtoN(s, endp, base, min, max, status, uintmax_t);
-}
-
-
-#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/strtoi/strtoi.h"
+
+#include <stdint.h>
+
+
+extern inline intmax_t strtoi_(const char *s, char **restrict endp, int base,
+ intmax_t min, intmax_t max, int *restrict status);
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOI_H_
+#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOI_H_
+
+
+#include <config.h>
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/param.h>
+
+#include "attr.h"
+
+
+ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
+inline intmax_t strtoi_(const char *s, char **restrict endp, int base,
+ intmax_t min, intmax_t max, int *restrict status);
+
+
+inline intmax_t
+strtoi_(const char *s, char **restrict endp, int base,
+ intmax_t min, intmax_t max, int *restrict status)
+{
+ int e, st;
+ char *end;
+ intmax_t n;
+
+ if (endp == NULL)
+ endp = &end;
+ if (status == NULL)
+ status = &st;
+
+ if (base != 0 && (base < 0 || base > 36)) {
+ *status = EINVAL;
+ return MAX(min, MIN(max, 0));
+ }
+
+ e = errno;
+ errno = 0;
+
+ n = strtoimax(s, endp, base);
+
+ if (*endp == s)
+ *status = ECANCELED;
+ else if (errno == ERANGE || n < min || n > max)
+ *status = ERANGE;
+ else if (**endp != '\0')
+ *status = ENOTSUP;
+ else
+ *status = 0;
+
+ errno = e;
+
+ return MAX(min, MIN(max, n));
+}
+
+
+#endif // include guard
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "atoi/strtoi/strtou.h"
+
+#include <stdint.h>
+
+
+extern inline uintmax_t strtou_(const char *s, char **restrict endp, int base,
+ uintmax_t min, uintmax_t max, int *restrict status);
--- /dev/null
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_H_
+#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_H_
+
+
+#include <config.h>
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/param.h>
+
+#include "attr.h"
+
+
+ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
+inline uintmax_t strtou_(const char *s, char **restrict endp, int base,
+ uintmax_t min, uintmax_t max, int *restrict status);
+
+
+inline uintmax_t
+strtou_(const char *s, char **restrict endp, int base,
+ uintmax_t min, uintmax_t max, int *restrict status)
+{
+ int e, st;
+ char *end;
+ uintmax_t n;
+
+ if (endp == NULL)
+ endp = &end;
+ if (status == NULL)
+ status = &st;
+
+ if (base != 0 && (base < 0 || base > 36)) {
+ *status = EINVAL;
+ return MAX(min, 0);
+ }
+
+ e = errno;
+ errno = 0;
+
+ n = strtoumax(s, endp, base);
+
+ if (*endp == s)
+ *status = ECANCELED;
+ else if (errno == ERANGE || n < min || n > max)
+ *status = ERANGE;
+ else if (**endp != '\0')
+ *status = ENOTSUP;
+ else
+ *status = 0;
+
+ errno = e;
+
+ return MAX(min, MIN(max, n));
+}
+
+
+#endif // include guard
-// SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
// SPDX-License-Identifier: BSD-3-Clause
#include <config.h>
-#include "atoi/strtou_noneg.h"
+#include "atoi/strtoi/strtou_noneg.h"
#include <stdint.h>
-// SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
// SPDX-License-Identifier: BSD-3-Clause
-#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOU_NONEG_H_
-#define SHADOW_INCLUDE_LIB_ATOI_STRTOU_NONEG_H_
+#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_NONEG_H_
+#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_NONEG_H_
#include <config.h>
#include <stddef.h>
#include <stdint.h>
-#include "atoi/strtoi.h"
+#include "atoi/strtoi/strtoi.h"
+#include "atoi/strtoi/strtou.h"
#include "attr.h"
#include <libeconf.h>
#endif
-#include "atoi/a2i.h"
-#include "atoi/str2i.h"
+#include "atoi/a2i/a2s.h"
+#include "atoi/a2i/a2u.h"
+#include "atoi/str2i/str2u.h"
#include "defines.h"
#include "getdef.h"
#include "prototypes.h"
#include <ctype.h>
#include <stdlib.h>
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2u.h"
#include "defines.h"
#include "prototypes.h"
#include <limits.h>
#include <stdio.h>
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2i.h"
#include "defines.h"
#include "prototypes.h"
#include "shadowlog.h"
#include "alloc/calloc.h"
#include "alloc/x/xmalloc.h"
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2u.h"
#include "prototypes.h"
#include "string/sprintf/stpeprintf.h"
#include "idmapping.h"
#include "shadowlog.h"
#include <sys/resource.h>
-#include "atoi/a2i.h"
-#include "atoi/str2i.h"
+#include "atoi/a2i/a2i.h"
+#include "atoi/a2i/a2s.h"
+#include "atoi/str2i/str2i.h"
+#include "atoi/str2i/str2s.h"
+#include "atoi/str2i/str2u.h"
#include "memzero.h"
#include "typetraits.h"
#include <sys/types.h>
#include <string.h>
-#include "atoi/a2i.h"
-#include "atoi/str2i.h"
+#include "atoi/a2i/a2s.h"
+#include "atoi/str2i/str2u.h"
#include "defines.h"
#include "prototypes.h"
#include "shadowlog_internal.h"
#include <string.h>
#include <sys/types.h>
-#include "atoi/a2i.h"
-#include "atoi/str2i.h"
+#include "atoi/a2i/a2s.h"
+#include "atoi/str2i/str2u.h"
#include "defines.h"
#include "prototypes.h"
#include "string/strtok/stpsep.h"
#ident "$Id$"
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2s.h"
#include "prototypes.h"
#include "getdate.h"
#include "alloc/malloc.h"
#include "alloc/realloc.h"
#include "alloc/reallocf.h"
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2u.h"
#include "string/sprintf/snprintf.h"
#endif /* ACCT_TOOLS_SETUID */
#include <pwd.h>
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2s.h"
#include "defines.h"
#include "memzero.h"
#include "prototypes.h"
#include <fcntl.h>
#include "atoi/getnum.h"
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2u.h"
#include "defines.h"
#include "prototypes.h"
#include "subordinateio.h"
#include "pam_defs.h"
#endif /* USE_PAM */
#endif /* ACCT_TOOLS_SETUID */
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2s.h"
#include "defines.h"
#include "nscd.h"
#include "sssd.h"
#ifdef USE_PAM
#include "pam_defs.h"
#endif /* USE_PAM */
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2s.h"
#include "defines.h"
#include "nscd.h"
#include "sssd.h"
#include <time.h>
#include <assert.h>
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2s.h"
#include "defines.h"
#include "faillog.h"
#include "memzero.h"
#include <stdio.h>
#include <unistd.h>
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2u.h"
#include "subid.h"
#include "stdlib.h"
#include "prototypes.h"
#include <net/if.h>
#endif
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2u.h"
#include "defines.h"
#include "prototypes.h"
#include "getdef.h"
#include <stdio.h>
#include <unistd.h>
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2u.h"
#include "subid.h"
#include "stdlib.h"
#include "prototypes.h"
#include "alloc/reallocf.h"
#include "atoi/getnum.h"
-#include "atoi/str2i.h"
+#include "atoi/str2i/str2s.h"
#ifdef ACCT_TOOLS_SETUID
#ifdef USE_PAM
#include "pam_defs.h"
#include <time.h>
#include "agetpass.h"
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2s.h"
#include "defines.h"
#include "getdef.h"
#include "memzero.h"
#include <unistd.h>
#include "alloc/x/xmalloc.h"
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2s.h"
#include "atoi/getnum.h"
#include "chkname.h"
#include "defines.h"
#include "alloc/malloc.h"
#include "alloc/x/xmalloc.h"
-#include "atoi/a2i.h"
+#include "atoi/a2i/a2i.h"
+#include "atoi/a2i/a2s.h"
#include "atoi/getnum.h"
#include "chkname.h"
#include "defines.h"
$(NULL)
test_atoi_strtoi_SOURCES = \
- ../../lib/atoi/strtoi.c \
+ ../../lib/atoi/strtoi/strtoi.c \
+ ../../lib/atoi/strtoi/strtou_noneg.c \
test_atoi_strtoi.c \
$(NULL)
test_atoi_strtoi_CFLAGS = \
#include <stdint.h> // Required by <cmocka.h>
#include <cmocka.h>
-#include "atoi/strtoi.h"
-#include "atoi/strtou_noneg.h"
+#include "atoi/strtoi/strtoi.h"
+#include "atoi/strtoi/strtou_noneg.h"
static void test_strtoi(void **state);