VirtualBox

source: vbox/trunk/include/iprt/zip.h@ 34066

Last change on this file since 34066 was 34045, checked in by vboxsync, 14 years ago

iprt: more tar code and vfs filesystem stream bugfixes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.4 KB
Line 
1/** @file
2 * IPRT - Compression.
3 */
4
5/*
6 * Copyright (C) 2006-2007 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___iprt_zip_h
27#define ___iprt_zip_h
28
29#include <iprt/cdefs.h>
30#include <iprt/types.h>
31
32
33RT_C_DECLS_BEGIN
34
35/** @defgroup grp_rt_zip RTZip - Compression
36 * @ingroup grp_rt
37 * @{
38 */
39
40
41
42/**
43 * Callback function for consuming compressed data during compression.
44 *
45 * @returns iprt status code.
46 * @param pvUser User argument.
47 * @param pvBuf Compressed data.
48 * @param cbBuf Size of the compressed data.
49 */
50typedef DECLCALLBACK(int) FNRTZIPOUT(void *pvUser, const void *pvBuf, size_t cbBuf);
51/** Pointer to FNRTZIPOUT() function. */
52typedef FNRTZIPOUT *PFNRTZIPOUT;
53
54/**
55 * Callback function for supplying compressed data during decompression.
56 *
57 * @returns iprt status code.
58 * @param pvUser User argument.
59 * @param pvBuf Where to store the compressed data.
60 * @param cbBuf Size of the buffer.
61 * @param pcbBuf Number of bytes actually stored in the buffer.
62 */
63typedef DECLCALLBACK(int) FNRTZIPIN(void *pvUser, void *pvBuf, size_t cbBuf, size_t *pcbBuf);
64/** Pointer to FNRTZIPIN() function. */
65typedef FNRTZIPIN *PFNRTZIPIN;
66
67/**
68 * Compression type.
69 * (Be careful with these they are stored in files!)
70 */
71typedef enum RTZIPTYPE
72{
73 /** Invalid. */
74 RTZIPTYPE_INVALID = 0,
75 /** Choose best fitting one. */
76 RTZIPTYPE_AUTO,
77 /** Store the data. */
78 RTZIPTYPE_STORE,
79 /** Zlib compression the data. */
80 RTZIPTYPE_ZLIB,
81 /** BZlib compress. */
82 RTZIPTYPE_BZLIB,
83 /** libLZF compress. */
84 RTZIPTYPE_LZF,
85 /** Lempel-Ziv-Jeff-Bonwick compression. */
86 RTZIPTYPE_LZJB,
87 /** Lempel-Ziv-Oberhumer compression. */
88 RTZIPTYPE_LZO,
89 /** End of valid the valid compression types. */
90 RTZIPTYPE_END
91} RTZIPTYPE;
92
93/**
94 * Compression level.
95 */
96typedef enum RTZIPLEVEL
97{
98 /** Store, don't compress. */
99 RTZIPLEVEL_STORE = 0,
100 /** Fast compression. */
101 RTZIPLEVEL_FAST,
102 /** Default compression. */
103 RTZIPLEVEL_DEFAULT,
104 /** Maximal compression. */
105 RTZIPLEVEL_MAX
106} RTZIPLEVEL;
107
108
109/**
110 * Create a stream compressor instance.
111 *
112 * @returns iprt status code.
113 * @param ppZip Where to store the instance handle.
114 * @param pvUser User argument which will be passed on to pfnOut and pfnIn.
115 * @param pfnOut Callback for consuming output of compression.
116 * @param enmType Type of compressor to create.
117 * @param enmLevel Compression level.
118 */
119RTDECL(int) RTZipCompCreate(PRTZIPCOMP *ppZip, void *pvUser, PFNRTZIPOUT pfnOut, RTZIPTYPE enmType, RTZIPLEVEL enmLevel);
120
121/**
122 * Compresses a chunk of memory.
123 *
124 * @returns iprt status code.
125 * @param pZip The compressor instance.
126 * @param pvBuf Pointer to buffer containing the bits to compress.
127 * @param cbBuf Number of bytes to compress.
128 */
129RTDECL(int) RTZipCompress(PRTZIPCOMP pZip, const void *pvBuf, size_t cbBuf);
130
131/**
132 * Finishes the compression.
133 * This will flush all data and terminate the compression data stream.
134 *
135 * @returns iprt status code.
136 * @param pZip The stream compressor instance.
137 */
138RTDECL(int) RTZipCompFinish(PRTZIPCOMP pZip);
139
140/**
141 * Destroys the stream compressor instance.
142 *
143 * @returns iprt status code.
144 * @param pZip The compressor instance.
145 */
146RTDECL(int) RTZipCompDestroy(PRTZIPCOMP pZip);
147
148
149/**
150 * Create a stream decompressor instance.
151 *
152 * @returns iprt status code.
153 * @param ppZip Where to store the instance handle.
154 * @param pvUser User argument which will be passed on to pfnOut and pfnIn.
155 * @param pfnIn Callback for producing input for decompression.
156 */
157RTDECL(int) RTZipDecompCreate(PRTZIPDECOMP *ppZip, void *pvUser, PFNRTZIPIN pfnIn);
158
159/**
160 * Decompresses a chunk of memory.
161 *
162 * @returns iprt status code.
163 * @param pZip The stream decompressor instance.
164 * @param pvBuf Where to store the decompressed data.
165 * @param cbBuf Number of bytes to produce. If pcbWritten is set
166 * any number of bytes up to cbBuf might be returned.
167 * @param pcbWritten Number of bytes actually written to the buffer. If NULL
168 * cbBuf number of bytes must be written.
169 */
170RTDECL(int) RTZipDecompress(PRTZIPDECOMP pZip, void *pvBuf, size_t cbBuf, size_t *pcbWritten);
171
172/**
173 * Destroys the stream decompressor instance.
174 *
175 * @returns iprt status code.
176 * @param pZip The decompressor instance.
177 */
178RTDECL(int) RTZipDecompDestroy(PRTZIPDECOMP pZip);
179
180
181/**
182 * Compress a chunk of memory into a block.
183 *
184 * @returns IPRT status code.
185 *
186 * @param enmType The compression type.
187 * @param enmLevel The compression level.
188 * @param fFlags Flags reserved for future extensions, MBZ.
189 * @param pvSrc Pointer to the input block.
190 * @param cbSrc Size of the input block.
191 * @param pvDst Pointer to the output buffer.
192 * @param cbDst The size of the output buffer.
193 * @param pcbDstActual Where to return the compressed size.
194 */
195RTDECL(int) RTZipBlockCompress(RTZIPTYPE enmType, RTZIPLEVEL enmLevel, uint32_t fFlags,
196 void const *pvSrc, size_t cbSrc,
197 void *pvDst, size_t cbDst, size_t *pcbDstActual) RT_NO_THROW;
198
199
200/**
201 * Decompress a block.
202 *
203 * @returns IPRT status code.
204 *
205 * @param enmType The compression type.
206 * @param fFlags Flags reserved for future extensions, MBZ.
207 * @param pvSrc Pointer to the input block.
208 * @param cbSrc Size of the input block.
209 * @param pcbSrcActual Where to return the compressed size.
210 * @param pvDst Pointer to the output buffer.
211 * @param cbDst The size of the output buffer.
212 * @param pcbDstActual Where to return the decompressed size.
213 */
214RTDECL(int) RTZipBlockDecompress(RTZIPTYPE enmType, uint32_t fFlags,
215 void const *pvSrc, size_t cbSrc, size_t *pcbSrcActual,
216 void *pvDst, size_t cbDst, size_t *pcbDstActual) RT_NO_THROW;
217
218
219/**
220 * Opens a gzip decompression I/O stream.
221 *
222 * @returns IPRT status code.
223 *
224 * @param hVfsIosIn The compressed input stream. The reference is
225 * not consumed, instead another one is retained.
226 * @param fFlags Flags, MBZ.
227 * @param phVfsIosOut Where to return the handle to the gzip I/O
228 * stream.
229 */
230RTDECL(int) RTZipGzipDecompressIoStream(RTVFSIOSTREAM hVfsIosIn, uint32_t fFlags, PRTVFSIOSTREAM phVfsIosOut);
231
232/**
233 * Opens a TAR filesystem stream.
234 *
235 * This is used to extract, list or check a TAR archive.
236 *
237 * @returns IPRT status code.
238 *
239 * @param hVfsIosIn The compressed input stream. The reference is
240 * not consumed, instead another one is retained.
241 * @param fFlags Flags, MBZ.
242 * @param phVfsFss Where to return the handle to the TAR
243 * filesystem stream.
244 */
245RTDECL(int) RTZipTarFsStreamFromIoStream(RTVFSIOSTREAM hVfsIosIn, uint32_t fFlags, PRTVFSFSSTREAM phVfsFss);
246
247/**
248 * A mini TAR program.
249 *
250 * @returns Program exit code.
251 *
252 * @param cArgs The number of arguments.
253 * @param papszArgs The argument vector. (Note that this may be
254 * reordered, so the memory must be writable.)
255 */
256RTDECL(RTEXITCODE) RTZipTarCmd(unsigned cArgs, char **papszArgs);
257
258/** @} */
259
260RT_C_DECLS_END
261
262#endif
263
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette