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)])
# 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 ) );
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; \
}
}
#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
*****************************************************************************/