changeset 1409:f477dc852d3b draft

find.c: fix -iname.
author Rob Landley <rob@landley.net>
date Wed, 30 Jul 2014 20:21:13 -0500
parents 43bed82c87df
children ee0109c35b34
files toys/posix/find.c
diffstat 1 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/toys/posix/find.c	Wed Jul 30 19:22:55 2014 -0500
+++ b/toys/posix/find.c	Wed Jul 30 20:21:13 2014 -0500
@@ -151,14 +151,14 @@
 
 char *strlower(char *s)
 {
-  char *new;
+  char *try, *new;
 
   if (!CFG_TOYBOX_I18N) {
-    new = xstrdup(s);
+    try = new = xstrdup(s);
     for (; *s; s++) *(new++) = tolower(*s);
   } else {
     // I can't guarantee the string _won't_ expand during reencoding, so...?
-    new = xmalloc(strlen(s)*2+1);
+    try = new = xmalloc(strlen(s)*2+1);
 
     while (*s) {
       wchar_t c;
@@ -166,20 +166,22 @@
 
       if (len < 1) *(new++) = *(s++);
       else {
+        s += len;
         // squash title case too
         c = towlower(c);
 
         // if we had a valid utf8 sequence, convert it to lower case, and can't
         // encode back to utf8, something is wrong with your libc. But just
         // in case somebody finds an exploit...
-        len = wcrtomb(s, c, 0);
+        len = wcrtomb(new, c, 0);
         if (len < 1) error_exit("bad utf8 %x", c);
-        s += len;
+        new += len;
       }
     }
+    *new = 0;
   }
 
-  return new;
+  return try;
 }
 
 // Call this with 0 for first pass argument parsing and syntax checking (which