mirror of
https://github.com/sheumann/hush.git
synced 2024-10-04 21:55:16 +00:00
cp: make POSIX-me-harder mode complain with a bit less insane message
This commit is contained in:
parent
cab774d6e5
commit
3d829627fb
@ -22,25 +22,25 @@
|
|||||||
|
|
||||||
#define DO_POSIX_CP 0 /* 1 - POSIX behavior, 0 - safe behavior */
|
#define DO_POSIX_CP 0 /* 1 - POSIX behavior, 0 - safe behavior */
|
||||||
|
|
||||||
|
// errno must be set to relevant value ("why we cannot create dest?")
|
||||||
|
// for POSIX mode to give reasonable error message
|
||||||
static int ask_and_unlink(const char *dest, int flags)
|
static int ask_and_unlink(const char *dest, int flags)
|
||||||
{
|
{
|
||||||
// If !DO_POSIX_CP, act as if -f is always in effect - we don't want
|
|
||||||
// "'file' exists" msg, we want unlink to be done (silently unless -i
|
|
||||||
// is also in effect).
|
|
||||||
// This prevents safe way from asking more questions than POSIX does.
|
|
||||||
#if DO_POSIX_CP
|
#if DO_POSIX_CP
|
||||||
if (!(flags & (FILEUTILS_FORCE|FILEUTILS_INTERACTIVE))) {
|
if (!(flags & (FILEUTILS_FORCE|FILEUTILS_INTERACTIVE))) {
|
||||||
fprintf(stderr, "'%s' exists\n", dest);
|
// Either it exists, or the *path* doesnt exist
|
||||||
|
bb_perror_msg("cannot create '%s'", dest);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// If !DO_POSIX_CP, act as if -f is always in effect - we don't want
|
||||||
|
// "cannot create" msg, we want unlink to be done (silently unless -i).
|
||||||
|
|
||||||
// TODO: maybe we should do it only if ctty is present?
|
// TODO: maybe we should do it only if ctty is present?
|
||||||
if (flags & FILEUTILS_INTERACTIVE) {
|
if (flags & FILEUTILS_INTERACTIVE) {
|
||||||
// We would not do POSIX insanity. -i asks,
|
// We would not do POSIX insanity. -i asks,
|
||||||
// then _unlinks_ the offender. Presto.
|
// then _unlinks_ the offender. Presto.
|
||||||
// (No opening without O_EXCL, no unlinks only if -f)
|
// (No "opening without O_EXCL", no "unlink only if -f")
|
||||||
// Or else we will end up having 3 open()s!
|
// Or else we will end up having 3 open()s!
|
||||||
fprintf(stderr, "%s: overwrite '%s'? ", applet_name, dest);
|
fprintf(stderr, "%s: overwrite '%s'? ", applet_name, dest);
|
||||||
if (!bb_ask_confirmation())
|
if (!bb_ask_confirmation())
|
||||||
@ -280,6 +280,7 @@ int copy_file(const char *source, const char *dest, int flags)
|
|||||||
) {
|
) {
|
||||||
// We are lazy here, a bit lax with races...
|
// We are lazy here, a bit lax with races...
|
||||||
if (dest_exists) {
|
if (dest_exists) {
|
||||||
|
errno = EEXIST;
|
||||||
ovr = ask_and_unlink(dest, flags);
|
ovr = ask_and_unlink(dest, flags);
|
||||||
if (ovr <= 0)
|
if (ovr <= 0)
|
||||||
return ovr;
|
return ovr;
|
||||||
|
Loading…
Reference in New Issue
Block a user