]> diplodocus.org Git - nmh/commitdiff
path.c: Simplify compath()'s flow; return, don't break twice.
authorRalph Corderoy <ralph@inputplus.co.uk>
Mon, 1 May 2017 21:36:30 +0000 (22:36 +0100)
committerRalph Corderoy <ralph@inputplus.co.uk>
Mon, 1 May 2017 22:13:45 +0000 (23:13 +0100)
sbr/path.c

index 7621aa5..416c32b 100644 (file)
@@ -107,59 +107,60 @@ compath (char *f)
     if (*f != '/')
        return;
 
     if (*f != '/')
        return;
 
-    for (cp = f; *cp;)
-       if (*cp == '/') {
-           switch (*++cp) {
-               case 0: 
-                   if (--cp > f)
-                       *cp = '\0';
-                   break;
-
-               case '/': 
-                   for (dp = cp; *dp == '/'; dp++)
-                       continue;
-                   strcpy (cp--, dp);
-                   continue;
-
-               case '.': 
-                   if (strcmp (cp, DOT) == 0) {
-                       if (cp > f + 1)
-                           cp--;
-                       *cp = '\0';
-                       break;
-                   }
-                   if (strcmp (cp, DOTDOT) == 0) {
-                       for (cp -= 2; cp > f; cp--)
-                           if (*cp == '/')
-                               break;
-                       if (cp <= f)
-                           cp = f + 1;
-                       *cp = '\0';
-                       break;
-                   }
-                   if (has_prefix(cp, PWD)) {
-                       for (dp = cp - 2; dp > f; dp--)
-                           if (*dp == '/')
-                               break;
-                       if (dp <= f)
-                           dp = f;
-                       strcpy (dp, cp + LEN(PWD) - 1);
-                       cp = dp;
-                       continue;
-                   }
-                   if (has_prefix(cp, CWD)) {
-                       strcpy (cp - 1, cp + LEN(CWD) - 1);
-                       cp--;
-                       continue;
-                   }
-                   continue;
-
-               default: 
-                   cp++;
-                   continue;
-           }
-           break;
-       }
-       else
+    for (cp = f; *cp;) {
+       if (*cp != '/') {
            cp++;
            cp++;
+            continue;
+        }
+
+        switch (*++cp) {
+            case 0: 
+                if (--cp > f)
+                    *cp = '\0';
+                return;
+
+            case '/': 
+                for (dp = cp; *dp == '/'; dp++)
+                    continue;
+                strcpy (cp--, dp);
+                continue;
+
+            case '.': 
+                if (strcmp (cp, DOT) == 0) {
+                    if (cp > f + 1)
+                        cp--;
+                    *cp = '\0';
+                    return;
+                }
+                if (strcmp (cp, DOTDOT) == 0) {
+                    for (cp -= 2; cp > f; cp--)
+                        if (*cp == '/')
+                            break;
+                    if (cp <= f)
+                        cp = f + 1;
+                    *cp = '\0';
+                    return;
+                }
+                if (has_prefix(cp, PWD)) {
+                    for (dp = cp - 2; dp > f; dp--)
+                        if (*dp == '/')
+                            break;
+                    if (dp <= f)
+                        dp = f;
+                    strcpy (dp, cp + LEN(PWD) - 1);
+                    cp = dp;
+                    continue;
+                }
+                if (has_prefix(cp, CWD)) {
+                    strcpy (cp - 1, cp + LEN(CWD) - 1);
+                    cp--;
+                    continue;
+                }
+                continue;
+
+            default: 
+                cp++;
+                continue;
+        }
+    }
 }
 }