]> diplodocus.org Git - nmh/blobdiff - sbr/path.c
Fix invalid pointer arithmetic.
[nmh] / sbr / path.c
index 3038df413f4755c8dbfbdf90f0664ee9c9542dea..9f70bc16af2dc92dae795bbb1a7120e6cf288cb1 100644 (file)
@@ -22,26 +22,31 @@ static char *pwds;
 static char *expath(char *,int);
 static void compath(char *);
 
+
+/* Return value must be free(3)'d. */
 char *
 pluspath(char *name)
 {
        return path(name + 1, *name == '+' ? TFOLDER : TSUBCWF);
 }
 
+
+/* Return value must be free(3)'d. */
 char *
 path(char *name, int flag)
 {
-    char *cp, *ep;
+    char *p, *last;
 
-    if ((cp = expath (name, flag))
-           && (ep = cp + strlen (cp) - 1) > cp
-           && *ep == '/')
-       *ep = '\0';
+    p = expath(name, flag);
+    last = p + strlen(p) - 1;
+    if (last > p && *last == '/')
+       *last = '\0';
 
-    return cp;
+    return p;
 }
 
 
+/* Return value must be free(3)'d. */
 static char *
 expath (char *name, int flag)
 {
@@ -78,9 +83,8 @@ expath (char *name, int flag)
     ep = pwds + strlen (pwds);
     if ((cp = strrchr(pwds, '/')) == NULL)
        cp = ep;
-    else
-       if (cp == pwds)
-           cp++;
+    else if (cp == pwds)
+        cp++;
 
     if (has_prefix(name, CWD))
        name += LEN(CWD);