aboutsummaryrefslogtreecommitdiff
path: root/autoindex.go
diff options
context:
space:
mode:
Diffstat (limited to 'autoindex.go')
-rw-r--r--autoindex.go28
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 {