[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#41001: mkdir: cannot create directory ‘test’: File exists
From: |
Jonny Grant |
Subject: |
bug#41001: mkdir: cannot create directory ‘test’: File exists |
Date: |
Fri, 1 May 2020 21:21:42 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 |
On 01/05/2020 19:07, Paul Eggert wrote:
On 5/1/20 9:16 AM, Jonny Grant wrote:
rm: cannot remove 'test': Is a directory
That's because rm used unlink which failed with EISDIR, which is a different
error number.
yes, the fix pretty trivial for mkdir as you highlight EISDIR:
stat(), S_ISDIR(sb.st_mode), and set errno to EISDIR or output
strerror(EISDIR)
$ mkdir test
mkdir: cannot create directory ‘test’: Is a directory
Consider this example:
$ >d # Create an empty regular file.
$ mkdir d
mkdir: cannot create directory ‘d’: File exists
Here the system call mkdir("d", 0777) failed with errno == EEXIST (File exists).
Presumably you wouldn't object to the diagnostic here because d is a regular
file, not a directory. But the mkdir system call fails in exactly the same way
if d is a directory, so the error message is the same in both cases.
Exactly, UNIX didn't create separate errno for files and directories,
it's the same limitation with ENOENT. As a developer, we handle it
ourselves, as it's easy enough to call stat() like other package
maintainers do, as you can see in binutils.
Directories are files, so the error message is correct even if it confused you.
I don't see any portable and efficient way to make the diagnostic less confusing
for you, without also making diagnostic incorrect in some other scenarios (such
as the scenario described above).
Feels like the fix I already proposed does not have any incorrect impact
in the other scenario you describe? Do correct me if I am missing something.
Yes, as a developer I know everything is actually a file, but users
don't. Users will call it a folder, or a directory. I didn't go over
UNIX everything-is-a-file in my bug report because everyone here knows
already.
This one is an simple fix, but it's clear no one wants to introduce the
change, no worries.
Cheers, Jonny
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/01
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Eric Blake, 2020/05/01
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/01
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Paul Eggert, 2020/05/01
- bug#41001: mkdir: cannot create directory ‘test’: File exists,
Jonny Grant <=
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Paul Eggert, 2020/05/01
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/02
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Paul Eggert, 2020/05/02
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/02
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Paul Eggert, 2020/05/02
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/03
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Bob Proulx, 2020/05/04
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/05
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Eric Blake, 2020/05/05
- bug#41001: mkdir: cannot create directory ‘test’: File exists, Jonny Grant, 2020/05/07