]> git.sesse.net Git - vlc/commitdiff
Added strnlen replacement (Untested)
authorLaurent Aimar <fenrir@videolan.org>
Mon, 28 May 2007 20:59:43 +0000 (20:59 +0000)
committerLaurent Aimar <fenrir@videolan.org>
Mon, 28 May 2007 20:59:43 +0000 (20:59 +0000)
Revert back mp4 r20330 !

configure.ac
include/vlc_common.h
modules/demux/mp4/libmp4.c
src/extras/libc.c

index b8726b471d6c4338c2a08b3e2c21bf568bbed24e..471ff16a89a461f942bc851afcfcd10f3f909b7e 100644 (file)
@@ -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)])
index 0001dde096a900bac1e4c21e880a46c8d4272f6d..2a7330d148194b5ddcaf9924f7563105143d5137 100644 (file)
@@ -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 ) );
index b35eb71dec6595d765cf5a07269237606d01f2c6..db5249bd2d6945af59f759c9224a8d46033ba7c3 100644 (file)
     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; \
     }
 
index e05858f3ab363e2f141d14d3e2e850ed8366139b..effbd0dc511f29277d8cc54e871d13ef480c3b23 100644 (file)
@@ -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
  *****************************************************************************/