8000 fix issue with reusing opendir file handle · etherscan-io/sftp@54893da · GitHub
[go: up one dir, main page]

Skip to content

Commit 54893da

Browse files
committed
fix issue with reusing opendir file handle
Methods (Stat, Readlink) that only work on sigle file no longer keep any list state. Only the List method now keeps the list progress state. Fixes pkg#256
1 parent 59287c7 commit 54893da

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

request.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,10 @@ func (r *Request) call(handlers Handlers, pkt requestPacket) responsePacket {
177177
return fileput(handlers.FilePut, r, pkt)
178178
case "Setstat", "Rename", "Rmdir", "Mkdir", "Symlink", "Remove":
179179
return filecmd(handlers.FileCmd, r, pkt)
180-
case "List", "Stat", "Readlink":
180+
case "List":
181181
return filelist(handlers.FileList, r, pkt)
182+
case "Stat", "Readlink":
183+
return filestat(handlers.FileList, r, pkt)
182184
default:
183185
return statusFromError(pkt,
184186
errors.Errorf("unexpected method: %s", r.Method))
@@ -292,6 +294,22 @@ func filelist(h FileLister, r *Request, pkt requestPacket) responsePacket {
292294
})
293295
}
294296
return ret
297+
default:
298+
err = errors.Errorf("unexpected method: %s", r.Method)
299+
return statusFromError(pkt, err)
300+
}
301+
}
302+
303+
func filestat(h FileLister, r *Request, pkt requestPacket) responsePacket {
304+
lister, err := h.Filelist(r)
305+
if err != nil {
306+
return statusFromError(pkt, err)
307+
}
308+
finfo := make([]os.FileInfo, 1)
309+
n, err := lister.ListAt(finfo, 0)
310+
finfo = finfo[:n] // avoid need for nil tests below
311+
312+
switch r.Method {
295313
case "Stat":
296314
if err != nil && err != io.EOF {
297315
return statusFromError(pkt, err)

0 commit comments

Comments
 (0)
0