bug#41001: mkdir: cannot create directory ‘test’: File exists
On 5/2/20 3:41 PM, Jonny Grant wrote: > Is a more accurate strerror considered unreliable? > > Current: > mkdir: cannot create directory ‘test’: File exists > > Proposed: > mkdir: cannot create directory ‘test’: Is a directory I don't understand this comment. As I understand it you're proposing a change to the mkdir command not a change to the strerror library function, and the change you're proposing would introduce a race condition to the mkdir command. A better fix would be to change the mkdir system call so that it sets errno to EISDIR in this situation. This would fix not only the mkdir utility, but also lots of other programs; and it wouldn't introduce a race condition. So if you're interested in getting the problem fixed, I suggest that you propose such a change to the Linux kernel developers.
bug#41001: mkdir: cannot create directory ‘test’: File exists
On 02/05/2020 20:47, Paul Eggert wrote: On 5/2/20 6:26 AM, Jonny Grant wrote: If developers have race conditions in their shell scripts I've personally fixed a bug in the GNU mkdir command that was triggered by such races. Core utilities should be reliable even when these races are happening. Is a more accurate strerror considered unreliable? Current: mkdir: cannot create directory ‘test’: File exists Proposed: mkdir: cannot create directory ‘test’: Is a directory Cheers, Jonny
bug#41001: mkdir: cannot create directory ‘test’: File exists
On 5/2/20 6:26 AM, Jonny Grant wrote: > If developers have race conditions in their shell scripts I've personally fixed a bug in the GNU mkdir command that was triggered by such races. Core utilities should be reliable even when these races are happening.
bug#41001: mkdir: cannot create directory ‘test’: File exists
On 01/05/2020 21:32, Paul Eggert wrote: On 5/1/20 1:21 PM, Jonny Grant wrote: 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) That would introduce a race condition, and wouldn't behave correctly if some other process changes the destination from a regular file to a directory between the time we call mkdir and the time that we call stat. Paul, If developers have race conditions in their shell scripts - mkdir error string in the message after the colon in the output saying file/directory is the least of the developers' problems. mkdir() returning EEXIST only indicates the pathname exists. Maybe call stat() before calling mkdir() to check nothing there. It's more a question of doing something appropriate. Personally I doubt POSIX will ever be updated to have more errno errors that distinguish between files and directories for ENOENT and EEXIST due to people's fears about compatibility when APIs are updated. Cheers, Jonny