github.com/ruishantech/selfupdate@v1.0.3/internal/binarydist/bzip2.go (about)

     1  package binarydist
     2  
     3  import (
     4  	"io"
     5  	"os/exec"
     6  )
     7  
     8  type bzip2Writer struct {
     9  	c *exec.Cmd
    10  	w io.WriteCloser
    11  }
    12  
    13  func (w bzip2Writer) Write(b []byte) (int, error) {
    14  	return w.w.Write(b)
    15  }
    16  
    17  func (w bzip2Writer) Close() error {
    18  	if err := w.w.Close(); err != nil {
    19  		return err
    20  	}
    21  	return w.c.Wait()
    22  }
    23  
    24  // Package compress/bzip2 implements only decompression,
    25  // so we'll fake it by running bzip2 in another process.
    26  func newBzip2Writer(w io.Writer) (wc io.WriteCloser, err error) {
    27  	var bw bzip2Writer
    28  	bw.c = exec.Command("bzip2", "-c")
    29  	bw.c.Stdout = w
    30  
    31  	if bw.w, err = bw.c.StdinPipe(); err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	if err = bw.c.Start(); err != nil {
    36  		return nil, err
    37  	}
    38  
    39  	return bw, nil
    40  }