int result = uncompress(new_buffer, &origsize, old_buffer, bs->data_len - 4\
);
実装比較
- A comparison of Zlib implementations
- Improving zlib-cloudflare and comparing performance with other zlib forks
compress / uncompress
compress
compsize = ~; // 圧縮後のサイズより大きな値
compbuff = malloc(compsize);
int result = compress(compbuff, &compsize, origbuff, origsize);
if (result != Z_OK) {
if (result == Z_MEM_ERROR) {
fprintf(stderr, "compress: Z_MEM_ERROR: can't malloc\n");
} else if (result == Z_BUF_ERROR) {
fprintf(stderr, "compress: Z_BUF_ERROR: not enough buff size\n");
}
return 1; // FAILURE
}
uncompress
origsize = ~; // 伸張後のサイズより大きな値
origbuff = malloc(origsize);
int result = uncompress(origbuff, &origsize, compbuff, compsize);
if (result != Z_OK) {
if (result == Z_MEM_ERROR) {
fprintf(stderr, "uncompress: Z_MEM_ERROR: can't malloc\n");
} else if (result == Z_BUF_ERROR) {
fprintf(stderr, "uncompress: Z_BUF_ERROR: not enough buff size\n");
}
return 1; // FAILURE
}
inflate / defrate
(予定)
発表スライド
未圧縮形式と固定ハフマン
参考
- カスタムハフマン (dynamic huffman)
- Zlib (Deflate のコンテナ)
- Deflate (圧縮の仕様
- IO_Zlib 1.0.0 リリース (ハマりどころメモ)
- SWFバイナリ編集のススメ番外編 (zlib 伸張)
関連