void vlc_pthread_fatal (const char *action, int error,
const char *file, unsigned line)
{
+ char buf[1000];
const char *msg;
fprintf (stderr, "LibVLC fatal error %s in thread %lu at %s:%u: %d\n",
action, vlc_threadid (), file, line, error);
fflush (stderr);
- /* Sometimes strerror() crashes too, so make sure we print an error
+ /* Sometimes strerror_r() crashes too, so make sure we print an error
* message before we invoke it */
- msg = strerror (error);
- fprintf (stderr, "Error description was: \"%s\"\n", msg ? msg : "(null)");
+#ifdef __GLIBC__ && _POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600 && _GNU_SOURCE
+ /* use GNU prototype */
+ msg = strerror_r (error, buf, sizeof (buf));
+#else
+ msg = buf;
+ if (!strerror_r (error, buf, sizeof (buf)))
+#endif
+ fprintf (stderr, "Error description: \"%s\"\n", msg ? msg : "(null)");
fflush (stderr);
abort ();
}