[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 15:58:07 UTC 2007


The following issue has been REOPENED. 
====================================================================== 
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:                     feedback
====================================================================== 
Date Submitted:             08-23-2007 10:55 PDT
Last Modified:              08-24-2007 08:58 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)
} 

---------------------------------------------------------------------- 
 kiltedknight - 08-24-07 08:58  
---------------------------------------------------------------------- 
I've read it again.  You don't seem to understand...

If the path in which you want to create the file does not exist, you
should never see EEXIST... that implies the file already exists! 

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                          
08-24-07 07:22  vda            Resolution               open => won't fix   
08-24-07 08:58  kiltedknight   Status                   closed => feedback  
08-24-07 08:58  kiltedknight   Resolution               won't fix => reopened
08-24-07 08:58  kiltedknight   Note Added: 0002682                          
======================================================================




More information about the busybox-cvs mailing list