#ifdef HAVE_STRERROR_R
char tmp_buff [128]; //Quite arbitrary, should be large enough
char *buff = tmp_buff;
- int buff_len = sizeof (tmp_buff);
- int r;
+ size_t buff_len = sizeof (tmp_buff);
buff [0] = 0;
+#ifndef STRERROR_R_CHAR_P
+ int r;
while ((r = strerror_r (errnum, buff, buff_len - 1))) {
if (r != ERANGE) {
buff = g_strdup_printf ("Invalid Error code '%d'", errnum);
error_messages [errnum] = g_strdup (buff);
if (buff != tmp_buff)
g_free (buff);
-#else
+#else /* STRERROR_R_CHAR_P */
+ buff = strerror_r (errnum, buff, buff_len);
+ if (!error_messages [errnum])
+ error_messages [errnum] = g_strdup (buff);
+#endif /* STRERROR_R_CHAR_P */
+
+#else /* HAVE_STRERROR_R */
if (!error_messages [errnum])
error_messages [errnum] = g_strdup_printf ("Error code '%d'", errnum);
-#endif
+#endif /* HAVE_STRERROR_R */
#ifndef G_OS_WIN32