Commit 6693060b authored by Rafaël Carré's avatar Rafaël Carré

use strerror_r() which is guaranteed to be thread safe, using the GNU prototype only when available

parent 44cfc603
......@@ -95,16 +95,23 @@ static inline unsigned long vlc_threadid (void)
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 ();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment