Canorus  0.0
tar.h
Go to the documentation of this file.
1 
8 #ifndef TAR_H_
9 #define TAR_H_
10 
11 #include <QString>
12 #include <QByteArray>
13 #include <QFile>
14 #include <QHash>
15 #include <memory>
16 using std::unique_ptr;
17 
18 class QIODevice;
19 
20 typedef unique_ptr<QIODevice> CAIOPtr;
21 
22 class CATar
23 {
24 public:
25  CATar();
26  CATar(QIODevice&);
27  virtual ~CATar();
28  bool addFile(const QString& filename, QIODevice& data, bool replace = true);
29  bool addFile(const QString& filename, QByteArray data, bool replace = true);
30  void removeFile(const QString& filename);
31  inline bool contains(const QString& filename);
32  CAIOPtr file(const QString& filename);
33  qint64 write(QIODevice& dest, qint64 chunk);
34  qint64 write(QIODevice& dest);
35  inline bool open(QIODevice& dest) { if(_pos.contains(&dest)) { return false; } _pos[&dest].pos = _pos[&dest].file = _pos[&dest].eof = 0; return true; }
36  inline void close(QIODevice& dest) { _pos.remove(&dest); }
37  bool eof(QIODevice& dest);
38  inline bool error() { return !_ok; }
39 protected:
40  static const int CHUNK;
41  typedef struct { /* size in bytes (ASCII) */
42  char name[101]; /* 100 */
43  quint32 mode; /* 8 */
44  quint32 uid; /* 8 */
45  quint32 gid; /* 8 */
46  quint64 size; /* 12 */
47  quint64 mtime; /* 12 */
48  quint32 chksum; /* 8 */
49  char typeflag; /* 1 */
50  char linkname[101]; /* 100 */
51  /* magic "ustar\0" */ /* 6 */
52  /* version "00" */ /* 2 */
53  char uname[33]; /* 32 */
54  char gname[33]; /* 32 */
55  // NULs /* 16 */
56  char prefix[156]; /* 155 */
57  // NULs /* 12 */
58  } CATarHeader;
59  typedef struct {
61  QFile* data;
62  } CATarFile;
63  QList<CATarFile*> _files;
64  void parse(QIODevice& data);
65  bool _ok;
66  typedef struct {
67  qint64 pos;
68  qint32 file;
69  bool close;
70  bool eof;
71  } CATarBufInfo;
72  QHash<QIODevice*, CATarBufInfo> _pos;
73  // helper functions
74  char *bufncpy(char*, const char*, size_t, int = -1);
75  char *bufncpyi(char*&, const char*, size_t, int = -1);
76  char *numToOct(char*, qint64, int);
77  char *numToOcti(char*&, qint64, int);
78  void writeHeader(QIODevice& dest, int file);
79 };
80 
81 #endif /* TAR_H_ */
CATar::CATarHeader::mode
quint32 mode
Definition: tar.h:43
CATar::CHUNK
static const int CHUNK
Definition: tar.h:40
CATar::CATarHeader::name
char name[101]
Definition: tar.h:42
CATar::CATarHeader::uname
char uname[33]
Definition: tar.h:53
CATar::CATarHeader::linkname
char linkname[101]
Definition: tar.h:50
CATar::open
bool open(QIODevice &dest)
Definition: tar.h:35
CATar::eof
bool eof(QIODevice &dest)
Definition: tar.cpp:405
tar.h
CATar::CATarBufInfo::eof
bool eof
Definition: tar.h:70
CATar::parse
void parse(QIODevice &data)
Definition: tar.cpp:68
CATar::removeFile
void removeFile(const QString &filename)
Definition: tar.cpp:233
CATar::numToOcti
char * numToOcti(char *&, qint64, int)
Definition: tar.cpp:467
CATar::_ok
bool _ok
Definition: tar.h:65
CATar::CATarFile::hdr
CATarHeader hdr
Definition: tar.h:60
CATar::CATarHeader::gid
quint32 gid
Definition: tar.h:45
CATar::close
void close(QIODevice &dest)
Definition: tar.h:36
CATar::CATarBufInfo
Definition: tar.h:66
CATar::CATarHeader::typeflag
char typeflag
Definition: tar.h:49
CATar::CATarHeader::prefix
char prefix[156]
Definition: tar.h:56
CATar::bufncpyi
char * bufncpyi(char *&, const char *, size_t, int=-1)
Definition: tar.cpp:437
CATar::CATarBufInfo::file
qint32 file
Definition: tar.h:68
CATar::CATarHeader::mtime
quint64 mtime
Definition: tar.h:47
CATar::CATarHeader
Definition: tar.h:41
CATar
Class for the manipulation of tar files.
Definition: tar.h:23
NULL
#define NULL
Definition: glib.h:121
CATar::CATarHeader::size
quint64 size
Definition: tar.h:46
CATar::contains
bool contains(const QString &filename)
Definition: tar.cpp:154
CATar::writeHeader
void writeHeader(QIODevice &dest, int file)
Definition: tar.cpp:267
CATar::bufncpy
char * bufncpy(char *, const char *, size_t, int=-1)
Definition: tar.cpp:425
CATar::_pos
QHash< QIODevice *, CATarBufInfo > _pos
Definition: tar.h:72
CATar::CATarHeader::uid
quint32 uid
Definition: tar.h:44
CATar::addFile
bool addFile(const QString &filename, QIODevice &data, bool replace=true)
Definition: tar.cpp:171
CATar::CATarHeader::chksum
quint32 chksum
Definition: tar.h:48
CATar::CATar
CATar()
Definition: tar.cpp:35
CATar::CATarHeader::gname
char gname[33]
Definition: tar.h:54
CATar::write
qint64 write(QIODevice &dest, qint64 chunk)
Definition: tar.cpp:325
CATar::CATarFile::data
QFile * data
Definition: tar.h:61
CATar::CATarFile
Definition: tar.h:59
CATar::file
CAIOPtr file(const QString &filename)
Definition: tar.cpp:250
CATar::_files
QList< CATarFile * > _files
Definition: tar.h:63
CATar::numToOct
char * numToOct(char *, qint64, int)
Definition: tar.cpp:448
CATar::~CATar
virtual ~CATar()
Definition: tar.cpp:44
CAIOPtr
unique_ptr< QIODevice > CAIOPtr
Definition: tar.h:18
CATar::CATarBufInfo::close
bool close
Definition: tar.h:69
CATar::CATarBufInfo::pos
qint64 pos
Definition: tar.h:67
CATar::error
bool error()
Definition: tar.h:38