mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 10:07:38 -04:00
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:
parent
802e0110db
commit
0a66545487
1 changed files with 33 additions and 40 deletions
|
@ -498,51 +498,44 @@ walk_path(struct pathwalk *walkp, struct pathwalk_component *compp,
|
|||
if (!(compp->attr & ATTR_DIRECTORY))
|
||||
return -ENOTDIR;
|
||||
|
||||
switch (len)
|
||||
if (len >= MAX_NAME)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
/* check for "." and ".." */
|
||||
if (name[0] == '.')
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
/* check for "." and ".." */
|
||||
if (name[0] == '.')
|
||||
if (len == 1)
|
||||
continue; /* is "." */
|
||||
|
||||
if (len == 2 && name[1] == '.')
|
||||
{
|
||||
if (len == 1)
|
||||
break; /* is "." */
|
||||
/* is ".." */
|
||||
struct pathwalk_component *parentp = compp->nextp;
|
||||
if (!parentp)
|
||||
return WALK_RC_CONT_AT_ROOT;
|
||||
|
||||
if (name[1] == '.')
|
||||
{
|
||||
/* is ".." */
|
||||
struct pathwalk_component *parentp = compp->nextp;
|
||||
if (!parentp)
|
||||
return WALK_RC_CONT_AT_ROOT;
|
||||
|
||||
compp->nextp = freep;
|
||||
freep = compp;
|
||||
compp = parentp;
|
||||
break;
|
||||
}
|
||||
compp->nextp = freep;
|
||||
freep = compp;
|
||||
compp = parentp;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* fallthrough */
|
||||
default:
|
||||
if (len >= MAX_NAME)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
struct pathwalk_component *newp = freep;
|
||||
if (!newp)
|
||||
newp = pathwalk_comp_alloc(compp);
|
||||
else
|
||||
freep = freep->nextp;
|
||||
|
||||
newp->nextp = compp;
|
||||
compp = newp;
|
||||
|
||||
compp->name = name;
|
||||
compp->length = len;
|
||||
|
||||
rc = open_path_component(walkp, compp, stream);
|
||||
if (rc < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
struct pathwalk_component *newp = freep;
|
||||
if (!newp)
|
||||
newp = pathwalk_comp_alloc(compp);
|
||||
else
|
||||
freep = freep->nextp;
|
||||
|
||||
newp->nextp = compp;
|
||||
compp = newp;
|
||||
|
||||
compp->name = name;
|
||||
compp->length = len;
|
||||
|
||||
rc = open_path_component(walkp, compp, stream);
|
||||
if (rc < 0)
|
||||
break; /* return info below */
|
||||
}
|
||||
|
||||
return walk_open_info(walkp, compp, rc, stream);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue