summaryrefslogtreecommitdiffstats
path: root/main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-05-01 13:19:18 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2012-05-01 13:20:56 +0000
commit6f6e2467917a263d14c833e107d2c6786188645a (patch)
tree68a8b21555d29f4078b391c28f7f812a0715a04f /main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch
parentb3656f38b9f336476831cbdb3416b1aa32a6492b (diff)
downloadaports-6f6e2467917a263d14c833e107d2c6786188645a.tar.bz2
aports-6f6e2467917a263d14c833e107d2c6786188645a.tar.xz
main/busybox: unzip: ignore chmod errors
so we can unzip on FAT
Diffstat (limited to 'main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch')
-rw-r--r--main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch b/main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch
new file mode 100644
index 000000000..72518fd51
--- /dev/null
+++ b/main/busybox/0001-unzip-ignore-chmod-errors-so-unzipping-on-FAT-works.patch
@@ -0,0 +1,67 @@
+From 414005993f9b015b5feb28fa8f823112331f89a3 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Tue, 1 May 2012 15:09:28 +0200
+Subject: [PATCH] unzip: ignore chmod errors so unzipping on FAT works
+
+---
+ archival/unzip.c | 4 ++--
+ include/libbb.h | 1 +
+ libbb/make_directory.c | 7 ++++++-
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/archival/unzip.c b/archival/unzip.c
+index 4fa7293..e60bc82 100644
+--- a/archival/unzip.c
++++ b/archival/unzip.c
+@@ -594,8 +594,8 @@ int unzip_main(int argc, char **argv)
+ printf(" creating: %s\n", dst_fn);
+ }
+ unzip_create_leading_dirs(dst_fn);
+- if (bb_make_directory(dst_fn, dir_mode, 0)) {
+- bb_error_msg_and_die("exiting");
++ if (bb_make_directory(dst_fn, dir_mode, FILEUTILS_IGNORE_CHMOD_ERR)) {
++ xfunc_die();
+ }
+ } else {
+ if (!S_ISDIR(stat_buf.st_mode)) {
+diff --git a/include/libbb.h b/include/libbb.h
+index 63d0419..83a1a4d 100644
+--- a/include/libbb.h
++++ b/include/libbb.h
+@@ -331,6 +331,7 @@ enum { /* DO NOT CHANGE THESE VALUES! cp.c, mv.c, install.c depend on them. */
+ FILEUTILS_PRESERVE_SECURITY_CONTEXT = 1 << 9, /* -c */
+ FILEUTILS_SET_SECURITY_CONTEXT = 1 << 10,
+ #endif
++ FILEUTILS_IGNORE_CHMOD_ERR = 1 << 11,
+ };
+ #define FILEUTILS_CP_OPTSTR "pdRfilsLH" IF_SELINUX("c")
+ extern int remove_file(const char *path, int flags) FAST_FUNC;
+diff --git a/libbb/make_directory.c b/libbb/make_directory.c
+index 72303e7..7826b90 100644
+--- a/libbb/make_directory.c
++++ b/libbb/make_directory.c
+@@ -107,6 +107,10 @@ int FAST_FUNC bb_make_directory(char *path, long mode, int flags)
+ * an error. */
+ if ((mode != -1) && (chmod(path, mode) < 0)) {
+ fail_msg = "set permissions of";
++ if (flags & FILEUTILS_IGNORE_CHMOD_ERR) {
++ flags = 0;
++ goto print_err;
++ }
+ break;
+ }
+ goto ret0;
+@@ -116,8 +120,9 @@ int FAST_FUNC bb_make_directory(char *path, long mode, int flags)
+ *s = c;
+ } /* while (1) */
+
+- bb_perror_msg("can't %s directory '%s'", fail_msg, path);
+ flags = -1;
++ print_err:
++ bb_perror_msg("can't %s directory '%s'", fail_msg, path);
+ goto ret;
+ ret0:
+ flags = 0;
+--
+1.7.10
+