tarfn.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef _TAR_FUNCTION_H_
  2. #define _TAR_FUNCTION_H_
  3. /*
  4. * Functions for extracting tar archives.
  5. * Bruce Perens, April-May 1995
  6. * Copyright © 1995 Bruce Perens
  7. * This is free software under the GNU General Public License.
  8. */
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. #include <sys/types.h>
  12. enum tar_format {
  13. tar_format_old,
  14. tar_format_gnu,
  15. tar_format_ustar,
  16. tar_format_pax,
  17. };
  18. enum TarFileType {
  19. NormalFile0 = '\0', /* For compatibility with decades-old bug */
  20. NormalFile1 = '0',
  21. HardLink = '1',
  22. SymbolicLink = '2',
  23. CharacterDevice = '3',
  24. BlockDevice = '4',
  25. Directory = '5',
  26. FIFO = '6',
  27. GNU_LONGLINK = 'K',
  28. GNU_LONGNAME = 'L'
  29. };
  30. typedef enum TarFileType TarFileType;
  31. struct TarInfo {
  32. enum tar_format format; /* Tar archive format. */
  33. void * UserData; /* User passed this in as argument */
  34. char * Name; /* File name */
  35. mode_t Mode; /* Unix mode, including device bits. */
  36. size_t Size; /* Size of file */
  37. time_t ModTime; /* Last-modified time */
  38. TarFileType Type; /* Regular, Directory, Special, Link */
  39. char * LinkName; /* Name for symbolic and hard links */
  40. dev_t Device; /* Special device for mknod() */
  41. uid_t UserID; /* Numeric UID */
  42. gid_t GroupID; /* Numeric GID */
  43. };
  44. typedef struct TarInfo TarInfo;
  45. typedef int (*TarReadFunction)(void * userData, char * buffer, int length);
  46. typedef int (*TarFunction)(TarInfo * h);
  47. struct TarFunctions {
  48. TarReadFunction Read;
  49. TarFunction ExtractFile;
  50. TarFunction MakeDirectory;
  51. TarFunction MakeHardLink;
  52. TarFunction MakeSymbolicLink;
  53. TarFunction MakeSpecialFile;
  54. };
  55. typedef struct TarFunctions TarFunctions;
  56. extern int TarExtractor(void * userData, const TarFunctions * functions);
  57. #endif