arfile.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // -*- mode: cpp; mode: fold -*-
  2. // Description /*{{{*/
  3. // $Id: arfile.h,v 1.2 2001/02/20 07:03:16 jgg Exp $
  4. /* ######################################################################
  5. AR File - Handle an 'AR' archive
  6. This is a reader for the usual 4.4 BSD AR format. It allows raw
  7. stream access to a single member at a time. Basically all this class
  8. provides is header parsing and verification. It is up to the client
  9. to correctly make use of the stream start/stop points.
  10. ##################################################################### */
  11. /*}}}*/
  12. #ifndef PKGLIB_ARFILE_H
  13. #define PKGLIB_ARFILE_H
  14. #include <string>
  15. #include <apt-pkg/fileutl.h>
  16. class ARArchive
  17. {
  18. struct MemberHeader;
  19. public:
  20. struct Member;
  21. protected:
  22. // Linked list of members
  23. Member *List;
  24. bool LoadHeaders();
  25. public:
  26. // The stream file
  27. FileFd &File;
  28. // Locate a member by name
  29. const Member *FindMember(const char *Name) const;
  30. ARArchive(FileFd &File);
  31. ~ARArchive();
  32. };
  33. // A member of the archive
  34. struct ARArchive::Member
  35. {
  36. // Fields from the header
  37. string Name;
  38. unsigned long MTime;
  39. unsigned long UID;
  40. unsigned long GID;
  41. unsigned long Mode;
  42. unsigned long Size;
  43. // Location of the data.
  44. unsigned long Start;
  45. Member *Next;
  46. Member() : Start(0), Next(0) {};
  47. };
  48. #endif