00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __C_CREATEREPOLIB_COMPRESSION_WRAPPER_H__
00021 #define __C_CREATEREPOLIB_COMPRESSION_WRAPPER_H__
00022
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026
00027 #include "checksum.h"
00028
00036 typedef enum {
00037 CR_CW_AUTO_DETECT_COMPRESSION,
00038 CR_CW_UNKNOWN_COMPRESSION,
00039 CR_CW_NO_COMPRESSION,
00040 CR_CW_GZ_COMPRESSION,
00041 CR_CW_BZ2_COMPRESSION,
00042 CR_CW_XZ_COMPRESSION,
00043 CR_CW_COMPRESSION_SENTINEL,
00044 } cr_CompressionType;
00045
00048 typedef enum {
00049 CR_CW_MODE_READ,
00050 CR_CW_MODE_WRITE,
00051 CR_CW_MODE_SENTINEL,
00052 } cr_OpenMode;
00053
00056 typedef struct {
00057 gint64 size;
00058 cr_ChecksumType checksum_type;
00059 char *checksum;
00060 } cr_ContentStat;
00061
00068 cr_ContentStat *cr_contentstat_new(cr_ChecksumType type, GError **err);
00069
00074 void cr_contentstat_free(cr_ContentStat *cstat, GError **err);
00075
00078 typedef struct {
00079 cr_CompressionType type;
00080 void *FILE;
00081 cr_OpenMode mode;
00082 cr_ContentStat *stat;
00083 cr_ChecksumCtx *checksum_ctx;
00084 } CR_FILE;
00085
00086 #define CR_CW_ERR -1
00092 const char *cr_compression_suffix(cr_CompressionType comtype);
00093
00099 cr_CompressionType cr_detect_compression(const char* filename, GError **err);
00100
00108 #define cr_open(FILENAME, MODE, COMTYPE, ERR) \
00109 cr_sopen(FILENAME, MODE, COMTYPE, NULL, ERR)
00110
00121 CR_FILE *cr_sopen(const char *filename,
00122 cr_OpenMode mode,
00123 cr_CompressionType comtype,
00124 cr_ContentStat *stat,
00125 GError **err);
00126
00134 int cr_read(CR_FILE *cr_file, void *buffer, unsigned int len, GError **err);
00135
00144 int cr_write(CR_FILE *cr_file,
00145 const void *buffer,
00146 unsigned int len,
00147 GError **err);
00148
00155 int cr_puts(CR_FILE *cr_file, const char *str, GError **err);
00156
00164 int cr_printf(GError **err, CR_FILE *cr_file, const char *format, ...);
00165
00171 int cr_close(CR_FILE *cr_file, GError **err);
00172
00175 #ifdef __cplusplus
00176 }
00177 #endif
00178
00179 #endif