summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/imfs
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/imfs')
-rw-r--r--cpukit/libfs/src/imfs/imfs_load_tar.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_load_tar.c b/cpukit/libfs/src/imfs/imfs_load_tar.c
index 7228978094..adc91dd054 100644
--- a/cpukit/libfs/src/imfs/imfs_load_tar.c
+++ b/cpukit/libfs/src/imfs/imfs_load_tar.c
@@ -103,8 +103,24 @@ int rtems_tarfs_load(
strcat(full_filename, "/");
++len;
strncat(full_filename, filename, 256-len-1);
- rv = mkdir(full_filename, S_IRWXU | S_IRWXG | S_IRWXO);
+ if ( mkdir(full_filename, S_IRWXU | S_IRWXG | S_IRWXO) != 0 ) {
+ if (errno == EEXIST) {
+ struct stat stat_buf;
+ if ( stat(full_filename, &stat_buf) == 0 ) {
+ if ( S_ISDIR(stat_buf.st_mode) ) {
+ continue;
+ } else {
+ if ( unlink(full_filename) != -1 ) {
+ if ( mkdir(full_filename, S_IRWXU | S_IRWXG | S_IRWXO) == 0 )
+ continue;
+ }
+ }
+ }
+ }
+ rv = -1;
+ }
}
+
/*
* Create a LINEAR_FILE node
*/