mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-26 12:12:10 +01:00
Merge branch 'strerror_r-int-variant-support' into 'main'
gbacktrace: Handle case of strerror_r returning an int value See merge request GNOME/glib!2800
This commit is contained in:
commit
1bf53c9ced
@ -323,8 +323,13 @@ stack_trace_sigchld (int signum)
|
|||||||
static inline const char *
|
static inline const char *
|
||||||
get_strerror (char *buffer, gsize n)
|
get_strerror (char *buffer, gsize n)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_STRERROR_R
|
#if defined(STRERROR_R_CHAR_P)
|
||||||
return strerror_r (errno, buffer, n);
|
return strerror_r (errno, buffer, n);
|
||||||
|
#elif defined(HAVE_STRERROR_R)
|
||||||
|
int ret = strerror_r (errno, buffer, n);
|
||||||
|
if (ret == 0 || ret == EINVAL)
|
||||||
|
return buffer;
|
||||||
|
return NULL;
|
||||||
#else
|
#else
|
||||||
const char *error_str = strerror (errno);
|
const char *error_str = strerror (errno);
|
||||||
if (!error_str)
|
if (!error_str)
|
||||||
|
@ -1313,7 +1313,7 @@ g_ascii_strtoll (const gchar *nptr,
|
|||||||
* ]|
|
* ]|
|
||||||
*
|
*
|
||||||
* Returns: a UTF-8 string describing the error code. If the error code
|
* Returns: a UTF-8 string describing the error code. If the error code
|
||||||
* is unknown, it returns a string like "unknown error (<code>)".
|
* is unknown, it returns a string like "Unknown error: <code>".
|
||||||
*/
|
*/
|
||||||
const gchar *
|
const gchar *
|
||||||
g_strerror (gint errnum)
|
g_strerror (gint errnum)
|
||||||
@ -1336,6 +1336,9 @@ g_strerror (gint errnum)
|
|||||||
{
|
{
|
||||||
gchar buf[1024];
|
gchar buf[1024];
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
#if defined(HAVE_STRERROR_R) && !defined(STRERROR_R_CHAR_P)
|
||||||
|
int ret;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(G_OS_WIN32)
|
#if defined(G_OS_WIN32)
|
||||||
strerror_s (buf, sizeof (buf), errnum);
|
strerror_s (buf, sizeof (buf), errnum);
|
||||||
@ -1345,13 +1348,23 @@ g_strerror (gint errnum)
|
|||||||
# if defined(STRERROR_R_CHAR_P)
|
# if defined(STRERROR_R_CHAR_P)
|
||||||
msg = strerror_r (errnum, buf, sizeof (buf));
|
msg = strerror_r (errnum, buf, sizeof (buf));
|
||||||
# else
|
# else
|
||||||
(void) strerror_r (errnum, buf, sizeof (buf));
|
ret = strerror_r (errnum, buf, sizeof (buf));
|
||||||
|
if (ret == 0 || ret == EINVAL)
|
||||||
msg = buf;
|
msg = buf;
|
||||||
# endif /* HAVE_STRERROR_R */
|
# endif /* HAVE_STRERROR_R */
|
||||||
#else
|
#else
|
||||||
g_strlcpy (buf, strerror (errnum), sizeof (buf));
|
g_strlcpy (buf, strerror (errnum), sizeof (buf));
|
||||||
msg = buf;
|
msg = buf;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!msg)
|
||||||
|
{
|
||||||
|
G_UNLOCK (errors);
|
||||||
|
|
||||||
|
errno = saved_errno;
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
if (!g_get_console_charset (NULL))
|
if (!g_get_console_charset (NULL))
|
||||||
{
|
{
|
||||||
msg = g_locale_to_utf8 (msg, -1, NULL, NULL, &error);
|
msg = g_locale_to_utf8 (msg, -1, NULL, NULL, &error);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user