Commit 64620bd

bryfry <bryon.fryer@gmail.com>
2015-03-06 23:27:59
somewhere in the intersection of p9, osx, and gnu on functionality
1 parent 8971fb6
Changed files (1)
md5sum.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+	"crypto/md5"
+	"flag"
+	"fmt"
+	"io"
+	"os"
+)
+
+func main() {
+
+	// no args, read from stdin
+	if len(os.Args) == 1 {
+		h := md5.New()
+		_, err := io.Copy(h, os.Stdin)
+		if err != nil {
+			fmt.Println(err.Error())
+		}
+		fmt.Printf("%x\t%s\n", h.Sum(nil), "-")
+		return
+	}
+
+	// md5 string digest
+	var s = flag.String("s", "", "print the checksum of the given string")
+	flag.Parse()
+	sVal := *s
+	if sVal != "" {
+		fmt.Printf("%x\t\"%s\"\n", md5.Sum([]byte(sVal)), sVal)
+		return
+	}
+
+	// md5 files & stdin digest
+	for _, filename := range flag.Args() {
+		var (
+			f   = os.Stdin
+			h   = md5.New()
+			err error
+		)
+		if filename != "-" {
+			f, err = os.Open(filename)
+		}
+		if err != nil {
+			fmt.Println(err.Error())
+			continue
+		}
+		_, err = io.Copy(h, f)
+		if err != nil {
+			fmt.Println(err.Error())
+			continue
+		}
+		fmt.Printf("%x\t%s\n", h.Sum(nil), filename)
+	}
+
+}