Commit a37d20cc authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

vlc_strerror() and vlc_strerror_c() convenience wrappers

Those are more flexible than the GNU-specific %m format specifier to
print standard error messages. They are also less likely to format a
clobbered error number.
parent c3bd7793
......@@ -81,6 +81,9 @@ VLC_API void vlc_vaLog(vlc_object_t *, int,
# define MODULE_STRING __FILE__
#endif
VLC_API const char *vlc_strerror(int);
VLC_API const char *vlc_strerror_c(int);
/**
* @}
*/
......
......@@ -270,6 +270,7 @@ SOURCES_libvlc_android = \
SOURCES_libvlc_linux = \
posix/dirs.c \
posix/error.c \
posix/filesystem.c \
posix/netconf.c \
posix/plugin.c \
......@@ -312,6 +313,7 @@ SOURCES_libvlc_os2 = \
SOURCES_libvlc_other = \
posix/dirs.c \
posix/error.c \
posix/filesystem.c \
posix/netconf.c \
posix/thread.c \
......
......@@ -255,6 +255,8 @@ vlc_module_unload
vlc_Log
vlc_LogSet
vlc_vaLog
vlc_strerror
vlc_strerror_c
msleep
mstrtime
mwait
......
/*****************************************************************************
* error.c: POSIX error messages formatting
*****************************************************************************
* Copyright © 2013 Rémi Denis-Courmont
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <string.h>
#include <locale.h>
#include <vlc_common.h>
static const char *vlc_strerror_l(int errnum, const char *lname)
{
locale_t loc = newlocale(LC_MESSAGES_MASK, lname, (locale_t)0);
const char *buf = strerror_l(errnum, loc);
freelocale(loc);
return buf;
}
/**
* Formats an error message in the current locale.
* @param errnum error number (as in errno.h)
* @return A string pointer, valid until the next call to a function of the
* strerror() family in the same thread. This function cannot fail.
*/
const char *vlc_strerror(int errnum)
{
/* We cannot simply use strerror() here, since it is not thread-safe. */
return vlc_strerror_l(errnum, "");
}
/**
* Formats an error message in the POSIX/C locale (i.e. American English).
* @param errnum error number (as in errno.h)
* @return A string pointer, valid until the next call to a function of the
* strerror() family in the same thread. This function cannot fail.
*/
const char *vlc_strerror_c(int errnum)
{
return vlc_strerror_l(errnum, "C");
}
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