int zlib_write_compress_header(FILE *fd, guint32 blocksize, gulong *checksum, guint32 *compressed_size) { gsize written = 0; GByteArray *headers = NULL; int status = 1; headers = g_byte_array_new(); #define HEADER_APPEND(V, S) g_byte_array_append(headers,(guint8*)V, S); headers = HEADER_APPEND(&magic, sizeof(magic)); /* char[8] */ headers = HEADER_APPEND(&blocksize, sizeof(blocksize)); /* guint32 */ written = fwrite(headers->data, headers->len, 1, fd); if (written != 1) { DEBUG("Failed to write compression headers"); goto end; } *compressed_size = *compressed_size + headers->len; *checksum = adler32(0, NULL, 0); status = 0; end: if(headers) g_byte_array_free(headers, TRUE); return status; }
int lzo_write_compress_header(FILE *file, lzo_uint32 blocksize, gulong *checksum, lzo_uint32 *compressed_size) { lzo_uint32 flags = LZO_FLAG_CHECKSUM; /* do compute a checksum */ char method = LZO_METHOD; char level = LZO_LEVEL; gsize written = 0; GByteArray *headers = NULL; headers = g_byte_array_new(); #define HEADER_APPEND(V, S) g_byte_array_append(headers,(guint8*)V, S); headers = HEADER_APPEND(&lzo_magic, sizeof(lzo_magic)); /* char[7] */ headers = HEADER_APPEND(&flags, sizeof(flags)); /* guint32 */ headers = HEADER_APPEND(&method, sizeof(method)); /* char */ headers = HEADER_APPEND(&level, sizeof(level)); /* char */ headers = HEADER_APPEND(&blocksize, sizeof(blocksize)); /* guint32 */ written = fwrite(headers->data, headers->len, 1, file); if (written != 1) { ERROR("Failed to write headers\n"); if(headers) g_byte_array_free(headers, TRUE); return 1; } *compressed_size = *compressed_size + headers->len; lzo_uint32 cheksum32 = 0; cheksum32 = lzo_adler32(0, NULL, 0); *checksum = cheksum32; if(headers) g_byte_array_free(headers, TRUE); return 0; }