From 1806b56e2b5181be642d28dc51044cca9ca1cefe Mon Sep 17 00:00:00 2001 From: proski Date: Mon, 26 Jan 2009 04:22:44 +0000 Subject: [PATCH] 2009-01-26 Daniel Mierswa * kern/misc.c (grub_strcasecmp): New function. (grub_strcasecmp): Use grub_size_t instead of int for length. Fix return value. * include/grub/misc.h: Update function prototypes. --- ChangeLog | 7 +++++++ include/grub/misc.h | 3 ++- kern/misc.c | 33 ++++++++++++++++++++++++--------- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index edbf9c96d..a88fadf14 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-01-26 Daniel Mierswa + + * kern/misc.c (grub_strcasecmp): New function. + (grub_strcasecmp): Use grub_size_t instead of int for length. + Fix return value. + * include/grub/misc.h: Update function prototypes. + 2009-01-26 Robert Millan * configure.ac: Fix cross-compilation check. diff --git a/include/grub/misc.h b/include/grub/misc.h index e37847ef0..c377c20a2 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -45,7 +45,8 @@ void *EXPORT_FUNC(memcpy) (void *dest, const void *src, grub_size_t n); int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n); int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2); int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, grub_size_t n); -int EXPORT_FUNC(grub_strncasecmp) (const char *s1, const char *s2, int c); +int EXPORT_FUNC(grub_strcasecmp) (const char *s1, const char *s2); +int EXPORT_FUNC(grub_strncasecmp) (const char *s1, const char *s2, grub_size_t n); char *EXPORT_FUNC(grub_strchr) (const char *s, int c); char *EXPORT_FUNC(grub_strrchr) (const char *s, int c); int EXPORT_FUNC(grub_strword) (const char *s, const char *w); diff --git a/kern/misc.c b/kern/misc.c index da64eb050..641bd7aef 100644 --- a/kern/misc.c +++ b/kern/misc.c @@ -194,7 +194,7 @@ grub_strcmp (const char *s1, const char *s2) while (*s1 && *s2) { if (*s1 != *s2) - return (int) *s1 - (int) *s2; + break; s1++; s2++; @@ -212,7 +212,7 @@ grub_strncmp (const char *s1, const char *s2, grub_size_t n) while (*s1 && *s2 && --n) { if (*s1 != *s2) - return (int) *s1 - (int) *s2; + break; s1++; s2++; @@ -222,21 +222,36 @@ grub_strncmp (const char *s1, const char *s2, grub_size_t n) } int -grub_strncasecmp (const char *s1, const char *s2, int c) +grub_strcasecmp (const char *s1, const char *s2) { - int p = 1; - - while (grub_tolower (*s1) && grub_tolower (*s2) && p < c) + while (*s1 && *s2) { if (grub_tolower (*s1) != grub_tolower (*s2)) - return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); + break; + + s1++; + s2++; + } + + return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); +} + +int +grub_strncasecmp (const char *s1, const char *s2, grub_size_t n) +{ + if (n == 0) + return 0; + + while (*s1 && *s2 && --n) + { + if (grub_tolower (*s1) != grub_tolower (*s2)) + break; s1++; s2++; - p++; } - return (int) *s1 - (int) *s2; + return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); } char *