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 }