summaryrefslogtreecommitdiff
path: root/firmware/common
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common')
-rw-r--r--firmware/common/dir.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/firmware/common/dir.c b/firmware/common/dir.c
index f7f61719a2..e1f4c064a0 100644
--- a/firmware/common/dir.c
+++ b/firmware/common/dir.c
@@ -29,7 +29,9 @@ static bool busy=false;
29 29
30DIR* opendir(char* name) 30DIR* opendir(char* name)
31{ 31{
32 char namecopy[256];
32 char* part; 33 char* part;
34 char* end;
33 struct fat_direntry entry; 35 struct fat_direntry entry;
34 struct fat_dir* dir = &(thedir.fatdir); 36 struct fat_dir* dir = &(thedir.fatdir);
35 37
@@ -48,9 +50,11 @@ DIR* opendir(char* name)
48 return NULL; 50 return NULL;
49 } 51 }
50 52
51 /* fixme: strtok() is not thread safe, and fat_getnext() calls yield() */ 53 strncpy(namecopy,name,sizeof(namecopy));
52 for ( part = strtok(name, "/"); part; 54 namecopy[sizeof(namecopy)-1] = 0;
53 part = strtok(NULL, "/")) { 55
56 for ( part = strtok_r(namecopy, "/", &end); part;
57 part = strtok_r(NULL, "/", &end)) {
54 int partlen = strlen(part); 58 int partlen = strlen(part);
55 /* scan dir for name */ 59 /* scan dir for name */
56 while (1) { 60 while (1) {