diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2014-09-02 15:57:18 -0400 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2014-09-02 15:57:18 -0400 |
commit | 0a66545487cf2457c6f483c288d02fc23ec705bb (patch) | |
tree | fa73ec372a84c4b2ee0449c8fa0dac5691809481 /firmware | |
parent | 802e0110db79473861b2859a5c1c7cc3764d9e5f (diff) |
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
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/common/file_internal.c | 69 |
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); |