[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