* apt-inst/database.{cc,h}, apt-inst/deb/dpkgdb.{cc,h}:
[ntk/apt.git] / apt-inst / deb / debfile.h
CommitLineData
b2e465d6
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
3// $Id: debfile.h,v 1.2 2001/02/20 07:03:17 jgg Exp $
4/* ######################################################################
5
6 Debian Archive File (.deb)
7
8 This Class handles all the operations performed directly on .deb
9 files. It makes use of the AR and TAR classes to give the necessary
10 external interface.
11
12 There are only two things that can be done with a raw package,
13 extract it's control information and extract the contents itself.
14
15 This should probably subclass an as-yet unwritten super class to
16 produce a generic archive mechanism.
17
18 The memory control file extractor is useful to extract a single file
19 into memory from the control.tar.gz
20
21 ##################################################################### */
22 /*}}}*/
23#ifndef PKGLIB_DEBFILE_H
24#define PKGLIB_DEBFILE_H
25
b2e465d6
AL
26
27#include <apt-pkg/arfile.h>
b2e465d6
AL
28#include <apt-pkg/dirstream.h>
29#include <apt-pkg/tagfile.h>
472ff00e
DK
30#include <apt-pkg/pkgcache.h>
31
32class FileFd;
b2e465d6
AL
33
34class debDebFile
35{
36 protected:
37
38 FileFd &File;
39 ARArchive AR;
40
41 bool CheckMember(const char *Name);
42
43 public:
b2e465d6
AL
44 class ControlExtract;
45 class MemControlExtract;
9c257550 46
b2e465d6 47 bool ExtractArchive(pkgDirStream &Stream);
b2e465d6
AL
48 const ARArchive::Member *GotoMember(const char *Name);
49 inline FileFd &GetFile() {return File;};
50
51 debDebFile(FileFd &File);
52};
53
54class debDebFile::ControlExtract : public pkgDirStream
55{
56 public:
57
58 virtual bool DoItem(Item &Itm,int &Fd);
59};
60
61class debDebFile::MemControlExtract : public pkgDirStream
62{
63 bool IsControl;
64
65 public:
66
67 char *Control;
68 pkgTagSection Section;
69 unsigned long Length;
8f3ba4e8 70 std::string Member;
b2e465d6
AL
71
72 // Members from DirStream
73 virtual bool DoItem(Item &Itm,int &Fd);
74 virtual bool Process(Item &Itm,const unsigned char *Data,
75 unsigned long Size,unsigned long Pos);
76
77
78 // Helpers
79 bool Read(debDebFile &Deb);
80 bool TakeControl(const void *Data,unsigned long Size);
81
82 MemControlExtract() : IsControl(false), Control(0), Length(0), Member("control") {};
8f3ba4e8 83 MemControlExtract(std::string Member) : IsControl(false), Control(0), Length(0), Member(Member) {};
b2e465d6
AL
84 ~MemControlExtract() {delete [] Control;};
85};
86 /*}}}*/
87
88#endif