From 60b1c4bbe1099980ced1f69a9a51674f6e05dd3e Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Thu, 15 Jan 2004 14:30:59 +0000 Subject: Implemented the mkdir() function in the FAT32 driver git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4238 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/dir.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'firmware/common') diff --git a/firmware/common/dir.c b/firmware/common/dir.c index 61c3ccbf90..98adc5c730 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; +} -- cgit v1.2.3