mirror of
git://git.sv.gnu.org/coreutils
synced 2026-05-06 07:06:38 -04:00
mktemp: prefer rmdir and unlink to remove
This avoids the following behavior:
$ strace -e silence=exit -e trace=unlink,rmdir \
mktemp -d > /dev/full
unlink("/tmp/tmp.ZBuPmS9ZGD") = -1 EISDIR (Is a directory)
rmdir("/tmp/tmp.ZBuPmS9ZGD") = 0
mktemp: write error: No space left on device
In the above invocation we know that we created a directory, so we
should not remove a regular file that must have been created by another
process:
$ strace -e silence=exit -e trace=unlink,rmdir \
./src/mktemp -d > /dev/full
rmdir("/tmp/tmp.hGbME1HmJr") = 0
mktemp: write error: No space left on device
* src/mktemp.c (main): Prefer rmdir and unlink depending on whether we
created a directory or regular file.
* bootstrap.conf (gnulib_modules): Remove the remove module.
This commit is contained in:
@@ -248,7 +248,6 @@ gnulib_modules="
|
||||
readtokens0
|
||||
readutmp
|
||||
regex
|
||||
remove
|
||||
renameat
|
||||
renameatu
|
||||
rmdir
|
||||
|
||||
+1
-1
@@ -347,7 +347,7 @@ main (int argc, char **argv)
|
||||
if (!dry_run && ((stdout_closed = true), close_stream (stdout) != 0))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
remove (dest_name);
|
||||
(create_directory ? rmdir : unlink) (dest_name);
|
||||
if (!suppress_file_err)
|
||||
error (0, saved_errno, _("write error"));
|
||||
status = EXIT_FAILURE;
|
||||
|
||||
Reference in New Issue
Block a user