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.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.c | 52 |
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 | |||
118 | int 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 | } | ||