[BusyBox 0001470]: cp says "cannot remove..." when trying to copy a file to a non-existent directory

bugs at busybox.net bugs at busybox.net
Fri Aug 24 14:22:34 UTC 2007


The following issue has been CLOSED 
====================================================================== 
http://busybox.net/bugs/view.php?id=1470 
====================================================================== 
Reported By:                kiltedknight
Assigned To:                BusyBox
====================================================================== 
Project:                    BusyBox
Issue ID:                   1470
Category:                   Other
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     closed
Resolution:                 open
Fixed in Version:           
====================================================================== 
Date Submitted:             08-23-2007 10:55 PDT
Last Modified:              08-24-2007 07:22 PDT
====================================================================== 
Summary:                    cp says "cannot remove..." when trying to copy a
file to a non-existent directory
Description: 
Run this sequence of commands:

touch /tmp/foo
busybox cp /tmp/foo /tmp/nonexistent/path/foo

This is the error message you get:
cp: cannot remove '/tmp/nonexistent/path/foo': No such file or directory

What Linux's cp will say is:
cp: cannot create regular file `/tmp/nonexistent/path/foo': No such file
or directory

If you have DO_POSIX_CP enabled, you will get:
'/tmp/nonexistent/path/foo' exists

Unless you specify the -f or -i flag, in which case you get the "cannot
remove" message
====================================================================== 

---------------------------------------------------------------------- 
 vda - 08-24-07 07:22  
---------------------------------------------------------------------- 
> This is the error message you get:
> cp: cannot remove '/tmp/nonexistent/path/foo': No such file or
directory

Which is true. cp couldn't create it. cp decided to try unlink,
and creating again. unlink didn't work either. cp lets you know that.

> What Linux's cp will say is:
> cp: cannot create regular file `/tmp/nonexistent/path/foo': No such file
or directory

Read it again.

Do you really think that "I can't create 'foo', it doesn't exist" is
better?
>From naive point of view it is silly too: "of course it doesn't exist
before you create it!"

I undoubtedly can fix bbox cp to match GNU message, but code will be
bigger
and GNU message is still semi-stupid.

For the record: fix should be here:

static int ask_and_unlink(const char *dest, int flags)
{
        ...
        if (unlink(dest) < 0) {

===> if errno == ENOENT or ENOTDIR, explain that *path* is invalid, not
filename <===

                bb_perror_msg("cannot remove '%s'", dest);
                return -1; // error
        }
        return 1; // ok (to try again)
} 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
08-23-07 10:55  kiltedknight   New Issue                                    
08-23-07 10:55  kiltedknight   Status                   new => assigned     
08-23-07 10:55  kiltedknight   Assigned To               => BusyBox         
08-23-07 10:55  kiltedknight   File Added: bb_cp_errmsg_fix.diff                
   
08-23-07 10:55  kiltedknight   Issue Monitored: kiltedknight                    
08-24-07 07:22  vda            Status                   assigned => closed  
08-24-07 07:22  vda            Note Added: 0002681                          
======================================================================




More information about the busybox-cvs mailing list