- )) {
- register struct link *lp;
-
- /* First quick and dirty. Hashing, etc later FIXME */
- for (lp = linklist; lp; lp = lp->next) {
- if (lp->ino == hstat.st_ino &&
- lp->dev == hstat.st_dev) {
- char *link_name = lp->name;
-
- /* We found a link. */
- hstat.st_size = 0;
- header = start_header(p, &hstat);
- if (header == NULL)
- {
- critical_error = 1;
- goto badfile;
- }
- while(!f_absolute_paths && *link_name == '/') {
- static int link_warn = 0;
-
- if (!link_warn) {
- msg("Removing leading / from absolute links");
- link_warn++;
- }
- link_name++;
- }
- strncpy(header->header.linkname,
- link_name,NAMSIZ);
- if(header->header.linkname[NAMSIZ-1]) {
- char *mangled;
- extern char *find_mangled();
-
- mangled=find_mangled(link_name);
- msg("%s: link name too long: mangled to %s",link_name,mangled);
- strncpy(header->header.linkname,mangled,NAMSIZ);
- }
- header->header.linkflag = LF_LINK;
- finish_header(header);
- /* FIXME: Maybe remove from list after all links found? */
- if (f_remove_files)
- {
- if (unlink (p) == -1)
- msg_perror ("cannot remove %s", p);
- }
- return; /* We dumped it */
- }
- }