Commit 777d1540 authored by Steven Allen's avatar Steven Allen

feat: correctly report the size of symlinks

Also, symlinks don't use stat.
parent 8d2cd18a
module github.com/ipfs/go-ipfs-files
require golang.org/x/sys v0.0.0-20190302025703-b6889370fb10
go 1.12
package files
import (
"io"
"os"
"strings"
)
type Symlink struct {
Target string
stat os.FileInfo
reader io.Reader
reader strings.Reader
}
func NewLinkFile(target string, stat os.FileInfo) File {
return &Symlink{
Target: target,
stat: stat,
reader: strings.NewReader(target),
}
func NewLinkFile(target string) File {
lf := &Symlink{Target: target}
lf.reader.Reset(lf.Target)
return lf
}
func (lf *Symlink) Close() error {
if c, ok := lf.reader.(io.Closer); ok {
return c.Close()
}
return nil
}
......@@ -34,15 +25,11 @@ func (lf *Symlink) Read(b []byte) (int, error) {
}
func (lf *Symlink) Seek(offset int64, whence int) (int64, error) {
if s, ok := lf.reader.(io.Seeker); ok {
return s.Seek(offset, whence)
}
return 0, ErrNotSupported
return lf.reader.Seek(offset, whence)
}
func (lf *Symlink) Size() (int64, error) {
return 0, ErrNotSupported
return lf.reader.Size(), nil
}
func ToSymlink(n Node) *Symlink {
......
......@@ -99,7 +99,7 @@ func (w *multipartWalker) nextFile() (Node, error) {
return nil, err
}
return NewLinkFile(string(out), nil), nil
return NewLinkFile(string(out)), nil
default:
return &ReaderFile{
reader: part,
......
......@@ -53,7 +53,7 @@ func NewSerialFile(path string, hidden bool, stat os.FileInfo) (Node, error) {
if err != nil {
return nil, err
}
return NewLinkFile(target, stat), nil
return NewLinkFile(target), nil
default:
return nil, fmt.Errorf("unrecognized file type for %s: %s", path, mode.String())
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment