[PATCH 06/13] string: Implement strerror in terms of strerror_l
Florian Weimer
fweimer@redhat.com
Thu May 28 11:41:44 GMT 2020
> diff --git a/string/strerror.c b/string/strerror.c
> index 283ab70f91..35c749016e 100644
> --- a/string/strerror.c
> +++ b/string/strerror.c
> @@ -15,29 +15,11 @@
> License along with the GNU C Library; if not, see
> <https://www.gnu.org/licenses/>. */
>
> -#include <libintl.h>
> -#include <stdio.h>
> #include <string.h>
> -#include <errno.h>
> -
> -/* Return a string describing the errno code in ERRNUM.
> - The storage is good only until the next call to strerror.
> - Writing to the storage causes undefined behavior. */
> -libc_freeres_ptr (static char *buf);
> +#include <locale/localeinfo.h>
>
> char *
> strerror (int errnum)
> {
> - char *ret = __strerror_r (errnum, NULL, 0);
> - int saved_errno;
> -
> - if (__glibc_likely (ret != NULL))
> - return ret;
> - saved_errno = errno;
> - if (buf == NULL)
> - buf = malloc (1024);
> - __set_errno (saved_errno);
> - if (buf == NULL)
> - return _("Unknown error");
> - return __strerror_r (errnum, buf, 1024);
> + return __strerror_l (errnum, __libc_tsd_get (locale_t, LOCALE));
> }
Why is it okay to share the buffer between strerror and strerror_l?
POSIX is a bit unclear about this. Practically speaking, it should be
okay. But perhaps there should be a NEWS entry.
Thanks,
Florian
More information about the Libc-alpha
mailing list