| 1 | // -*- mode: cpp; mode: fold -*- |
| 2 | // Description /*{{{*/ |
| 3 | // $Id: dirstream.h,v 1.2 2001/02/20 07:03:16 jgg Exp $ |
| 4 | /* ###################################################################### |
| 5 | |
| 6 | Directory Stream |
| 7 | |
| 8 | When unpacking the contents of the archive are passed into a directory |
| 9 | stream class for analysis and processing. The class controls all aspects |
| 10 | of actually writing the directory stream from disk. The low level |
| 11 | archive handlers are only responsible for decoding the archive format |
| 12 | and sending events (via method calls) to the specified directory |
| 13 | stream. |
| 14 | |
| 15 | When unpacking a real file the archive handler is passed back a file |
| 16 | handle to write the data to, this is to support strange |
| 17 | archives+unpacking methods. If that fd is -1 then the file data is |
| 18 | simply ignored. |
| 19 | |
| 20 | The provided defaults do the 'Right Thing' for a normal unpacking |
| 21 | process (ie 'tar') |
| 22 | |
| 23 | ##################################################################### */ |
| 24 | /*}}}*/ |
| 25 | #ifndef PKGLIB_DIRSTREAM_H |
| 26 | #define PKGLIB_DIRSTREAM_H |
| 27 | |
| 28 | |
| 29 | class pkgDirStream |
| 30 | { |
| 31 | public: |
| 32 | |
| 33 | // All possible information about a component |
| 34 | struct Item |
| 35 | { |
| 36 | enum Type_t {File, HardLink, SymbolicLink, CharDevice, BlockDevice, |
| 37 | Directory, FIFO} Type; |
| 38 | char *Name; |
| 39 | char *LinkTarget; |
| 40 | unsigned long Mode; |
| 41 | unsigned long UID; |
| 42 | unsigned long GID; |
| 43 | unsigned long Size; |
| 44 | unsigned long MTime; |
| 45 | unsigned long Major; |
| 46 | unsigned long Minor; |
| 47 | }; |
| 48 | |
| 49 | virtual bool DoItem(Item &Itm,int &Fd); |
| 50 | virtual bool Fail(Item &Itm,int Fd); |
| 51 | virtual bool FinishedFile(Item &Itm,int Fd); |
| 52 | virtual bool Process(Item &Itm,const unsigned char *Data, |
| 53 | unsigned long Size,unsigned long Pos) {return true;}; |
| 54 | |
| 55 | virtual ~pkgDirStream() {}; |
| 56 | }; |
| 57 | |
| 58 | #endif |