[vlc-devel] [PATCH 3/3] libvlc: use strerror_r() on Solaris
Sean McGovern
gseanmcg at gmail.com
Sat Jan 3 19:28:21 CET 2015
On Sat, Jan 3, 2015 at 1:07 PM, Rémi Denis-Courmont <remi at remlab.net> wrote:
> Le 2015-01-03 21:02, Sean McGovern a écrit :
>
> Solaris libc does not implement strerror_l().
>> ---
>> src/Makefile.am | 16 ++++++++++++++++
>> src/solaris/error.c | 39 +++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 55 insertions(+)
>> create mode 100644 src/solaris/error.c
>>
>> diff --git a/src/Makefile.am b/src/Makefile.am
>> index e200669..e884afe 100644
>> --- a/src/Makefile.am
>> +++ b/src/Makefile.am
>> @@ -232,6 +232,9 @@ else
>> if HAVE_OS2
>> libvlccore_la_SOURCES += $(SOURCES_libvlc_os2)
>> else
>> +if HAVE_SOLARIS
>> +libvlccore_la_SOURCES += $(SOURCES_libvlc_solaris)
>> +else
>> libvlccore_la_SOURCES += $(SOURCES_libvlc_other)
>> endif
>> endif
>> @@ -239,6 +242,7 @@ endif
>> endif
>> endif
>> endif
>> +endif
>> if BUILD_HTTPD
>> libvlccore_la_SOURCES += $(SOURCES_libvlc_httpd)
>> endif
>> @@ -320,6 +324,18 @@ SOURCES_libvlc_os2 = \
>> os2/rand.c \
>> $(NULL)
>>
>> +SOURCES_libvlc_solaris = \
>> + posix/dirs.c \
>> + solaris/error.c \
>> + posix/filesystem.c \
>> + posix/netconf.c \
>> + posix/thread.c \
>> + posix/timer.c \
>> + posix/plugin.c \
>> + posix/specific.c \
>> + posix/rand.c \
>> + $(NULL)
>> +
>> SOURCES_libvlc_other = \
>> posix/dirs.c \
>> posix/error.c \
>> diff --git a/src/solaris/error.c b/src/solaris/error.c
>> new file mode 100644
>> index 0000000..b7e4faa
>> --- /dev/null
>> +++ b/src/solaris/error.c
>> @@ -0,0 +1,39 @@
>>
>> +/**********************************************************
>> *******************
>> + * error.c: POSIX error messages formatting
>> +
>>
>> ************************************************************
>> *****************
>> + * 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 <errno.h>
>> +
>> +#include <vlc_common.h>
>> +
>> +
>> +const char* vlc_strerror(int errnum)
>> +{
>> + return vlc_strerror_c(errnum);
>> +}
>> +
>> +const char* vlc_strerror_c(int errnum)
>> +{
>> + static char message_buf[100];
>>
>
> That's not thread-safe.
>
> + strerror_r(errnum, message_buf, 100);
>> + return message_buf;
>>
>
> Even aside from thread safety, that will return uninitialized memory if
> strerror_r fails.
>
> +}
>> +
>>
>
> --
> Rémi Denis-Courmont
>
Oh -- OK I guess I still have some work to do. Thanks for pointing that out.
-- Sean McG.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20150103/0519c834/attachment.html>
More information about the vlc-devel
mailing list