From 8d2e41a52409cb22acdb8703ba88906566a30865 Mon Sep 17 00:00:00 2001 From: "Seth W. Klein" Date: Thu, 5 Dec 2013 21:22:33 -0500 Subject: [PATCH 1/2] Add file modification time Adds flag -m which adds a variable, named like _Mod, containing the file modification time as a time.Time. --- README.mkd | 2 +- bin2go.go | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/README.mkd b/README.mkd index 7ab473a..b017550 100644 --- a/README.mkd +++ b/README.mkd @@ -6,4 +6,4 @@ Converts binary files to go source code. Usage ----- - bin2go [-p ] [-l ] [-c] [-a] [-s ] ... + bin2go [-p ] [-l ] [-c] [-a] [-m] [-s ] ... diff --git a/bin2go.go b/bin2go.go index 5b62622..d784d5b 100644 --- a/bin2go.go +++ b/bin2go.go @@ -39,10 +39,11 @@ var ( lineLen = flag.Int("l", 8, "Line length") comment = flag.Bool("c", false, "Line comments") useArray = flag.Bool("a", false, "Use slice ([]byte) instead of array ([...]byte)") + modTime = flag.Bool("m", false, "Add modification time") single = flag.String("s", "", "Single output filename") ) -func bin2go(ifile, pkgName, bufName string, ofi *os.File, line int, comment, useArray, useSingle bool) error { +func bin2go(ifile, pkgName, bufName string, ofi *os.File, line int, comment, useArray, modTime, useSingle bool) error { ifi, err := os.Open(ifile) if err != nil { return err @@ -57,7 +58,16 @@ func bin2go(ifile, pkgName, bufName string, ofi *os.File, line int, comment, use } if !useSingle { - writeHeader(ofi) + writeHeader(ofi, modTime) + } + + if modTime { + info, err := ifi.Stat() + if err != nil { + return err + } + mod := info.ModTime() + fmt.Fprintf(ofi, "\nvar %sMod = time.Unix(%d, %d)", bufName, mod.Unix(), mod.UnixNano()) } fmt.Fprintf(ofi, "\nvar %s = [%s]byte{\n", bufName, size) @@ -127,7 +137,7 @@ func main() { } defer ofi.Close() - writeHeader(ofi) + writeHeader(ofi, *modTime) } for _, fileName := range flag.Args() { @@ -138,11 +148,14 @@ func main() { defer ofi.Close() } - bin2go(fileName, *pkgName, camelCase(fileName), ofi, *lineLen, *comment, *useArray, useSingle) + bin2go(fileName, *pkgName, camelCase(fileName), ofi, *lineLen, *comment, *useArray, *modTime, useSingle) } } -func writeHeader(f *os.File) { +func writeHeader(f *os.File, modTime bool) { fmt.Fprintf(f, "// Automatically generated with bin2go: http://github.com/chsc/bin2go\n\n") fmt.Fprintf(f, "package %s\n", *pkgName) + if modTime { + fmt.Fprint(f, "\nimport \"time\"\n") + } } From 2168974861ae8066ce252eef6ce958474396abf0 Mon Sep 17 00:00:00 2001 From: "Seth W. Klein" Date: Wed, 15 Jan 2014 23:26:34 -0500 Subject: [PATCH 2/2] Pass only nsec to time.Unix --- bin2go.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin2go.go b/bin2go.go index d784d5b..9029a01 100644 --- a/bin2go.go +++ b/bin2go.go @@ -67,7 +67,7 @@ func bin2go(ifile, pkgName, bufName string, ofi *os.File, line int, comment, use return err } mod := info.ModTime() - fmt.Fprintf(ofi, "\nvar %sMod = time.Unix(%d, %d)", bufName, mod.Unix(), mod.UnixNano()) + fmt.Fprintf(ofi, "\nvar %sMod = time.Unix(0, %d)", bufName, mod.UnixNano()) } fmt.Fprintf(ofi, "\nvar %s = [%s]byte{\n", bufName, size)