All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] caseless uuid detection, fixed wrong behaviour for strncasecmp, added strcasecmp
@ 2009-01-21 12:08 Daniel Mierswa
  2009-01-21 17:30 ` Pavel Roskin
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Mierswa @ 2009-01-21 12:08 UTC (permalink / raw)
  To: grub-devel

[-- Attachment #1: Type: text/plain, Size: 725 bytes --]

Hi list,
during testing I found that the UUID is checked case-dependend in
search.c, which is probably not wanted (I hope).
Also the grub_strncasecmp function returned (int) *s1 - (int) *s2 which
is wrong if you compare it to the C library strncasecmp.
I fixed that and used the same algorithm which is used in grub_strncmp
(Taking a grub_size_t instead of int and checked the decremented value
in the loop). I also added strcasecmp for consistency reasons which is
used by search.c now.
I'd appreciate your your replies.

-- 
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

[-- Attachment #2: caseless_uuid.patch --]
[-- Type: text/plain, Size: 2649 bytes --]

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++;

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-01-28  8:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-21 12:08 [PATCH] caseless uuid detection, fixed wrong behaviour for strncasecmp, added strcasecmp Daniel Mierswa
2009-01-21 17:30 ` Pavel Roskin
2009-01-23  9:51   ` Daniel Mierswa
2009-01-26  4:41     ` Pavel Roskin
2009-01-26 18:28       ` Daniel Mierswa
2009-01-28  1:49         ` Pavel Roskin
2009-01-28  4:02           ` Pavel Roskin
2009-01-28  8:31             ` ebik

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.