summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2014-09-02 15:57:18 -0400
committerMichael Sevakis <jethead71@rockbox.org>2014-09-02 15:57:18 -0400
commit0a66545487cf2457c6f483c288d02fc23ec705bb (patch)
treefa73ec372a84c4b2ee0449c8fa0dac5691809481
parent802e0110db79473861b2859a5c1c7cc3764d9e5f (diff)
downloadrockbox-0a66545.tar.gz
rockbox-0a66545.tar.bz2
rockbox-0a66545.zip
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
-rw-r--r--firmware/common/file_internal.c69
1 files changed, 31 insertions, 38 deletions
diff --git a/firmware/common/file_internal.c b/firmware/common/file_internal.c
index b66aafd61e..58cb8830d1 100644
--- a/firmware/common/file_internal.c
+++ b/firmware/common/file_internal.c
@@ -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 "." */
-
- 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;
- }
+ /* is ".." */
+ struct pathwalk_component *parentp = compp->nextp;
+ if (!parentp)
+ return WALK_RC_CONT_AT_ROOT;
+
+ 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;
+ struct pathwalk_component *newp = freep;
+ if (!newp)
+ newp = pathwalk_comp_alloc(compp);
+ else
+ freep = freep->nextp;
- newp->nextp = compp;
- compp = newp;
+ newp->nextp = compp;
+ compp = newp;
- compp->name = name;
- compp->length = len;
+ compp->name = name;
+ compp->length = len;
- rc = open_path_component(walkp, compp, stream);
- if (rc < 0)
- break;
- }
+ rc = open_path_component(walkp, compp, stream);
+ if (rc < 0)
+ break; /* return info below */
}
return walk_open_info(walkp, compp, rc, stream);