54 lines
1.9 KiB
Diff
54 lines
1.9 KiB
Diff
|
---
|
||
|
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)) {
|