summaryrefslogtreecommitdiff
path: root/firmware/common
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-01-15 14:30:59 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-01-15 14:30:59 +0000
commit60b1c4bbe1099980ced1f69a9a51674f6e05dd3e (patch)
treef09a4c07a72df14c8c217c7457acd66269aa45d3 /firmware/common
parenta73cc6afa2c6f5c244aa1ecc1acfa0f6b6fb6422 (diff)
downloadrockbox-60b1c4bbe1099980ced1f69a9a51674f6e05dd3e.tar.gz
rockbox-60b1c4bbe1099980ced1f69a9a51674f6e05dd3e.zip
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.c52
1 files changed, 52 insertions, 0 deletions
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)
114 114
115 return theent; 115 return theent;
116} 116}
117
118int mkdir(char *name)
119{
120 DIR *dir;
121 char namecopy[MAX_PATH];
122 char* end;
123 char *basename;
124 char *parent;
125 struct dirent *entry;
126 struct fat_dir newdir;
127 int rc;
128
129 if ( name[0] != '/' ) {
130 DEBUGF("Only absolute paths supported right now\n");
131 return -1;
132 }
133
134 strncpy(namecopy,name,sizeof(namecopy));
135 namecopy[sizeof(namecopy)-1] = 0;
136
137 /* Split the base name and the path */
138 end = strrchr(namecopy, '/');
139 *end = 0;
140 basename = end+1;
141
142 if(namecopy == end) /* Root dir? */
143 parent = "/";
144 else
145 parent = namecopy;
146
147 DEBUGF("mkdir: parent: %s, name: %s\n", parent, basename);
148
149 dir = opendir(parent);
150
151 if(!dir) {
152 DEBUGF("mkdir: can't open parent dir\n");
153 return -2;
154 }
155
156 /* Now check if the name already exists */
157 while ((entry = readdir(dir))) {
158 if ( !strcasecmp(basename, entry->d_name) ) {
159 DEBUGF("mkdir error: file exists\n");
160 errno = EEXIST;
161 return - 3;
162 }
163 }
164
165 rc = fat_create_dir(basename, &newdir, &(dir->fatdir));
166
167 return rc;
168}