diff options
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.patch | 67 |
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 0000000000..72518fd514 --- /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 + |