(extract_archive): Do not report an error
when hard-linking X to X when X exists.
This commit is contained in:
@@ -925,11 +925,12 @@ extract_archive (void)
|
||||
/* MSDOS does not implement links. However, djgpp's link() actually
|
||||
copies the file. */
|
||||
status = link (link_name, file_name);
|
||||
e = errno;
|
||||
|
||||
if (status == 0)
|
||||
{
|
||||
struct delayed_symlink *ds = delayed_symlink_head;
|
||||
if (ds && stat (link_name, &st1) == 0)
|
||||
if (ds && lstat (link_name, &st1) == 0)
|
||||
for (; ds; ds = ds->next)
|
||||
if (ds->dev == st1.st_dev
|
||||
&& ds->ino == st1.st_ino
|
||||
@@ -945,17 +946,20 @@ extract_archive (void)
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ((e == EEXIST && strcmp (link_name, file_name) == 0)
|
||||
|| (lstat (link_name, &st1) == 0
|
||||
&& lstat (file_name, &st2) == 0
|
||||
&& st1.st_dev == st2.st_dev
|
||||
&& st1.st_ino == st2.st_ino))
|
||||
break;
|
||||
|
||||
errno = e;
|
||||
if (maybe_recoverable (file_name, &interdir_made))
|
||||
goto again_link;
|
||||
|
||||
if (incremental_option && errno == EEXIST)
|
||||
break;
|
||||
e = errno;
|
||||
if (stat (link_name, &st1) == 0
|
||||
&& stat (file_name, &st2) == 0
|
||||
&& st1.st_dev == st2.st_dev
|
||||
&& st1.st_ino == st2.st_ino)
|
||||
break;
|
||||
|
||||
link_error (link_name, file_name);
|
||||
if (backup_option)
|
||||
|
||||
Reference in New Issue
Block a user