diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/copy_file.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libbb/copy_file.c b/libbb/copy_file.c index a4be875d2..23bcf2e82 100644 --- a/libbb/copy_file.c +++ b/libbb/copy_file.c | |||
@@ -64,6 +64,11 @@ static int ask_and_unlink(const char *dest, int flags) | |||
64 | bb_perror_msg("can't create '%s'", dest); | 64 | bb_perror_msg("can't create '%s'", dest); |
65 | return -1; /* error */ | 65 | return -1; /* error */ |
66 | } | 66 | } |
67 | #if ENABLE_FEATURE_CP_LONG_OPTIONS | ||
68 | if (flags & FILEUTILS_RMDEST) | ||
69 | if (flags & FILEUTILS_VERBOSE) | ||
70 | printf("removed '%s'\n", dest); | ||
71 | #endif | ||
67 | return 1; /* ok (to try again) */ | 72 | return 1; /* ok (to try again) */ |
68 | } | 73 | } |
69 | 74 | ||
@@ -210,6 +215,22 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) | |||
210 | goto preserve_mode_ugid_time; | 215 | goto preserve_mode_ugid_time; |
211 | } | 216 | } |
212 | 217 | ||
218 | if (dest_exists) { | ||
219 | if (flags & FILEUTILS_UPDATE) { | ||
220 | if (source_stat.st_mtime <= dest_stat.st_mtime) { | ||
221 | return 0; /* source file must be newer */ | ||
222 | } | ||
223 | } | ||
224 | #if ENABLE_FEATURE_CP_LONG_OPTIONS | ||
225 | if (flags & FILEUTILS_RMDEST) { | ||
226 | ovr = ask_and_unlink(dest, flags); | ||
227 | if (ovr <= 0) | ||
228 | return ovr; | ||
229 | dest_exists = 0; | ||
230 | } | ||
231 | #endif | ||
232 | } | ||
233 | |||
213 | if (flags & (FILEUTILS_MAKE_SOFTLINK|FILEUTILS_MAKE_HARDLINK)) { | 234 | if (flags & (FILEUTILS_MAKE_SOFTLINK|FILEUTILS_MAKE_HARDLINK)) { |
214 | int (*lf)(const char *oldpath, const char *newpath); | 235 | int (*lf)(const char *oldpath, const char *newpath); |
215 | make_links: | 236 | make_links: |