inflatezlib.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 67 行
C
67 行
#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 + =
减小字号Ctrl + -
显示快捷键?