From: Urban Wallasch Date: Thu, 4 Apr 2019 16:45:46 +0000 (+0200) Subject: * Added command line switch to specify FQDN. X-Git-Tag: v0.1~1 X-Git-Url: https://git.packet-gain.de/?a=commitdiff_plain;h=8f4f7b52da3c3e6be8e7ee2ea16ebfdb229ba215;p=gogopherd.git * Added command line switch to specify FQDN. * Display file sizes in human readable units. --- diff --git a/gogopherd.go b/gogopherd.go index 14feca4..1523026 100644 --- a/gogopherd.go +++ b/gogopherd.go @@ -55,6 +55,7 @@ var cfg = struct { func initialize() { flag.StringVar(&cfg.iface, "i", cfg.iface, "interface to bind to") flag.StringVar(&cfg.port, "p", cfg.port, "TCP port to listen on") + flag.StringVar(&cfg.fqdn, "f", cfg.port, "fully qualified domain name") flag.StringVar(&cfg.docRoot, "d", cfg.docRoot, "document root directory") flag.StringVar(&cfg.header, "H", cfg.header, "index header") flag.BoolVar(&cfg.verbose, "v", cfg.verbose, "produce verbose output") @@ -80,6 +81,7 @@ func initialize() { tracer.Print("interface: ", cfg.iface) tracer.Print("TCP port: ", cfg.port) tracer.Print("doc root: ", cfg.docRoot) + tracer.Print("fqdn: ", cfg.fqdn) tracer.Print("header: ", cfg.header) tracer.Print("verbose: ", cfg.verbose) } @@ -154,6 +156,20 @@ func guessFiletype(path string) (string, error) { return gopherType, nil } +func humanSize(bytes int64) string { + var units = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"} + ui := 0 + decimals := 1 + if bytes < 1024 { + decimals = 0 + } + var n float64 + for n = float64(bytes); n > 1024; n /= 1024 { + ui = ui + 1 + } + return fmt.Sprintf("%.*f %s", decimals, n, units[ui]) +} + func createIndex(selector string) (string, error) { dirname := cfg.docRoot + selector d, err := os.Open(dirname) @@ -177,7 +193,7 @@ func createIndex(selector string) (string, error) { } else if fmode.IsRegular() { // create a file reference ftype, _ := guessFiletype(dirname + pathSep + fi.Name()) - list += ftype + fi.Name() + " (" + strconv.FormatInt(fi.Size(), 10) + ")\t" + selector + pathSep + fi.Name() + loc + list += ftype + fi.Name() + " (" + humanSize(fi.Size()) + ")\t" + selector + pathSep + fi.Name() + loc } else if fmode&os.ModeSymlink != 0 { // create a reference according to link target linktarget, _ := os.Readlink(dirname + pathSep + fi.Name())