Decompression
The following is a description of the aPLib decompression
functionality.
Decompression Functions
size_t aP_depack( const void *source,
void *destination );
Decompresses the compressed data from source[]
into destination[] .
The destination[] buffer must be large enough to
hold the decompressed data.
- Parameters:
-
source - pointer to the compressed data.
destination - pointer to where the decompressed data
should be stored.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
- Note:
-
This function is not included in the libraries, but is available in
src/c/depack.c .
aP_depack_asm_fast can be used
instead.
size_t aP_depack_safe( const void *source,
size_t srclen,
void *destination,
size_t dstlen );
Decompresses the compressed data from source[]
into destination[] .
This function reads at most srclen bytes from
source[] , and writes at most dstlen
bytes to destination[] . If there is not enough
source or destination space, or a decoding error occurs,
the function returns APLIB_ERROR .
- Parameters:
-
source - pointer to the compressed data.
srclen - the size of the source buffer in bytes.
destination - pointer to where the decompressed data
should be stored.
dstlen - the size of the destination buffer in bytes.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
- Note:
-
This function is not included in the libraries, but is available in
src/c/depacks.c .
aP_depack_asm_safe can be used
instead.
size_t aP_depack_asm( const void *source,
void *destination );
Decompresses the compressed data from source[]
into destination[] .
The destination[] buffer must be large enough to
hold the decompressed data.
Optimised for size.
- Parameters:
-
source - pointer to the compressed data.
destination - pointer to where the decompressed data
should be stored.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
size_t aP_depack_asm_fast( const void *source,
void *destination );
Decompresses the compressed data from source[]
into destination[] .
The destination[] buffer must be large enough to
hold the decompressed data.
Optimised for speed.
- Parameters:
-
source - pointer to the compressed data.
destination - pointer to where the decompressed data
should be stored.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
size_t aP_depack_asm_safe( const void *source,
size_t srclen,
void *destination,
size_t dstlen );
Decompresses the compressed data from source[]
into destination[] .
This function reads at most srclen bytes from
source[] , and writes at most dstlen
bytes to destination[] . If there is not enough
source or destination space, or a decoding error occurs,
the function returns APLIB_ERROR .
- Parameters:
-
source - pointer to the compressed data.
srclen - the size of the source buffer in bytes.
destination - pointer to where the decompressed data
should be stored.
dstlen - the size of the destination buffer in bytes.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
- See Also:
-
aPsafe_depack
unsigned int aP_crc32( const void *source,
size_t length );
Computes the CRC32 value of length bytes of data
from source[] .
- Parameters:
-
source - pointer to the data to process.
length - the size in bytes of the data.
- Returns:
-
the CRC32 value.
Safe Wrapper Functions
size_t aPsafe_check( const void *source );
Computes the CRC32 of the compressed data in
source[] and checks it agains the value in the
header. Returns the length of the decompressed data stored in the
header..
- Parameters:
-
source - the compressed data to process.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
size_t aPsafe_get_orig_size( const void *source );
Returns the length of the decompressed data stored in the
header of the compressed data in source[] .
- Parameters:
-
source - the compressed data to process.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
size_t aPsafe_depack( const void *source,
size_t srclen,
void *destination,
size_t dstlen );
Wrapper function for
aP_depack_asm_safe ,
which checks the CRC32 of the compressed data, decompresses, and
checks the CRC32 of the decompressed data.
- Parameters:
-
source - pointer to the compressed data.
srclen - the size of the source buffer in bytes.
destination - pointer to where the decompressed data
should be stored.
dstlen - the size of the destination buffer in bytes.
- Returns:
-
the length of the decompressed data, or
APLIB_ERROR on
error.
- See Also:
-
aP_depack_asm_safe
Example
size_t orig_size = aPsafe_get_orig_size(compressed);
char *data = malloc(orig_size);
size_t outlength = aPsafe_depack(compressed, compressed_size, data, orig_size);
if (outlength != orig_size)
{
printf("An error occured!\n");
} else {
printf("Decompressed %u bytes\n", outlength);
}
|