From 0a66545487cf2457c6f483c288d02fc23ec705bb Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Tue, 2 Sep 2014 15:57:18 -0400 Subject: 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 --- firmware/common/file_internal.c | 69 ++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 38 deletions(-) (limited to 'firmware/common/file_internal.c') 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); -- cgit v1.2.3