+2024-07-25 Bruno Haible <bruno@clisp.org>
+
+ xstrtol, xstrtoll tests: Test behaviour for an invalid base.
+ Reported by Alejandro Colomar <alx@kernel.org> in
+ <https://lists.gnu.org/archive/html/bug-gnulib/2024-07/msg00249.html>.
+ * modules/xstrtol-tests (Files): Add tests/macros.h.
+ * modules/xstrtoll-tests (Files): Likewise.
+ * tests/test-xstrtol.c: Include macros.h.
+ (main): If no arguments are given on the command line, perform
+ miscellaneous tests.
+ * tests/test-xstrtol.sh: Also invoke test-xstrtol without arguments.
+ * tests/test-xstrtoll.sh: Also invoke test-xstrtoll without arguments.
+
2024-07-24 Collin Funk <collin.funk1@gmail.com>
sys_un: Add C++ tests.
#include <stdio.h>
#include <error.h>
+#include "macros.h"
#include "xstrtol-error.h"
#ifndef __xstrtol
int
main (int argc, char **argv)
{
- strtol_error s_err;
- int i;
-
- error_print_progname = print_no_progname;
-
- for (i = 1; i < argc; i++)
+ if (argc > 1)
{
- char *p;
- __strtol_t val;
+ /* Test cases given on the command line. */
+ int i;
- s_err = __xstrtol (argv[i], &p, 0, &val, "bckMw0");
- if (s_err == LONGINT_OK)
- {
- printf ("%s->%" __spec " (%s)\n", argv[i], val, p);
- }
- else
+ error_print_progname = print_no_progname;
+
+ for (i = 1; i < argc; i++)
{
- xstrtol_fatal (s_err, -2, 'X', NULL, argv[i]);
+ char *p;
+ __strtol_t val;
+ strtol_error s_err = __xstrtol (argv[i], &p, 0, &val, "bckMw0");
+ if (s_err == LONGINT_OK)
+ {
+ printf ("%s->%" __spec " (%s)\n", argv[i], val, p);
+ }
+ else
+ {
+ xstrtol_fatal (s_err, -2, 'X', NULL, argv[i]);
+ }
}
+
+ return 0;
+ }
+ else
+ {
+ /* Miscellaneous test cases. */
+
+ /* Test an invalid base. Reported by Alejandro Colomar. */
+ {
+ const char input[] = "k";
+ char *endp = NULL;
+ __strtol_t val = -17;
+ strtol_error s_err = __xstrtol (input, &endp, -1, &val, "k");
+ ASSERT (s_err == LONGINT_INVALID);
+ ASSERT (endp == NULL);
+ ASSERT (val == -17);
+ }
+
+ return test_exit_status;
}
- exit (0);
}