blob: e9633ab92ebaafc3871e00e94878151521cf3a47 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
/*
* Guillaume Cottenceau (gc@mandrakesoft.com)
*
* Copyright 2000 MandrakeSoft
*
* This software may be freely redistributed under the terms of the GNU
* public license.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/*
* mar - The Mandrake Archiver
*
* An archiver that supports compression (through zlib).
*
* Designed to be small so these bad designs are inside:
* . archive and compression are mixed together
* . create the mar file in-memory
* . does not free memory
*
*/
#ifndef MAR_H
#define MAR_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <zlib.h>
/*
* Format of a mar file:
*
* int crc32 \
* ASCIIZ filename \ |
* int file_length | repeated | gzipped
* int pointer_in_archive / |
* char 0 |
* raw_files_data /
*
*/
struct mar_element
{
char * filename; /* filename (ASCIIZ) of the element */
int file_length; /* length (in bytes) of the raw data of the element */
int data_offset; /* seek start of the raw data in the underlying mar stream */
struct mar_element * next_element; /* pointer to the next element in the mar stream; NULL if last */
};
struct mar_stream
{
int crc32; /* crc32 of the mar stream; it is the addition of all the 8-bit char's from the stream */
struct mar_element * first_element; /* pointer to the first element inside the mar stream */
gzFile mar_gzfile; /* associated gzFile (opened) */
};
int gz_errnum;
#define DEBUG_MAR(x)
#endif
|