grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] caseless uuid detection, fixed wrong behaviour for strncasec


From: Daniel Mierswa
Subject: Re: [PATCH] caseless uuid detection, fixed wrong behaviour for strncasecmp, added strcasecmp
Date: Fri, 23 Jan 2009 10:51:28 +0100
User-agent: Thunderbird 2.0.0.19 (X11/20090121)

Am 01/21/09 18:30, Pavel Roskin schrieb:
> The patch looks good to me.  I would split changes to commands/search.c
> into a separate commit.
> 
> Please provide ChangeLog entries for the patches.
> 
I will comply. Thanks for your quick response.


-- 
Mierswa, Daniel

If you still don't like it, that's ok: that's why I'm boss. I simply
know better than you do.
               --- Linus Torvalds, comp.os.linux.advocacy, 1996/07/22
2009-01-23  Daniel Mierswa <address@hidden>
        * kern/misc.c: add strcasecmp for consistency reasons, use grub_size_t
                       instead of int for strfuncs, fix strncasecmp return 
values,
                       use the same algorithm in str*casecmp and str*cmp
        * include/grub/misc.h: add str{,n}casecmp, use grub_size_t for 
strncasecmp

2009-01-23  Daniel Mierswa <address@hidden>
        * commands/search.c: caseless UUID comparing
Index: kern/misc.c
===================================================================
--- kern/misc.c (revision 1952)
+++ kern/misc.c (working copy)
@@ -194,7 +194,7 @@
   while (*s1 && *s2)
     {
       if (*s1 != *s2)
-       return (int) *s1 - (int) *s2;
+        break;
       
       s1++;
       s2++;
@@ -212,7 +212,7 @@
   while (*s1 && *s2 && --n)
     {
       if (*s1 != *s2)
-       return (int) *s1 - (int) *s2;
+        break;
       
       s1++;
       s2++;
@@ -222,21 +222,36 @@
 }
 
 int
-grub_strncasecmp (const char *s1, const char *s2, int c)
+grub_strcasecmp (const char *s1, const char *s2)
 {
-  int p = 1;
+  while (*s1 && *s2)
+    {
+      if (grub_tolower (*s1) != grub_tolower (*s2))
+        break;
+      
+      s1++;
+      s2++;
+    }
 
-  while (grub_tolower (*s1) && grub_tolower (*s2) && p < c)
+  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))
-       return (int) grub_tolower (*s1) - (int) grub_tolower (*s2);
+        break;
       
       s1++;
       s2++;
-      p++;
     }
 
-  return (int) *s1 - (int) *s2;
+  return (int) grub_tolower (*s1) - (int) grub_tolower (*s2);
 }
 
 char *
Index: include/grub/misc.h
===================================================================
--- include/grub/misc.h (revision 1952)
+++ include/grub/misc.h (working copy)
@@ -45,7 +45,8 @@
 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);
Index: commands/search.c
===================================================================
--- commands/search.c   (revision 1952)
+++ commands/search.c   (working copy)
@@ -115,7 +115,7 @@
              (fs->uuid) (dev, &uuid);
              if (grub_errno == GRUB_ERR_NONE && uuid)
                {
-                 if (grub_strcmp (uuid, key) == 0)
+                 if (grub_strcasecmp (uuid, key) == 0)
                    {
                      /* Found!  */
                      count++;

reply via email to

[Prev in Thread] Current Thread [Next in Thread]