fs-lsm-parse-bug-20090226
authorPeter Tripician <tripicia@cmf.nrl.navy.mil>
Tue, 17 Feb 2009 03:59:28 +0000 (03:59 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 17 Feb 2009 03:59:28 +0000 (03:59 +0000)
LICENSE IPL10
FIXES 124319

print correct error on root directory

src/venus/fs.c

index 3590530..f59cc57 100644 (file)
@@ -307,12 +307,15 @@ static char *
 Parent(char *apath)
 {
     char *tp;
-    strcpy(tspace, apath);
+    strlcpy(tspace, apath, sizeof(tspace));
     tp = strrchr(tspace, '/');
-    if (tp) {
-       *tp = 0;
-    } else
-       strcpy(tspace, ".");
+    if (tp == (char *)tspace)
+       tp++;
+    else if (tp == (char *)NULL) {
+       tp      = (char *)tspace;
+       *(tp++) = '.';
+    }
+    *tp = '\0';
     return tspace;
 }
 
@@ -1685,7 +1688,11 @@ ListMountCmd(struct cmd_syndesc *as, void *arock)
         * Find rightmost slash, if any.
         */
        last_component = (char *)strrchr(true_name, '/');
-       if (last_component) {
+       if (last_component == (char *)true_name) {
+           strcpy(parent_dir, "/");
+           last_component++;
+       }
+       else if (last_component != (char *)NULL) {
            /*
             * Found it.  Designate everything before it as the parent directory,
             * everything after it as the final component.
@@ -4038,7 +4045,11 @@ FlushMountCmd(struct cmd_syndesc *as, void *arock)
         * Find rightmost slash, if any.
         */
        last_component = (char *)strrchr(true_name, '/');
-       if (last_component) {
+       if (last_component == (char *)true_name) {
+           strcpy(parent_dir, "/");
+           last_component++;
+       }
+       else if (last_component != (char *)NULL) {
            /*
             * Found it.  Designate everything before it as the parent directory,
             * everything after it as the final component.