diff options
author | Chris Johns <chrisj@rtems.org> | 2016-11-18 09:10:20 +1100 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2016-11-18 09:10:20 +1100 |
commit | 3a30c6fa5c20246bf08c2cf90f498e2f76c9fab2 (patch) | |
tree | 6b9f33852bc7aea4afba4f86f2fe5870de3d5b94 /cpukit/libmisc/untar/untar.c | |
parent | bsp/atsamv: Make size of nocache-memory configurable. (diff) | |
download | rtems-3a30c6fa5c20246bf08c2cf90f498e2f76c9fab2.tar.bz2 |
Fix untar mkdir when the directory exists.
Diffstat (limited to '')
-rw-r--r-- | cpukit/libmisc/untar/untar.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/cpukit/libmisc/untar/untar.c b/cpukit/libmisc/untar/untar.c index ecf1877a24..13d8c36185 100644 --- a/cpukit/libmisc/untar/untar.c +++ b/cpukit/libmisc/untar/untar.c @@ -189,7 +189,7 @@ Make_Path(const rtems_printer *printer, const char* filename, bool end_is_dir) if (!path_end) { r = mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO); if (r < 0) { - Print_Error(printer, "mkdir", path); + Print_Error(printer, "mkdir (unlink)", path); free(copy); return -1; } @@ -310,7 +310,7 @@ Untar_ProcessHeader( } } else if (*linkflag == DIRTYPE) { int r; - rtems_printf(printer, "untar: dir: %s\n", fname); + rtems_printf(printer, "untar: dir: %s\n", fname); if (Make_Path(printer, fname, true) < 0) { retval = UNTAR_FAIL; } @@ -319,7 +319,9 @@ Untar_ProcessHeader( if (errno == EEXIST) { struct stat stat_buf; if (stat(fname, &stat_buf) == 0) { - if (!S_ISDIR(stat_buf.st_mode)) { + if (S_ISDIR(stat_buf.st_mode)) { + r = 0; + } else { r = unlink(fname); if (r == 0) { r = mkdir(fname, *mode); |