aboutsummaryrefslogtreecommitdiff
path: root/string/_strerror.c
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-04-24 21:25:31 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-07-07 14:10:58 -0300
commitf13d260190d47bd38c0ae939080001e7bb58bd04 (patch)
treeb64784f84e80dd326419c079852b1988d84ae8e5 /string/_strerror.c
parentb1ccfc061feee9ce616444ded8e1cd5acf9fa97f (diff)
downloadglibc-f13d260190d47bd38c0ae939080001e7bb58bd04.tar
glibc-f13d260190d47bd38c0ae939080001e7bb58bd04.tar.gz
glibc-f13d260190d47bd38c0ae939080001e7bb58bd04.tar.bz2
glibc-f13d260190d47bd38c0ae939080001e7bb58bd04.zip
signal: Move sys_errlist to a compat symbol
The symbol is deprecated by strerror since its usage imposes some issues such as copy relocations. Its internal name is also changed to _sys_errlist_internal to avoid static linking usage. The compat code is also refactored by removing the over enginered errlist-compat.c generation from manual entried and extra comment token in linker script file. It disantangle the code generation from manual and simplify both Linux and Hurd compat code. The definitions from errlist.c are moved to errlist.h and a new test is added to avoid a new errno entry without an associated one in manual. Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi on all affected platforms. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'string/_strerror.c')
-rw-r--r--string/_strerror.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/string/_strerror.c b/string/_strerror.c
index af6be56fdc..01226e3d4b 100644
--- a/string/_strerror.c
+++ b/string/_strerror.c
@@ -36,8 +36,8 @@
char *
__strerror_r (int errnum, char *buf, size_t buflen)
{
- if (__builtin_expect (errnum < 0 || errnum >= _sys_nerr_internal
- || _sys_errlist_internal[errnum] == NULL, 0))
+ char *err = (char *) __get_errlist (errnum);
+ if (__glibc_unlikely (err == NULL))
{
/* Buffer we use to print the number in. For a maximum size for
`int' of 8 bytes we never need more than 20 digits. */
@@ -68,7 +68,7 @@ __strerror_r (int errnum, char *buf, size_t buflen)
return buf;
}
- return (char *) _(_sys_errlist_internal[errnum]);
+ return _(err);
}
weak_alias (__strerror_r, strerror_r)
libc_hidden_def (__strerror_r)