-/* This file is part of GNU tar.
+/* This file is part of GNU tar.
Copyright (C) 2009 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
size_t deferred_unlink_delay = 0;
static struct deferred_unlink *
-dunlink_alloc ()
+dunlink_alloc (void)
{
struct deferred_unlink *p;
if (dunlink_avail)
{
if (p->is_dir)
{
- if (rmdir (p->file_name) != 0)
+ if (unlinkat (chdir_fd, p->file_name, AT_REMOVEDIR) != 0)
{
switch (errno)
{
}
else
{
- if (unlink (p->file_name) != 0 && errno != ENOENT)
+ if (unlinkat (chdir_fd, p->file_name, 0) != 0 && errno != ENOENT)
unlink_error (p->file_name);
}
dunlink_reclaim (p);
{
prev = p;
p = next;
- }
+ }
}
if (!dunlink_head)
dunlink_tail = NULL;
if (dunlink_head
&& records_written > dunlink_head->records_written + deferred_unlink_delay)
flush_deferred_unlinks (false);
-
+
p = dunlink_alloc ();
p->next = NULL;
p->file_name = normalize_filename (name);
p->is_dir = is_dir;
p->records_written = records_written;
-
+
if (dunlink_tail)
dunlink_tail->next = p;
else