aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/unzip
diff options
context:
space:
mode:
authorYoshihiro Takahashi <nyan@FreeBSD.org>2021-01-02 01:50:08 +0000
committerYoshihiro Takahashi <nyan@FreeBSD.org>2021-01-02 01:50:08 +0000
commit0cdfa4956424dc816944a84568a4d9900b68f5e3 (patch)
tree117795555560811fa08df012e82120f1466dd3a2 /usr.bin/unzip
parentbfe90bb336ccccded5ce51d72ed01ebfbb447337 (diff)
downloadsrc-0cdfa4956424dc816944a84568a4d9900b68f5e3.tar.gz
src-0cdfa4956424dc816944a84568a4d9900b68f5e3.zip
Diffstat (limited to 'usr.bin/unzip')
-rw-r--r--usr.bin/unzip/unzip.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/usr.bin/unzip/unzip.c b/usr.bin/unzip/unzip.c
index c9e53f27ed74..937176111a02 100644
--- a/usr.bin/unzip/unzip.c
+++ b/usr.bin/unzip/unzip.c
@@ -385,6 +385,13 @@ extract_dir(struct archive *a, struct archive_entry *e, const char *path)
{
int mode;
+ /*
+ * Dropbox likes to create '/' directory entries, just ignore
+ * such junk.
+ */
+ if (*path == '\0')
+ return;
+
mode = archive_entry_mode(e) & 0777;
if (mode == 0)
mode = 0755;
@@ -451,7 +458,7 @@ handle_existing_file(char **path)
free(*path);
*path = NULL;
alen = 0;
- len = getdelim(path, &alen, '\n', stdin);
+ len = getline(path, &alen, stdin);
if ((*path)[len - 1] == '\n')
(*path)[len - 1] = '\0';
return 0;
@@ -601,7 +608,7 @@ recheck:
if (lstat(*path, &sb) == 0) {
if (u_opt || f_opt) {
/* check if up-to-date */
- if ((S_ISREG(sb.st_mode) || S_ISLNK(sb.st_mode)) &&
+ if (S_ISREG(sb.st_mode) &&
(sb.st_mtim.tv_sec > mtime.tv_sec ||
(sb.st_mtim.tv_sec == mtime.tv_sec &&
sb.st_mtim.tv_nsec >= mtime.tv_nsec)))
@@ -916,8 +923,7 @@ unzip(const char *fn)
}
}
- ac(archive_read_close(a));
- (void)archive_read_free(a);
+ ac(archive_read_free(a));
if (t_opt) {
if (error_count > 0) {