📄 inflatezlib.c
字号:
#include <u.h>#include <libc.h>#include <flate.h>#include "zlib.h"typedef struct ZWrite ZWrite;struct ZWrite{ ulong adler; void *wr; int (*w)(void*, void*, int);};static intzlwrite(void *vzw, void *buf, int n){ ZWrite *zw; zw = vzw; zw->adler = adler32(zw->adler, buf, n); n = (*zw->w)(zw->wr, buf, n); if(n <= 0) return n; return n;}intinflatezlib(void *wr, int (*w)(void*, void*, int), void *getr, int (*get)(void*)){ ZWrite zw; ulong v; int c, i; c = (*get)(getr); if(c < 0) return FlateInputFail; i = (*get)(getr); if(i < 0) return FlateInputFail; if(((c << 8) | i) % 31) return FlateCorrupted; if((c & ZlibMeth) != ZlibDeflate || (c & ZlibCInfo) > ZlibWin32k) return FlateCorrupted; zw.wr = wr; zw.w = w; zw.adler = 1; i = inflate(&zw, zlwrite, getr, get); if(i != FlateOk) return i; v = 0; for(i = 0; i < 4; i++){ c = (*get)(getr); if(c < 0) return FlateInputFail; v = (v << 8) | c; } if(zw.adler != v) return FlateCorrupted; return FlateOk;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -