diff options
Diffstat (limited to 'autoindex.go')
| -rw-r--r-- | autoindex.go | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/autoindex.go b/autoindex.go index 6a388a6..daadc59 100644 --- a/autoindex.go +++ b/autoindex.go @@ -35,6 +35,8 @@ func format(t time.Time) string { } func (handler IndexHandler) writeDirToTar(tw *tar.Writer, file os.FileInfo, name string) { + //TODO use filepath.Walk + //hdr := &tar.Header{ //Name: name, //Mode: int64(file.Mode()), @@ -45,25 +47,37 @@ func (handler IndexHandler) writeDirToTar(tw *tar.Writer, file os.FileInfo, name //log.Fatal(err) //} p := filepath.Join(handler.docPath, name) - fileInfos, err := ioutil.ReadDir(p) + fileInfos, err := os.ReadDir(p) if err != nil { panic(err) } - for _, info := range fileInfos { + for _, finfo := range fileInfos { + info, err := finfo.Info() + if err != nil { + panic(err) + } path := filepath.Join(name, info.Name()) + var link string + if info.Mode()&os.ModeSymlink == os.ModeSymlink { + if link, err = os.Readlink(path); err != nil { + panic(err) + } + } path = strings.TrimPrefix(path, "/") + if info.IsDir() { handler.writeDirToTar(tw, info, path) } else { - hdr := &tar.Header{ - Name: path, - Mode: int64(info.Mode()), - Size: info.Size(), - ModTime: info.ModTime(), + hdr, err := tar.FileInfoHeader(info, link) + if err != nil { + log.Fatal(err) } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } + if !info.Mode().IsRegular() { + continue + } absFilePath := filepath.Join(handler.docPath, path) openFile, err := os.Open(absFilePath) if err != nil { |
