From ba04ecfdacec4cf86e74b43fe8bcc09e06bb7a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Sat, 5 Nov 2011 17:20:41 +0200 Subject: [PATCH] avstring: Add locale independent implementations of strcasecmp/strncasecmp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- doc/APIchanges | 3 +++ libavutil/avstring.c | 21 +++++++++++++++++++++ libavutil/avstring.h | 12 ++++++++++++ libavutil/avutil.h | 2 +- 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 0dd8350c2d..f3dfe1f592 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,9 @@ libavutil: 2011-04-18 API changes, most recent first: +2011-11-xx - xxxxxxx - lavu 51.14.0 + Add av_strcasecmp() and av_strncasecmp() to avstring.h. + 2011-11-xx - xxxxxxx - lavu 51.13.0 Add av_toupper()/av_tolower() diff --git a/libavutil/avstring.c b/libavutil/avstring.c index 2b8c2d4a1d..11f3a7c321 100644 --- a/libavutil/avstring.c +++ b/libavutil/avstring.c @@ -134,6 +134,27 @@ char *av_get_token(const char **buf, const char *term) return ret; } +int av_strcasecmp(const char *a, const char *b) +{ + uint8_t c1, c2; + do { + c1 = av_tolower(*a++); + c2 = av_tolower(*b++); + } while (c1 && c1 == c2); + return c1 - c2; +} + +int av_strncasecmp(const char *a, const char *b, size_t n) +{ + const char *end = a + n; + uint8_t c1, c2; + do { + c1 = av_tolower(*a++); + c2 = av_tolower(*b++); + } while (a < end && c1 && c1 == c2); + return c1 - c2; +} + #ifdef TEST #undef printf diff --git a/libavutil/avstring.h b/libavutil/avstring.h index 8d97e1f768..6988f0e3e8 100644 --- a/libavutil/avstring.h +++ b/libavutil/avstring.h @@ -151,4 +151,16 @@ static inline int av_tolower(int c) return c; } +/* + * Locale independent case-insensitive compare. + * Note: This means only ASCII-range characters are case-insensitive + */ +int av_strcasecmp(const char *a, const char *b); + +/** + * Locale independent case-insensitive compare. + * Note: This means only ASCII-range characters are case-insensitive + */ +int av_strncasecmp(const char *a, const char *b, size_t n); + #endif /* AVUTIL_AVSTRING_H */ diff --git a/libavutil/avutil.h b/libavutil/avutil.h index b688321161..5ad7034fab 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -40,7 +40,7 @@ #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define LIBAVUTIL_VERSION_MAJOR 51 -#define LIBAVUTIL_VERSION_MINOR 13 +#define LIBAVUTIL_VERSION_MINOR 14 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \