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>
16using std::unique_ptr;
17
18class QIODevice;
19
20typedef unique_ptr<QIODevice> CAIOPtr;
21
22class CATar
23{
24public:
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; }
39protected:
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 */
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;
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_ */
Class for the manipulation of tar files.
Definition: tar.h:23
CAIOPtr file(const QString &filename)
Definition: tar.cpp:250
char * bufncpyi(char *&, const char *, size_t, int=-1)
Definition: tar.cpp:437
qint64 write(QIODevice &dest, qint64 chunk)
Definition: tar.cpp:325
char * numToOct(char *, qint64, int)
Definition: tar.cpp:448
bool _ok
Definition: tar.h:65
char * numToOcti(char *&, qint64, int)
Definition: tar.cpp:467
virtual ~CATar()
Definition: tar.cpp:44
bool eof(QIODevice &dest)
Definition: tar.cpp:405
static const int CHUNK
Definition: tar.h:40
QHash< QIODevice *, CATarBufInfo > _pos
Definition: tar.h:72
bool contains(const QString &filename)
Definition: tar.cpp:154
bool open(QIODevice &dest)
Definition: tar.h:35
void close(QIODevice &dest)
Definition: tar.h:36
void parse(QIODevice &data)
Definition: tar.cpp:68
char * bufncpy(char *, const char *, size_t, int=-1)
Definition: tar.cpp:425
bool error()
Definition: tar.h:38
QList< CATarFile * > _files
Definition: tar.h:63
CATar()
Definition: tar.cpp:35
bool addFile(const QString &filename, QIODevice &data, bool replace=true)
Definition: tar.cpp:171
void removeFile(const QString &filename)
Definition: tar.cpp:233
void writeHeader(QIODevice &dest, int file)
Definition: tar.cpp:267
Definition: tar.h:66
bool close
Definition: tar.h:69
qint32 file
Definition: tar.h:68
qint64 pos
Definition: tar.h:67
bool eof
Definition: tar.h:70
Definition: tar.h:59
CATarHeader hdr
Definition: tar.h:60
QFile * data
Definition: tar.h:61
Definition: tar.h:41
quint64 mtime
Definition: tar.h:47
quint32 mode
Definition: tar.h:43
quint32 gid
Definition: tar.h:45
quint64 size
Definition: tar.h:46
char typeflag
Definition: tar.h:49
quint32 uid
Definition: tar.h:44
quint32 chksum
Definition: tar.h:48
unique_ptr< QIODevice > CAIOPtr
Definition: tar.h:18