summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch53
-rw-r--r--packages/busybox/busybox_1.2.1.bb4
-rw-r--r--packages/busybox/files/install-should-unlink-dest-if-it-exists.patch53
3 files changed, 109 insertions, 1 deletions
diff --git a/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch b/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch
new file mode 100644
index 0000000000..4bec313f0e
--- /dev/null
+++ b/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch
@@ -0,0 +1,53 @@
+---
+ coreutils/install.c | 2 +-
+ include/libbb.h | 3 ++-
+ libbb/copy_file.c | 9 +++++++++
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+Index: busybox-1.2.1/coreutils/install.c
+===================================================================
+--- busybox-1.2.1.orig/coreutils/install.c 2006-10-19 16:33:48.000000000 +0200
++++ busybox-1.2.1/coreutils/install.c 2006-10-19 16:35:58.000000000 +0200
+@@ -59,7 +59,7 @@ int install_main(int argc, char **argv)
+ char *gid_str = "-1";
+ char *uid_str = "-1";
+ char *mode_str = "0755";
+- int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE;
++ int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE | FILEUTILS_NO_TRUNC;
+ int ret = EXIT_SUCCESS, flags, i, isdir;
+
+ #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS
+Index: busybox-1.2.1/include/libbb.h
+===================================================================
+--- busybox-1.2.1.orig/include/libbb.h 2006-10-19 16:24:50.000000000 +0200
++++ busybox-1.2.1/include/libbb.h 2006-10-19 16:32:40.000000000 +0200
+@@ -345,7 +345,8 @@ enum { /* DO NOT CHANGE THESE VALUES! c
+ FILEUTILS_DEREFERENCE = 2,
+ FILEUTILS_RECUR = 4,
+ FILEUTILS_FORCE = 8,
+- FILEUTILS_INTERACTIVE = 16
++ FILEUTILS_INTERACTIVE = 16,
++ FILEUTILS_NO_TRUNC = 32
+ };
+
+ extern const char *bb_applet_name;
+Index: busybox-1.2.1/libbb/copy_file.c
+===================================================================
+--- busybox-1.2.1.orig/libbb/copy_file.c 2006-10-19 16:26:53.000000000 +0200
++++ busybox-1.2.1/libbb/copy_file.c 2006-10-19 16:32:28.000000000 +0200
+@@ -136,6 +136,15 @@ int copy_file(const char *source, const
+ }
+ }
+
++ if (flags & FILEUTILS_NO_TRUNC) {
++ if (unlink(dest) < 0) {
++ bb_perror_msg("unable to remove `%s'", dest);
++ close(src_fd);
++ return -1;
++ }
++ goto dest_removed;
++ }
++
+ dst_fd = open(dest, O_WRONLY|O_TRUNC);
+ if (dst_fd == -1) {
+ if (!(flags & FILEUTILS_FORCE)) {
diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb
index 054649e9df..773c5e1a7e 100644
--- a/packages/busybox/busybox_1.2.1.bb
+++ b/packages/busybox/busybox_1.2.1.bb
@@ -1,11 +1,13 @@
require busybox.inc
-PR = "r13"
+PR = "r14"
SRC_URI += "file://wget-long-options.patch;patch=1 \
file://df_rootfs.patch;patch=1 \
file://defconfig"
+SRC_URI_append_avr32 = " file://install-should-unlink-dest-if-it-exists.patch;patch=1"
+
do_configure () {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe
diff --git a/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch b/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch
new file mode 100644
index 0000000000..4bec313f0e
--- /dev/null
+++ b/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch
@@ -0,0 +1,53 @@
+---
+ coreutils/install.c | 2 +-
+ include/libbb.h | 3 ++-
+ libbb/copy_file.c | 9 +++++++++
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+Index: busybox-1.2.1/coreutils/install.c
+===================================================================
+--- busybox-1.2.1.orig/coreutils/install.c 2006-10-19 16:33:48.000000000 +0200
++++ busybox-1.2.1/coreutils/install.c 2006-10-19 16:35:58.000000000 +0200
+@@ -59,7 +59,7 @@ int install_main(int argc, char **argv)
+ char *gid_str = "-1";
+ char *uid_str = "-1";
+ char *mode_str = "0755";
+- int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE;
++ int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE | FILEUTILS_NO_TRUNC;
+ int ret = EXIT_SUCCESS, flags, i, isdir;
+
+ #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS
+Index: busybox-1.2.1/include/libbb.h
+===================================================================
+--- busybox-1.2.1.orig/include/libbb.h 2006-10-19 16:24:50.000000000 +0200
++++ busybox-1.2.1/include/libbb.h 2006-10-19 16:32:40.000000000 +0200
+@@ -345,7 +345,8 @@ enum { /* DO NOT CHANGE THESE VALUES! c
+ FILEUTILS_DEREFERENCE = 2,
+ FILEUTILS_RECUR = 4,
+ FILEUTILS_FORCE = 8,
+- FILEUTILS_INTERACTIVE = 16
++ FILEUTILS_INTERACTIVE = 16,
++ FILEUTILS_NO_TRUNC = 32
+ };
+
+ extern const char *bb_applet_name;
+Index: busybox-1.2.1/libbb/copy_file.c
+===================================================================
+--- busybox-1.2.1.orig/libbb/copy_file.c 2006-10-19 16:26:53.000000000 +0200
++++ busybox-1.2.1/libbb/copy_file.c 2006-10-19 16:32:28.000000000 +0200
+@@ -136,6 +136,15 @@ int copy_file(const char *source, const
+ }
+ }
+
++ if (flags & FILEUTILS_NO_TRUNC) {
++ if (unlink(dest) < 0) {
++ bb_perror_msg("unable to remove `%s'", dest);
++ close(src_fd);
++ return -1;
++ }
++ goto dest_removed;
++ }
++
+ dst_fd = open(dest, O_WRONLY|O_TRUNC);
+ if (dst_fd == -1) {
+ if (!(flags & FILEUTILS_FORCE)) {