Clean up a bit and get switch statement out of loop in walk_path()

It's nicer to look at and it obfuscated a bug where it should have
exited the loop instead of the case (you probably wouldn't observe
the effect very often).

Change-Id: I33f3c72c8bb7e11b9d418f66cf84efc3082a37b4
This commit is contained in:
Michael Sevakis 2014-09-02 15:57:18 -04:00
parent 802e0110db
commit 0a66545487

View file

@ -498,17 +498,16 @@ walk_path(struct pathwalk *walkp, struct pathwalk_component *compp,
if (!(compp->attr & ATTR_DIRECTORY)) if (!(compp->attr & ATTR_DIRECTORY))
return -ENOTDIR; return -ENOTDIR;
switch (len) if (len >= MAX_NAME)
{ return -ENAMETOOLONG;
case 1:
case 2:
/* check for "." and ".." */ /* check for "." and ".." */
if (name[0] == '.') if (name[0] == '.')
{ {
if (len == 1) if (len == 1)
break; /* is "." */ continue; /* is "." */
if (name[1] == '.') if (len == 2 && name[1] == '.')
{ {
/* is ".." */ /* is ".." */
struct pathwalk_component *parentp = compp->nextp; struct pathwalk_component *parentp = compp->nextp;
@ -518,15 +517,10 @@ walk_path(struct pathwalk *walkp, struct pathwalk_component *compp,
compp->nextp = freep; compp->nextp = freep;
freep = compp; freep = compp;
compp = parentp; compp = parentp;
break; continue;
} }
} }
/* fallthrough */
default:
if (len >= MAX_NAME)
return -ENAMETOOLONG;
struct pathwalk_component *newp = freep; struct pathwalk_component *newp = freep;
if (!newp) if (!newp)
newp = pathwalk_comp_alloc(compp); newp = pathwalk_comp_alloc(compp);
@ -541,8 +535,7 @@ walk_path(struct pathwalk *walkp, struct pathwalk_component *compp,
rc = open_path_component(walkp, compp, stream); rc = open_path_component(walkp, compp, stream);
if (rc < 0) if (rc < 0)
break; break; /* return info below */
}
} }
return walk_open_info(walkp, compp, rc, stream); return walk_open_info(walkp, compp, rc, stream);