Files
ropkg/libropkg/compress.c

87 lines
1.9 KiB
C

#include "compress.h"
#include <ropkg/compress.h>
#include <stdio.h>
extern const struct ropkg_compression_function ropkg_zstd;
static const struct ropkg_compression_function *functions[] = {
[ROPKG_COMPRESSION_ZSTD] = &ropkg_zstd,
};
static const size_t nr_functions = sizeof functions / sizeof functions[0];
const struct ropkg_compression_function *ropkg_compression_function_for_type(
enum ropkg_compression_type type)
{
if (type >= nr_functions) {
return NULL;
}
return functions[type];
}
enum ropkg_status ropkg_compression_function_get_buffer_size(
const struct ropkg_compression_function *func,
enum ropkg_compression_stream_mode mode,
size_t *in_buffer_size,
size_t *out_buffer_size)
{
if (!func->f_buffer_size) {
return ROPKG_ERR_NOT_SUPPORTED;
}
return func->f_buffer_size(mode, in_buffer_size, out_buffer_size);
}
const char *ropkg_compression_function_get_file_extension(
const struct ropkg_compression_function *func)
{
return func->f_extension;
}
enum ropkg_status ropkg_compression_stream_open(
const struct ropkg_compression_function *func,
void *in_buffer,
size_t in_max,
void *out_buffer,
size_t out_max,
enum ropkg_compression_stream_mode mode,
struct ropkg_compression_stream **out)
{
if (!func->f_open) {
return ROPKG_ERR_NOT_SUPPORTED;
}
return func->f_open(
func,
mode,
in_buffer,
in_max,
out_buffer,
out_max,
out);
}
enum ropkg_status ropkg_compression_stream_process(
struct ropkg_compression_stream *stream,
size_t in_size,
enum ropkg_compression_stream_op op,
size_t *out_size)
{
if (!stream->s_func->f_process) {
return ROPKG_ERR_NOT_SUPPORTED;
}
return stream->s_func->f_process(stream, in_size, op, out_size);
}
enum ropkg_status ropkg_compression_stream_close(
struct ropkg_compression_stream *stream)
{
if (!stream->s_func->f_close) {
return ROPKG_ERR_NOT_SUPPORTED;
}
return stream->s_func->f_close(stream);
}