summaryrefslogtreecommitdiff
path: root/firmware/common
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
parent40c6129c91ff8ce398994ab1ee74050d159d59bd (diff)
downloadrockbox-a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf.zip
rockbox-a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf.tar.gz
rockbox-a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf.tar.bz2
rockbox-a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf.tar.xz
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')
-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 f7f6171..e1f4c06 100644
--- a/firmware/common/dir.c
+++ b/firmware/common/dir.c
@@ -29,7 +29,9 @@ static bool busy=false;
DIR* opendir(char* name)
{
+ char namecopy[256];
char* part;
+ char* end;
struct fat_direntry entry;
struct fat_dir* dir = &(thedir.fatdir);
@@ -48,9 +50,11 @@ DIR* opendir(char* name)
return NULL;
}
- /* fixme: strtok() is not thread safe, and fat_getnext() calls yield() */
- for ( part = strtok(name, "/"); part;
- part = strtok(NULL, "/")) {
+ strncpy(namecopy,name,sizeof(namecopy));
+ namecopy[sizeof(namecopy)-1] = 0;
+
+ for ( part = strtok_r(namecopy, "/", &end); part;
+ part = strtok_r(NULL, "/", &end)) {
int partlen = strlen(part);
/* scan dir for name */
while (1) {