Add a test case for trim_trailing_slashes, and make it handle other cases.
[rsync/rsync.git] / syscall.c
index b4b581b..b198dbf 100644 (file)
--- a/syscall.c
+++ b/syscall.c
@@ -113,15 +113,19 @@ int do_rename(char *fname1, char *fname2)
 
 void trim_trailing_slashes(char *name)
 {
-       char *p;
+       int l;
        /* Some BSD systems cannot make a directory if the name
         * contains a trailing slash.
         * <http://www.opensource.apple.com/bugs/X/BSD%20Kernel/2734739.html> */
-       if (!*name)
-               return;         /* empty string */
-       p = strchr(name, '\0') - 1;
-       while (p == '/') {
-               p-- = '\0';
+       
+       /* Don't change empty string; and also we can't improve on
+        * "/" */
+       
+       l = strlen(name);
+       while (l > 1) {
+               if (name[--l] != '/')
+                       break;
+               name[l] = '\0';
        }
 }