From 61946f580b7e6bdb4e753adb49cca44b23b21e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Wed, 9 Jan 2008 19:29:35 +0000 Subject: [PATCH] sftp doesn't allow renaming to an existing file, so remove it first. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23325 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/codycam/SftpClient.cpp | 26 ++++++++++++++++++++++++-- src/apps/codycam/VideoConsumer.cpp | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/apps/codycam/SftpClient.cpp b/src/apps/codycam/SftpClient.cpp index 69b2038640..6bee9c0b7b 100644 --- a/src/apps/codycam/SftpClient.cpp +++ b/src/apps/codycam/SftpClient.cpp @@ -167,10 +167,32 @@ SftpClient::MoveFile(const string& oldPath, const string& newPath) { bool rc = false; int len; - BString cmd("rename"); - cmd << " " << oldPath.c_str() << " " << newPath.c_str() << "\n"; + + // sftpd can't rename to an existing file... + BString cmd("rm"); + cmd << " " << newPath.c_str() << "\n"; SendCommand(cmd.String()); BString reply; + + if ((len = ReadReply(&reply)) < 0) { + fprintf(stderr, "read: %s\n", len); + return false; + } + fprintf(stderr, "reply: '%s'\n", reply.String()); + if (reply.FindFirst("Removing") != 0) + return false; + + if ((len = ReadReply(&reply)) < 0) { + fprintf(stderr, "read: %s\n", len); + return false; + } + fprintf(stderr, "reply: '%s'\n", reply.String()); + if (reply.FindFirst("sftp>") < 0) + return false; + + cmd = "rename"; + cmd << " " << oldPath.c_str() << " " << newPath.c_str() << "\n"; + SendCommand(cmd.String()); if ((len = ReadReply(&reply)) < 0) { fprintf(stderr, "read: %s\n", len); return false; diff --git a/src/apps/codycam/VideoConsumer.cpp b/src/apps/codycam/VideoConsumer.cpp index 436974becd..8cc3705e45 100644 --- a/src/apps/codycam/VideoConsumer.cpp +++ b/src/apps/codycam/VideoConsumer.cpp @@ -707,7 +707,7 @@ VideoConsumer::FtpSave(char* filename) if (ftp->PutFile((string)filename, (string)"temp")) { // send the file to the server - ftp->Chmod((string)filename, (string)"644"); + ftp->Chmod((string)"temp", (string)"644"); // make it world readable UpdateFtpStatus("Renaming ...");