mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-11-25 07:38:57 +00:00
29 lines
860 B
C
29 lines
860 B
C
|
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
|
||
|
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||
|
|
||
|
// See page 362.
|
||
|
// This is the version that appears in print,
|
||
|
// but it does not comply with the proposed
|
||
|
// rules for passing pointers between Go and C.
|
||
|
// (https://github.com/golang/proposal/blob/master/design/12416-cgo-pointers.md)
|
||
|
// See gopl.io/ch13/bzip for an updated version.
|
||
|
|
||
|
//!+
|
||
|
/* This file is gopl.io/ch13/bzip/bzip2.c, */
|
||
|
/* a simple wrapper for libbzip2 suitable for cgo. */
|
||
|
#include <bzlib.h>
|
||
|
|
||
|
int bz2compress(bz_stream *s, int action,
|
||
|
char *in, unsigned *inlen, char *out, unsigned *outlen) {
|
||
|
s->next_in = in;
|
||
|
s->avail_in = *inlen;
|
||
|
s->next_out = out;
|
||
|
s->avail_out = *outlen;
|
||
|
int r = BZ2_bzCompress(s, action);
|
||
|
*inlen -= s->avail_in;
|
||
|
*outlen -= s->avail_out;
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
//!-
|