diff --git a/archiver.go b/archiver.go index 096eb036..5cfdc78e 100644 --- a/archiver.go +++ b/archiver.go @@ -192,21 +192,15 @@ func Archive(sources []string, destination string) error { } // Unarchive unarchives the given archive file into the destination folder. -// The archive format is selected implicitly based on the file's header. +// The archive format is selected implicitly. func Unarchive(source, destination string) error { - f, err := os.Open(source) + uaIface, err := ByExtension(source) if err != nil { return err } - uaIface, err := ByHeader(f) - if err != nil { - f.Close() - return err - } - f.Close() u, ok := uaIface.(Unarchiver) if !ok { - return fmt.Errorf("format specified by destination filename is not an archive format: %s (%T)", destination, uaIface) + return fmt.Errorf("format specified by source filename is not an archive format: %s (%T)", source, uaIface) } return u.Unarchive(source, destination) } diff --git a/cmd/arc/main.go b/cmd/arc/main.go index b0ccc797..00f44270 100644 --- a/cmd/arc/main.go +++ b/cmd/arc/main.go @@ -51,8 +51,6 @@ func main() { fatal(err) } - fmt.Printf("VALUE: %#v\n", iface) - // run the desired command switch subcommand { case "archive": @@ -63,11 +61,11 @@ func main() { err = a.Archive(flag.Args()[2:], flag.Arg(1)) case "unarchive": - a, ok := iface.(archiver.Unarchiver) + u, ok := iface.(archiver.Unarchiver) if !ok { fatalf("the unarchive command does not support the %s format", iface) } - err = a.Unarchive(flag.Arg(1), flag.Arg(2)) + err = u.Unarchive(flag.Arg(1), flag.Arg(2)) case "extract": e, ok := iface.(archiver.Extractor) @@ -124,7 +122,7 @@ func main() { return nil }) - fmt.Printf("total %d", count) + fmt.Printf("total %d\n", count) case "compress": c, ok := iface.(archiver.Compressor)