--- 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)) {