summaryrefslogtreecommitdiff
path: root/firmware/common/dir.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-05-24 09:57:33 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-05-24 09:57:33 +0000
commita7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf (patch)
tree6c184a3564854b04042699b51baf4d7b39f91fc7 /firmware/common/dir.c
parent40c6129c91ff8ce398994ab1ee74050d159d59bd (diff)
downloadrockbox-a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf.tar.gz
rockbox-a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf.zip
strtok:ing a copy of the parameter instead
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@687 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common/dir.c')
-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) {