aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-12-04 22:26:30 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-12-04 22:26:30 +0000
commit6f9b45b9eff22c664b93ace82d20669340a762f8 (patch)
tree09c96027e71cf06dcaa70859c4b6c39f70b1d459
parent350d26bbbb127284cefb877b8380049e65665b15 (diff)
downloadbusybox-w32-6f9b45b9eff22c664b93ace82d20669340a762f8.tar.gz
busybox-w32-6f9b45b9eff22c664b93ace82d20669340a762f8.tar.bz2
busybox-w32-6f9b45b9eff22c664b93ace82d20669340a762f8.zip
Unlink before mkdir, mknod, symlink to overwrite
-rw-r--r--archival/libunarchive/data_extract_all.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c
index dda514771..7ab87e73e 100644
--- a/archival/libunarchive/data_extract_all.c
+++ b/archival/libunarchive/data_extract_all.c
@@ -60,6 +60,7 @@ extern void data_extract_all(archive_handle_t *archive_handle)
60 break; 60 break;
61 } 61 }
62 case S_IFDIR: 62 case S_IFDIR:
63 unlink(file_header->name);
63 res = mkdir(file_header->name, file_header->mode); 64 res = mkdir(file_header->name, file_header->mode);
64 if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) { 65 if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
65 perror_msg("extract_archive: %s", file_header->name); 66 perror_msg("extract_archive: %s", file_header->name);
@@ -67,6 +68,7 @@ extern void data_extract_all(archive_handle_t *archive_handle)
67 break; 68 break;
68 case S_IFLNK: 69 case S_IFLNK:
69 /* Symlink */ 70 /* Symlink */
71 unlink(file_header->name);
70 res = symlink(file_header->link_name, file_header->name); 72 res = symlink(file_header->link_name, file_header->name);
71 if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) { 73 if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
72 perror_msg("Cannot create symlink from %s to '%s'", file_header->name, file_header->link_name); 74 perror_msg("Cannot create symlink from %s to '%s'", file_header->name, file_header->link_name);
@@ -76,6 +78,7 @@ extern void data_extract_all(archive_handle_t *archive_handle)
76 case S_IFBLK: 78 case S_IFBLK:
77 case S_IFCHR: 79 case S_IFCHR:
78 case S_IFIFO: 80 case S_IFIFO:
81 unlink(file_header->name);
79 res = mknod(file_header->name, file_header->mode, file_header->device); 82 res = mknod(file_header->name, file_header->mode, file_header->device);
80 if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) { 83 if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
81 perror_msg("Cannot create node %s", file_header->name); 84 perror_msg("Cannot create node %s", file_header->name);