From: Laurent Aimar Date: Mon, 28 May 2007 20:59:43 +0000 (+0000) Subject: Added strnlen replacement (Untested) X-Git-Tag: 0.9.0-test0~7215 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=11884b884c536d7f6305ff3459f630bb458ebda2;p=vlc Added strnlen replacement (Untested) Revert back mp4 r20330 ! --- diff --git a/configure.ac b/configure.ac index b8726b471d..471ff16a89 100644 --- a/configure.ac +++ b/configure.ac @@ -463,7 +463,7 @@ need_libc=false AC_CHECK_FUNCS(gettimeofday strtod strtol strtof strtoll strtoull strsep isatty vasprintf asprintf swab sigrelse getpwuid memalign posix_memalign if_nametoindex atoll getenv putenv setenv gmtime_r ctime_r localtime_r lrintf daemon scandir fork bsearch lstat strlcpy) dnl Check for usual libc functions -AC_CHECK_FUNCS(strdup strndup atof) +AC_CHECK_FUNCS(strdup strndup strnlen atof) AC_CHECK_FUNCS(strcasecmp,,[AC_CHECK_FUNCS(stricmp)]) AC_CHECK_FUNCS(strncasecmp,,[AC_CHECK_FUNCS(strnicmp)]) AC_CHECK_FUNCS(strcasestr,,[AC_CHECK_FUNCS(stristr)]) diff --git a/include/vlc_common.h b/include/vlc_common.h index 0001dde096..2a7330d148 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -871,6 +871,13 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define vlc_strndup NULL #endif +#ifndef HAVE_STRNLEN +# define strnlen vlc_strnlen + VLC_EXPORT( size_t, vlc_strnlen, ( const char *, size_t ) ); +#elif !defined(__PLUGIN__) +# define vlc_strnlen NULL +#endif + #ifndef HAVE_STRLCPY # define strlcpy vlc_strlcpy VLC_EXPORT( size_t, vlc_strlcpy, ( char *, const char *, size_t ) ); diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c index b35eb71dec..db5249bd2d 100644 --- a/modules/demux/mp4/libmp4.c +++ b/modules/demux/mp4/libmp4.c @@ -61,17 +61,18 @@ MP4_GET1BYTE( p_void->i_version ); \ MP4_GET3BYTES( p_void->i_flags ) -#define MP4_GETSTRINGZ( p_str ) \ - if( ( i_read > 0 )&&(p_peek[0] ) ) \ - { \ - p_str = calloc( sizeof( char ), __MIN( strlen( (char*)p_peek ), i_read )+1);\ - memcpy( p_str, p_peek, __MIN( strlen( (char*)p_peek ), i_read ) ); \ - p_str[__MIN( strlen( (char*)p_peek ), i_read )] = 0; \ - p_peek += strlen( (char *)p_str ) + 1; \ - i_read -= strlen( (char *)p_str ) + 1; \ - } \ - else \ - { \ +#define MP4_GETSTRINGZ( p_str ) \ + if( (i_read > 0) && (p_peek[0]) ) \ + { \ + const int __i_copy__ = strnlen( (char*)p_peek, i_read-1 ); \ + p_str = calloc( sizeof(char), __i_copy__+1 ); \ + if( __i_copy__ > 0 ) memcpy( p_str, p_peek, __i_copy__ ); \ + p_str[__i_copy__] = 0; \ + p_peek += __i_copy__ + 1; \ + i_read -= __i_copy__ + 1; \ + } \ + else \ + { \ p_str = NULL; \ } diff --git a/src/extras/libc.c b/src/extras/libc.c index e05858f3ab..effbd0dc51 100644 --- a/src/extras/libc.c +++ b/src/extras/libc.c @@ -112,6 +112,17 @@ char *vlc_strndup( const char *string, size_t n ) } #endif +/***************************************************************************** + * strnlen: + *****************************************************************************/ +#if !defined( HAVE_STRNLEN ) +size_t vlc_strnlen( const char *psz, size_t n ) +{ + const char *psz_end = memchr( psz, 0, n ); + return psz_end ? ( psz_end - psz ) : n; +} +#endif + /***************************************************************************** * strcasecmp: compare two strings ignoring case *****************************************************************************/