(extract_archive): Do not report an error

when hard-linking X to X when X exists.
This commit is contained in:
Paul Eggert
2004-07-10 06:13:28 +00:00
parent ad548198f3
commit 0a3a9744f7

View File

@@ -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)