Merge pull request #216 from pkg/issue214/empty-file
respect create flag in open packet
diff --git a/request-server.go b/request-server.go
index 7a9f608..67d57f8 100644
--- a/request-server.go
+++ b/request-server.go
@@ -152,7 +152,12 @@
case *sshFxpRealpathPacket:
rpkt = cleanPacketPath(pkt)
case isOpener:
- handle := rs.nextRequest(requestFromPacket(pkt))
+ request := requestFromPacket(pkt)
+ handle := rs.nextRequest(request)
+ p, ok := pkt.(*sshFxpOpenPacket)
+ if ok && p.hasPflags(ssh_FXF_CREAT) {
+ request.call(rs.Handlers, pkt)
+ }
rpkt = sshFxpHandlePacket{pkt.id(), handle}
case *sshFxpFstatPacket:
handle := pkt.getHandle()
diff --git a/request-server_test.go b/request-server_test.go
index 225dcf8..074e3f4 100644
--- a/request-server_test.go
+++ b/request-server_test.go
@@ -127,6 +127,20 @@
assert.Equal(t, f.content, []byte("hello"))
}
+func TestRequestWriteEmpty(t *testing.T) {
+ p := clientRequestServerPair(t)
+ defer p.Close()
+ n, err := putTestFile(p.cli, "/foo", "")
+ assert.Nil(t, err)
+ assert.Equal(t, 0, n)
+ r := p.testHandler()
+ f, err := r.fetch("/foo")
+ if assert.Nil(t, err) {
+ assert.False(t, f.isdir)
+ assert.Equal(t, f.content, []byte(""))
+ }
+}
+
// needs fail check
func TestRequestFilename(t *testing.T) {
p := clientRequestServerPair(t)
diff --git a/request.go b/request.go
index 57b50ec..13f5382 100644
--- a/request.go
+++ b/request.go
@@ -135,7 +135,7 @@
switch r.Method {
case "Get":
return fileget(handlers.FileGet, r, pd)
- case "Put": // add "Append" to this to handle append only file writes
+ case "Put", "Open": // add "Append" to handle append only file writes
return fileput(handlers.FilePut, r, pd)
case "Setstat", "Rename", "Rmdir", "Mkdir", "Symlink", "Remove":
return filecmd(handlers.FileCmd, r, pd)