Lines Matching refs:dd
20 void (*crcfunc)(struct deflate *dd, char *data, unsigned len);
138 static void output_byte(struct deflate *dd, char sym) in output_byte() argument
140 int pos = dd->pos++ & 32767; in output_byte()
142 dd->data[pos] = sym; in output_byte()
145 xwrite(dd->outfd, dd->data, 32768); in output_byte()
146 if (dd->crcfunc) dd->crcfunc(dd, dd->data, 32768); in output_byte()
202 static void inflate(struct deflate *dd, struct bitbuf *bb) in inflate() argument
204 dd->crc = ~0; in inflate()
233 while (pos--) output_byte(dd, *(p++)); in inflate()
284 lithuff = dd->fixlithuff; in inflate()
285 disthuff = dd->fixdisthuff; in inflate()
293 if (sym < 256) output_byte(dd, sym); in inflate()
300 len = dd->lenbase[sym] + bitbuf_get(bb, dd->lenbits[sym]); in inflate()
302 dist = dd->distbase[sym] + bitbuf_get(bb, dd->distbits[sym]); in inflate()
303 sym = dd->pos & 32767; in inflate()
305 while (len--) output_byte(dd, dd->data[(dd->pos-dist) & 32767]); in inflate()
316 if (dd->pos & 32767) { in inflate()
317 xwrite(dd->outfd, dd->data, dd->pos&32767); in inflate()
318 if (dd->crcfunc) dd->crcfunc(dd, dd->data, dd->pos&32767); in inflate()
324 static void deflate(struct deflate *dd, struct bitbuf *bb) in deflate() argument
326 char *data = dd->data; in deflate()
329 dd->crc = ~0; in deflate()
333 len = readall(dd->infd, data+(dd->len&32768), 32768); in deflate()
336 if (dd->crcfunc) dd->crcfunc(dd, data+(dd->len&32768), len); in deflate()
348 while (dd->pos != dd->len) { in deflate()
349 unsigned pos = dd->pos&65535; in deflate()
354 if (!(32767 & ++dd->pos) && !final) break; in deflate()
364 struct deflate *dd = xmalloc(sizeof(struct deflate)+32768*(compress ? 4 : 1)); in init_deflate() local
366 memset(dd, 0, sizeof(struct deflate)); in init_deflate()
369 dd->hashhead = (unsigned short *)(dd->data+65536); in init_deflate()
370 dd->hashchain = (unsigned short *)(dd->data+65536+32768); in init_deflate()
374 *dd->lenbase = 3; in init_deflate()
375 for (i = 0; i<sizeof(dd->lenbits)-1; i++) { in init_deflate()
378 dd->lenbits[i]++; in init_deflate()
382 else dd->lenbits[i+1] = dd->lenbits[i]; in init_deflate()
384 dd->lenbase[i+1] = n + dd->lenbase[i]; in init_deflate()
387 for (i = 0; i<sizeof(dd->distbits); i++) { in init_deflate()
388 dd->distbase[i] = 1<<n; in init_deflate()
389 if (i) dd->distbase[i] += dd->distbase[i-1]; in init_deflate()
391 dd->distbits[i] = n; in init_deflate()
397 len2huff(dd->fixlithuff = ((struct huff *)libbuf)+3, libbuf, 288); in init_deflate()
399 len2huff(dd->fixdisthuff = ((struct huff *)libbuf)+4, libbuf, 30); in init_deflate()
401 return dd; in init_deflate()
423 void gzip_crc(struct deflate *dd, char *data, unsigned len) in gzip_crc() argument
426 unsigned crc, *crc_table = dd->crctable; in gzip_crc()
428 crc = dd->crc; in gzip_crc()
430 dd->crc = crc; in gzip_crc()
431 dd->len += len; in gzip_crc()
450 struct deflate *dd = init_deflate(1); in gzip_fd() local
458 dd->infd = infd; in gzip_fd()
462 crc_init(dd->crctable, 1); in gzip_fd()
463 dd->crcfunc = gzip_crc; in gzip_fd()
465 deflate(dd, bb); in gzip_fd()
470 bitbuf_put(bb, ~dd->crc, 32); in gzip_fd()
471 bitbuf_put(bb, dd->len, 32); in gzip_fd()
472 rc = dd->len; in gzip_fd()
476 free(dd); in gzip_fd()
484 struct deflate *dd = init_deflate(0); in gunzip_fd() local
488 crc_init(dd->crctable, 1); in gunzip_fd()
489 dd->crcfunc = gzip_crc; in gunzip_fd()
490 dd->outfd = outfd; in gunzip_fd()
495 inflate(dd, bb); in gunzip_fd()
499 if (~dd->crc != bitbuf_get(bb, 32) || dd->len != bitbuf_get(bb, 32)) in gunzip_fd()
501 rc += dd->len; in gunzip_fd()
504 dd->pos = dd->len = 0; in gunzip_fd()
507 free(dd); in gunzip_fd()