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")
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)
}
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)
} 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())