diff --git a/lib/Makefile.am b/lib/Makefile.am index e76e7446a9..85b7c68409 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -176,6 +176,8 @@ libshadow_la_SOURCES = \ spawn.c \ sssd.c \ sssd.h \ + string/ctype/strisascii/strisdigit.c \ + string/ctype/strisascii/strisdigit.h \ string/memset/memzero.c \ string/memset/memzero.h \ string/sprintf/snprintf.c \ diff --git a/lib/string/ctype/strisascii/strisdigit.c b/lib/string/ctype/strisascii/strisdigit.c new file mode 100644 index 0000000000..a0e1449940 --- /dev/null +++ b/lib/string/ctype/strisascii/strisdigit.c @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause + + +#include + +#include "string/ctype/strisascii/strisdigit.h" + +#include + + +extern inline bool strisdigit(const char *s); diff --git a/lib/string/ctype/strisascii/strisdigit.h b/lib/string/ctype/strisascii/strisdigit.h new file mode 100644 index 0000000000..02852c15e7 --- /dev/null +++ b/lib/string/ctype/strisascii/strisdigit.h @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause + + +#ifndef SHADOW_INCLUDE_LIB_STRING_CTYPE_STRISASCII_STRISDIGIT_H_ +#define SHADOW_INCLUDE_LIB_STRING_CTYPE_STRISASCII_STRISDIGIT_H_ + + +#include + +#include + +#include "string/strchr/stpspn.h" +#include "string/strcmp/streq.h" + + +inline bool strisdigit(const char *s); + + +// Like isdigit(3), but check all characters in the string. +inline bool +strisdigit(const char *s) +{ + if (streq(s, "")) + return false; + + return streq(stpspn(s, "0123456789"), ""); +} + + +#endif // include guard