|
|
@@ -1,40 +1,46 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
"flag"
|
|
|
- "fmt"
|
|
|
- "io"
|
|
|
+ "io/ioutil"
|
|
|
"os"
|
|
|
|
|
|
"github.com/golang/snappy"
|
|
|
)
|
|
|
|
|
|
var (
|
|
|
- enc = flag.Bool("e", false, "encode")
|
|
|
- dec = flag.Bool("d", false, "decode")
|
|
|
+ decode = flag.Bool("d", false, "decode")
|
|
|
+ encode = flag.Bool("e", false, "encode")
|
|
|
)
|
|
|
|
|
|
-func run() int {
|
|
|
+func run() error {
|
|
|
flag.Parse()
|
|
|
- if *enc == *dec {
|
|
|
- fmt.Fprintf(os.Stderr, "exactly one of -d or -e must be given")
|
|
|
- return 1
|
|
|
+ if *decode == *encode {
|
|
|
+ return errors.New("exactly one of -d or -e must be given")
|
|
|
}
|
|
|
|
|
|
- // Encode or decode stdin, and write to stdout.
|
|
|
- var err error
|
|
|
- if *enc {
|
|
|
- _, err = io.Copy(snappy.NewWriter(os.Stdout), os.Stdin)
|
|
|
- } else {
|
|
|
- _, err = io.Copy(os.Stdout, snappy.NewReader(os.Stdin))
|
|
|
- }
|
|
|
+ in, err := ioutil.ReadAll(os.Stdin)
|
|
|
if err != nil {
|
|
|
- fmt.Fprintf(os.Stderr, err.Error())
|
|
|
- return 1
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ out := []byte(nil)
|
|
|
+ if *decode {
|
|
|
+ out, err = snappy.Decode(nil, in)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ out = snappy.Encode(nil, in)
|
|
|
}
|
|
|
- return 0
|
|
|
+ _, err = os.Stdout.Write(out)
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
func main() {
|
|
|
- os.Exit(run())
|
|
|
+ if err := run(); err != nil {
|
|
|
+ os.Stderr.WriteString(err.Error() + "\n")
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
}
|