diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2002-05-24 09:57:33 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2002-05-24 09:57:33 +0000 |
| commit | a7b8b00fd499a4e3a7763a129c6ef1828ddfb4cf (patch) | |
| tree | 6c184a3564854b04042699b51baf4d7b39f91fc7 /firmware/common | |
| parent | 40c6129c91ff8ce398994ab1ee74050d159d59bd (diff) | |
| download | rockbox-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.c | 10 |
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) { |