1
/* Copyright (C) 1991, 1993, 1995, 1996, 1997, 1998, 2000, 2002, 2004, 2010
1
/* Copyright (C) 1991, 1993, 1995-1998, 2000, 2002, 2004, 2010, 2011
2
2
Free Software Foundation, Inc.
3
3
This file is part of the GNU C Library.
17
17
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
23
23
#include <string.h>
24
24
#include <sys/param.h>
25
#include <stdio-common/_itoa.h>
27
/* It is critical here that we always use the `dcgettext' function for
28
the message translation. Since <libintl.h> only defines the macro
29
`dgettext' to use `dcgettext' for optimizing programs this is not
32
# include <locale.h> /* We need LC_MESSAGES. */
33
# define dgettext(domainname, msgid) dcgettext (domainname, msgid, LC_MESSAGES)
36
27
/* Fill buf with a string describing the errno code in ERRNUM. */
38
29
__xpg_strerror_r (int errnum, char *buf, size_t buflen)
40
if (errnum < 0 || errnum >= _sys_nerr_internal
41
|| _sys_errlist_internal[errnum] == NULL)
44
const char *estr = (const char *) _(_sys_errlist_internal[errnum]);
45
size_t estrlen = strlen (estr) + 1;
50
memcpy (buf, estr, estrlen);
31
const char *estr = __strerror_r (errnum, buf, buflen);
32
size_t estrlen = strlen (estr);
36
assert (errnum < 0 || errnum >= _sys_nerr_internal
37
|| _sys_errlist_internal[errnum] == NULL);
40
assert (errnum >= 0 && errnum < _sys_nerr_internal
41
&& _sys_errlist_internal[errnum] != NULL);
43
/* Terminate the string in any case. */
45
*((char *) __mempcpy (buf, estr, MIN (buflen - 1, estrlen))) = '\0';
47
return buflen <= estrlen ? ERANGE : 0;