X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fcreate.c;h=245b6c3a88254d7c265b4e26d8f77b922623b4ce;hb=f74cab3a936190a65d57c82fea5b1a05affee60a;hp=a925160e1be90c5b5b0cab7cc301a3ec3e7135fc;hpb=b4ec8aedf9c8948bee9bf1635132a7da7a522611;p=chaz%2Ftar diff --git a/src/create.c b/src/create.c index a925160..245b6c3 100644 --- a/src/create.c +++ b/src/create.c @@ -1427,19 +1427,26 @@ file_count_links (struct tar_stat_info *st) if (st->stat.st_nlink > 1) { struct link *duplicate; - struct link *lp = xmalloc (offsetof (struct link, name) - + strlen (st->orig_file_name) + 1); + char *linkname = NULL; + struct link *lp; + + assign_string (&linkname, st->orig_file_name); + transform_name (&linkname, XFORM_LINK); + + lp = xmalloc (offsetof (struct link, name) + + strlen (linkname) + 1); lp->ino = st->stat.st_ino; lp->dev = st->stat.st_dev; lp->nlink = st->stat.st_nlink; - strcpy (lp->name, st->orig_file_name); - + strcpy (lp->name, linkname); + free (linkname); + if (! ((link_table || (link_table = hash_initialize (0, 0, hash_link, compare_links, 0))) && (duplicate = hash_insert (link_table, lp)))) xalloc_die (); - + if (duplicate != lp) abort (); lp->nlink--;