Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 546294
Collapse All | Expand All

(-)a/src/common.h (+2 lines)
Lines 523-528 void extract_archive (void); Link Here
523
void extract_finish (void);
523
void extract_finish (void);
524
bool rename_directory (char *src, char *dst);
524
bool rename_directory (char *src, char *dst);
525
void remove_delayed_set_stat (const char *fname);
526
525
/* Module delete.c.  */
527
/* Module delete.c.  */
526
void delete_archive_members (void);
528
void delete_archive_members (void);
(-)a/src/extract.c (-5 / +32 lines)
Lines 537-542 repair_delayed_set_stat (char const *dir, Link Here
537
	  quotearg_colon (dir)));
537
	  quotearg_colon (dir)));
538
}
538
}
539
static void
540
free_delayed_set_stat (struct delayed_set_stat *data)
541
{
542
  xheader_xattr_free (data->xattr_map, data->xattr_map_size);
543
  free (data->cntx_name);
544
  free (data->acls_a_ptr);
545
  free (data->acls_d_ptr);
546
  free (data);
547
}
548
549
void
550
remove_delayed_set_stat (const char *fname)
551
{
552
  struct delayed_set_stat *data, *next, *prev = NULL;
553
  for (data = delayed_set_stat_head; data; data = next)
554
    {
555
      next = data->next;
556
      if (strcmp (data->file_name, fname) == 0)
557
	{
558
	  free_delayed_set_stat (data);
559
	  if (prev)
560
	    prev->next = next;
561
	  else
562
	    delayed_set_stat_head = next;
563
	  return;
564
	}
565
      else
566
	prev = data;
567
    }
568
}
569
539
/* After a file/link/directory creation has failed, see if
570
/* After a file/link/directory creation has failed, see if
540
   it's because some required directory was not present, and if so,
571
   it's because some required directory was not present, and if so,
541
   create all required directories.  Return zero if all the required
572
   create all required directories.  Return zero if all the required
Lines 846-856 apply_nonancestor_delayed_set_stat (char const *file_name, bool after_links) Link Here
846
	}
877
	}
847
      delayed_set_stat_head = data->next;
878
      delayed_set_stat_head = data->next;
848
      xheader_xattr_free (data->xattr_map, data->xattr_map_size);
879
      free_delayed_set_stat (data);
849
      free (data->cntx_name);
850
      free (data->acls_a_ptr);
851
      free (data->acls_d_ptr);
852
      free (data);
853
    }
880
    }
854
}
881
}
(-)a/src/misc.c (-1 / +6 lines)
Lines 586-592 safer_rmdir (const char *file_name) Link Here
586
      return -1;
586
      return -1;
587
    }
587
    }
588
  return unlinkat (chdir_fd, file_name, AT_REMOVEDIR);
588
  if (unlinkat (chdir_fd, file_name, AT_REMOVEDIR) == 0)
589
    {
590
      remove_delayed_set_stat (file_name);
591
      return 0;
592
    }
593
  return -1;
589
}
594
}
590
/* Remove FILE_NAME, returning 1 on success.  If FILE_NAME is a directory,
595
/* Remove FILE_NAME, returning 1 on success.  If FILE_NAME is a directory,

Return to bug 546294