summaryrefslogtreecommitdiff
path: root/firmware/common
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2014-09-01 00:00:19 -0400
committerMichael Sevakis <jethead71@rockbox.org>2014-09-01 00:00:19 -0400
commit802e0110db79473861b2859a5c1c7cc3764d9e5f (patch)
treeb1488100f2628f8d1a74d3bc83ea018b1071bae9 /firmware/common
parent5b08f1a5b99136ef052b6f430b62bc618cd44946 (diff)
downloadrockbox-802e0110db79473861b2859a5c1c7cc3764d9e5f.tar.gz
rockbox-802e0110db79473861b2859a5c1c7cc3764d9e5f.zip
Fix a small late creep-in goof in path parsing on native targets
Anything of one dot and one character (e.g. ".a") would get treated as "." because I left out a condition when converting to recursionless parsing of relative components. Git 'er fixed up. Change-Id: Id5603ce0858b419dc08b1d496b4b187a573595f9
Diffstat (limited to 'firmware/common')
-rw-r--r--firmware/common/file_internal.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/firmware/common/file_internal.c b/firmware/common/file_internal.c
index e5b43cd19d..b66aafd61e 100644
--- a/firmware/common/file_internal.c
+++ b/firmware/common/file_internal.c
@@ -505,8 +505,12 @@ walk_path(struct pathwalk *walkp, struct pathwalk_component *compp,
505 /* check for "." and ".." */ 505 /* check for "." and ".." */
506 if (name[0] == '.') 506 if (name[0] == '.')
507 { 507 {
508 if (len == 2 && name[1] == '.') 508 if (len == 1)
509 break; /* is "." */
510
511 if (name[1] == '.')
509 { 512 {
513 /* is ".." */
510 struct pathwalk_component *parentp = compp->nextp; 514 struct pathwalk_component *parentp = compp->nextp;
511 if (!parentp) 515 if (!parentp)
512 return WALK_RC_CONT_AT_ROOT; 516 return WALK_RC_CONT_AT_ROOT;
@@ -514,9 +518,8 @@ walk_path(struct pathwalk *walkp, struct pathwalk_component *compp,
514 compp->nextp = freep; 518 compp->nextp = freep;
515 freep = compp; 519 freep = compp;
516 compp = parentp; 520 compp = parentp;
521 break;
517 } 522 }
518
519 break;
520 } 523 }
521 524
522 /* fallthrough */ 525 /* fallthrough */