filter_accept_list_reassign.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* vi: set sw=4 ts=4: */
  2. /*
  3. * Copyright (C) 2002 by Glenn McGrath
  4. *
  5. * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  6. */
  7. #include "libbb.h"
  8. #include "unarchive.h"
  9. /* Built and used only if ENABLE_DPKG || ENABLE_DPKG_DEB */
  10. /*
  11. * Reassign the subarchive metadata parser based on the filename extension
  12. * e.g. if its a .tar.gz modify archive_handle->sub_archive to process a .tar.gz
  13. * or if its a .tar.bz2 make archive_handle->sub_archive handle that
  14. */
  15. char FAST_FUNC filter_accept_list_reassign(archive_handle_t *archive_handle)
  16. {
  17. /* Check the file entry is in the accept list */
  18. if (find_list_entry(archive_handle->accept, archive_handle->file_header->name)) {
  19. const char *name_ptr;
  20. /* Find extension */
  21. name_ptr = strrchr(archive_handle->file_header->name, '.');
  22. if (!name_ptr)
  23. return EXIT_FAILURE;
  24. name_ptr++;
  25. /* Modify the subarchive handler based on the extension */
  26. if (ENABLE_FEATURE_SEAMLESS_GZ
  27. && strcmp(name_ptr, "gz") == 0
  28. ) {
  29. archive_handle->dpkg__action_data_subarchive = get_header_tar_gz;
  30. return EXIT_SUCCESS;
  31. }
  32. if (ENABLE_FEATURE_SEAMLESS_BZ2
  33. && strcmp(name_ptr, "bz2") == 0
  34. ) {
  35. archive_handle->dpkg__action_data_subarchive = get_header_tar_bz2;
  36. return EXIT_SUCCESS;
  37. }
  38. if (ENABLE_FEATURE_SEAMLESS_LZMA
  39. && strcmp(name_ptr, "lzma") == 0
  40. ) {
  41. archive_handle->dpkg__action_data_subarchive = get_header_tar_lzma;
  42. return EXIT_SUCCESS;
  43. }
  44. }
  45. return EXIT_FAILURE;
  46. }