diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-05-18 17:41:25 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-07-07 15:02:57 -0300 |
commit | 325081b9eb2035f8f025255206889208f330b590 (patch) | |
tree | 43a32de8fdd6777e290d7310795b41ea86df12b6 /stdio-common/test-strerr.c | |
parent | bfe05aa289054744b68f136b701705cfd242c4de (diff) | |
download | glibc-325081b9eb2035f8f025255206889208f330b590.tar glibc-325081b9eb2035f8f025255206889208f330b590.tar.gz glibc-325081b9eb2035f8f025255206889208f330b590.tar.bz2 glibc-325081b9eb2035f8f025255206889208f330b590.zip |
string: Add strerrorname_np and strerrordesc_np
The strerrorname_np returns error number name (e.g. "EINVAL" for EINVAL)
while strerrordesc_np returns string describing error number (e.g
"Invalid argument" for EINVAL). Different than strerror,
strerrordesc_np does not attempt to translate the return description,
both functions return NULL for an invalid error number.
They should be used instead of sys_errlist and sys_nerr, both are
thread and async-signal safe. These functions are GNU extensions.
Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu,
and s390x-linux-gnu.
Tested-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'stdio-common/test-strerr.c')
-rw-r--r-- | stdio-common/test-strerr.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c new file mode 100644 index 0000000000..fded208118 --- /dev/null +++ b/stdio-common/test-strerr.c @@ -0,0 +1,65 @@ +/* Test strerrorname_np and strerrordesc_np. + Copyright (C) 2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <string.h> +#include <errno.h> +#include <array_length.h> + +#include <support/support.h> +#include <support/check.h> + +#define N_(name) name + +static const char *const errlist[] = + { +/* This file is auto-generated from errlist.def. */ +#include <errlist.h> + }; + +#define MSGSTR_T errname_t +#define MSGSTR errname +#define MSGIDX errnameidx +#include <errlist-name.h> +#undef MSGSTR +#undef MSGIDX + +static int +do_test (void) +{ + TEST_VERIFY (strerrordesc_np (-1) == NULL); + TEST_VERIFY (strerrordesc_np (array_length (errlist)) == NULL); + for (size_t i = 0; i < array_length (errlist); i++) + { + if (errlist[i] == NULL) + continue; + TEST_COMPARE_STRING (strerrordesc_np (i), errlist[i]); + } + + TEST_VERIFY (strerrorname_np (-1) == NULL); + TEST_VERIFY (strerrorname_np (array_length (errlist)) == NULL); + for (size_t i = 0; i < array_length (errlist); i++) + { + if (errlist[i] == NULL) + continue; + TEST_COMPARE_STRING (strerrorname_np (i), errname.str + errnameidx[i]); + } + + return 0; +} + +#include <support/test-driver.c> |