diff --git a/bzip2.go b/bzip2.go index a2516b8..4a4a84c 100644 --- a/bzip2.go +++ b/bzip2.go @@ -1,40 +1,26 @@ package binarydist import ( + "github.com/dsnet/compress/bzip2" "io" - "os/exec" ) - type bzip2Writer struct { - c *exec.Cmd - w io.WriteCloser + w io.Writer + r *bzip2.Writer } - -func (w bzip2Writer) Write(b []byte) (int, error) { - return w.w.Write(b) +func (w *bzip2Writer) Write(b []byte) (int, error) { + return w.r.Write(b) } - -func (w bzip2Writer) Close() error { - if err := w.w.Close(); err != nil { +func (w *bzip2Writer) Close() error { + err := w.r.Close() + if err != nil { return err } - return w.c.Wait() + // Since the underlying writer is the one we passed in, we don't need to + // close it again; it's the responsibility of the caller to close it. + return nil } - -// Package compress/bzip2 implements only decompression, -// so we'll fake it by running bzip2 in another process. -func newBzip2Writer(w io.Writer) (wc io.WriteCloser, err error) { - var bw bzip2Writer - bw.c = exec.Command("bzip2", "-c") - bw.c.Stdout = w - - if bw.w, err = bw.c.StdinPipe(); err != nil { - return nil, err - } - - if err = bw.c.Start(); err != nil { - return nil, err - } - - return bw, nil +func newBzip2Writer(w io.Writer) (io.WriteCloser, error) { + r ,err:= bzip2.NewWriter(w,nil) + return &bzip2Writer{w: w, r: r}, err }