diff options
Diffstat (limited to 'firmware/common')
-rw-r--r-- | firmware/common/dir.c | 12 | ||||
-rw-r--r-- | firmware/common/file.c | 14 |
2 files changed, 20 insertions, 6 deletions
diff --git a/firmware/common/dir.c b/firmware/common/dir.c index e33bb7fc8f..c3965c2418 100644 --- a/firmware/common/dir.c +++ b/firmware/common/dir.c | |||
@@ -127,9 +127,9 @@ int mkdir(char *name, int mode) | |||
127 | int rc; | 127 | int rc; |
128 | 128 | ||
129 | (void)mode; | 129 | (void)mode; |
130 | 130 | ||
131 | if ( name[0] != '/' ) { | 131 | if ( name[0] != '/' ) { |
132 | DEBUGF("Only absolute paths supported right now\n"); | 132 | DEBUGF("mkdir: Only absolute paths supported right now\n"); |
133 | return -1; | 133 | return -1; |
134 | } | 134 | } |
135 | 135 | ||
@@ -155,13 +155,19 @@ int mkdir(char *name, int mode) | |||
155 | return -2; | 155 | return -2; |
156 | } | 156 | } |
157 | 157 | ||
158 | if(basename[0] == 0) { | ||
159 | DEBUGF("mkdir: Empty dir name\n"); | ||
160 | errno = EINVAL; | ||
161 | return -3; | ||
162 | } | ||
163 | |||
158 | /* Now check if the name already exists */ | 164 | /* Now check if the name already exists */ |
159 | while ((entry = readdir(dir))) { | 165 | while ((entry = readdir(dir))) { |
160 | if ( !strcasecmp(basename, entry->d_name) ) { | 166 | if ( !strcasecmp(basename, entry->d_name) ) { |
161 | DEBUGF("mkdir error: file exists\n"); | 167 | DEBUGF("mkdir error: file exists\n"); |
162 | errno = EEXIST; | 168 | errno = EEXIST; |
163 | closedir(dir); | 169 | closedir(dir); |
164 | return - 3; | 170 | return - 4; |
165 | } | 171 | } |
166 | } | 172 | } |
167 | 173 | ||
diff --git a/firmware/common/file.c b/firmware/common/file.c index f81038fa77..3a91bda876 100644 --- a/firmware/common/file.c +++ b/firmware/common/file.c | |||
@@ -117,6 +117,14 @@ int open(const char* pathname, int flags) | |||
117 | return -4; | 117 | return -4; |
118 | } | 118 | } |
119 | 119 | ||
120 | if(name[0] == 0) { | ||
121 | DEBUGF("Empty file name\n"); | ||
122 | errno = EINVAL; | ||
123 | file->busy = false; | ||
124 | closedir(dir); | ||
125 | return -5; | ||
126 | } | ||
127 | |||
120 | /* scan dir for name */ | 128 | /* scan dir for name */ |
121 | while ((entry = readdir(dir))) { | 129 | while ((entry = readdir(dir))) { |
122 | if ( !strcasecmp(name, entry->d_name) ) { | 130 | if ( !strcasecmp(name, entry->d_name) ) { |
@@ -140,7 +148,7 @@ int open(const char* pathname, int flags) | |||
140 | errno = EIO; | 148 | errno = EIO; |
141 | file->busy = false; | 149 | file->busy = false; |
142 | closedir(dir); | 150 | closedir(dir); |
143 | return rc * 10 - 5; | 151 | return rc * 10 - 6; |
144 | } | 152 | } |
145 | file->size = 0; | 153 | file->size = 0; |
146 | file->attr = 0; | 154 | file->attr = 0; |
@@ -150,7 +158,7 @@ int open(const char* pathname, int flags) | |||
150 | errno = ENOENT; | 158 | errno = ENOENT; |
151 | file->busy = false; | 159 | file->busy = false; |
152 | closedir(dir); | 160 | closedir(dir); |
153 | return -6; | 161 | return -7; |
154 | } | 162 | } |
155 | } | 163 | } |
156 | closedir(dir); | 164 | closedir(dir); |
@@ -161,7 +169,7 @@ int open(const char* pathname, int flags) | |||
161 | if (file->write && (flags & O_APPEND)) { | 169 | if (file->write && (flags & O_APPEND)) { |
162 | rc = lseek(fd,0,SEEK_END); | 170 | rc = lseek(fd,0,SEEK_END); |
163 | if (rc < 0 ) | 171 | if (rc < 0 ) |
164 | return rc * 10 - 7; | 172 | return rc * 10 - 8; |
165 | } | 173 | } |
166 | 174 | ||
167 | return fd; | 175 | return fd; |