Commit 22fe2438 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Simplify, fix and inline strcasecmp and strncasecmp

parent 05cfa654
......@@ -728,8 +728,6 @@ struct dirent;
VLC_EXPORT( int, vlc_scandir, ( const char *name, struct dirent ***namelist, int (*filter) ( const struct dirent * ), int (*compar) ( const struct dirent **, const struct dirent ** ) ) );
VLC_EXPORT( int, vlc_alphasort, ( const struct dirent **a, const struct dirent **b ) );
VLC_EXPORT( int, vlc_strcasecmp, ( const char *s1, const char *s2 ) );
VLC_EXPORT( int, vlc_strncasecmp, ( const char *s1, const char *s2, size_t n ) );
VLC_EXPORT( char *, vlc_strcasestr, ( const char *s1, const char *s2 ) );
#if defined(WIN32) || defined(UNDER_CE)
......
......@@ -117,7 +117,16 @@ static inline getenv (const char *name)
#ifndef HAVE_STRCASECMP
# ifndef HAVE_STRICMP
# define strcasecmp vlc_strcasecmp
# include <ctype.h>
static inline int strcasecmp (const char *s1, const char *s2)
{
for (size_t i = 0;; i++)
{
int d = tolower (s1[i]) - tolower (s2[i]);
if (d) return d;
}
return 0;
}
# else
# define strcasecmp stricmp
# endif
......@@ -125,7 +134,16 @@ static inline getenv (const char *name)
#ifndef HAVE_STRNCASECMP
# ifndef HAVE_STRNICMP
# define strncasecmp vlc_strncasecmp
# include <ctype.h>
static inline int strncasecmp (const char *s1, const char *s2, size_t n)
{
for (size_t i = 0; i < n; i++)
{
int d = tolower (s1[i]) - tolower (s2[i]);
if (d) return d;
}
return 0;
}
# else
# define strncasecmp strnicmp
# endif
......
......@@ -74,52 +74,6 @@
# define strcoll strcmp
#endif
/*****************************************************************************
* strcasecmp: compare two strings ignoring case
*****************************************************************************/
#if !defined( HAVE_STRCASECMP ) && !defined( HAVE_STRICMP )
int vlc_strcasecmp( const char *s1, const char *s2 )
{
int c1, c2;
if( !s1 || !s2 ) return -1;
while( *s1 && *s2 )
{
c1 = tolower(*s1);
c2 = tolower(*s2);
if( c1 != c2 ) return (c1 < c2 ? -1 : 1);
s1++; s2++;
}
if( !*s1 && !*s2 ) return 0;
else return (*s1 ? 1 : -1);
}
#endif
/*****************************************************************************
* strncasecmp: compare n chars from two strings ignoring case
*****************************************************************************/
#if !defined( HAVE_STRNCASECMP ) && !defined( HAVE_STRNICMP )
int vlc_strncasecmp( const char *s1, const char *s2, size_t n )
{
int c1, c2;
if( !s1 || !s2 ) return -1;
while( n > 0 && *s1 && *s2 )
{
c1 = tolower(*s1);
c2 = tolower(*s2);
if( c1 != c2 ) return (c1 < c2 ? -1 : 1);
s1++; s2++; n--;
}
if( !n || (!*s1 && !*s2) ) return 0;
else return (*s1 ? 1 : -1);
}
#endif
/******************************************************************************
* strcasestr: find a substring (little) in another substring (big)
* Case sensitive. Return NULL if not found, return big if little == null
......
......@@ -438,10 +438,8 @@ vlc_recvmsg
vlc_scandir
vlc_sdp_Start
vlc_sendmsg
vlc_strcasecmp
vlc_strcasestr
vlc_strlcpy
vlc_strncasecmp
vlc_strtoll
vlc_submodule_create
__vlc_thread_create
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment