diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2004-01-15 14:30:59 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2004-01-15 14:30:59 +0000 |
| commit | 60b1c4bbe1099980ced1f69a9a51674f6e05dd3e (patch) | |
| tree | f09a4c07a72df14c8c217c7457acd66269aa45d3 /firmware/common | |
| parent | a73cc6afa2c6f5c244aa1ecc1acfa0f6b6fb6422 (diff) | |
| download | rockbox-60b1c4bbe1099980ced1f69a9a51674f6e05dd3e.zip rockbox-60b1c4bbe1099980ced1f69a9a51674f6e05dd3e.tar.gz rockbox-60b1c4bbe1099980ced1f69a9a51674f6e05dd3e.tar.bz2 rockbox-60b1c4bbe1099980ced1f69a9a51674f6e05dd3e.tar.xz | |
Implemented the mkdir() function in the FAT32 driver
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4238 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common')
| -rw-r--r-- | firmware/common/dir.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/firmware/common/dir.c b/firmware/common/dir.c index 61c3ccb..98adc5c 100644 --- a/firmware/common/dir.c +++ b/firmware/common/dir.c @@ -114,3 +114,55 @@ struct dirent* readdir(DIR* dir) return theent; } + +int mkdir(char *name) +{ + DIR *dir; + char namecopy[MAX_PATH]; + char* end; + char *basename; + char *parent; + struct dirent *entry; + struct fat_dir newdir; + int rc; + + if ( name[0] != '/' ) { + DEBUGF("Only absolute paths supported right now\n"); + return -1; + } + + strncpy(namecopy,name,sizeof(namecopy)); + namecopy[sizeof(namecopy)-1] = 0; + + /* Split the base name and the path */ + end = strrchr(namecopy, '/'); + *end = 0; + basename = end+1; + + if(namecopy == end) /* Root dir? */ + parent = "/"; + else + parent = namecopy; + + DEBUGF("mkdir: parent: %s, name: %s\n", parent, basename); + + dir = opendir(parent); + + if(!dir) { + DEBUGF("mkdir: can't open parent dir\n"); + return -2; + } + + /* Now check if the name already exists */ + while ((entry = readdir(dir))) { + if ( !strcasecmp(basename, entry->d_name) ) { + DEBUGF("mkdir error: file exists\n"); + errno = EEXIST; + return - 3; + } + } + + rc = fat_create_dir(basename, &newdir, &(dir->fatdir)); + + return rc; +} |