summaryrefslogtreecommitdiffstats
path: root/cpukit/libmisc/untar/untar.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2016-11-18 09:10:20 +1100
committerChris Johns <chrisj@rtems.org>2016-11-18 09:10:20 +1100
commit3a30c6fa5c20246bf08c2cf90f498e2f76c9fab2 (patch)
tree6b9f33852bc7aea4afba4f86f2fe5870de3d5b94 /cpukit/libmisc/untar/untar.c
parentbsp/atsamv: Make size of nocache-memory configurable. (diff)
downloadrtems-3a30c6fa5c20246bf08c2cf90f498e2f76c9fab2.tar.bz2
Fix untar mkdir when the directory exists.
Diffstat (limited to '')
-rw-r--r--cpukit/libmisc/untar/untar.c8
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);