aboutsummaryrefslogtreecommitdiff
path: root/src/modules/mavlink/mavlink_ftp.cpp
diff options
context:
space:
mode:
authorVladimir Ermakov <vooon341@gmail.com>2014-09-22 13:48:43 +0400
committerVladimir Ermakov <vooon341@gmail.com>2014-09-22 13:48:43 +0400
commit8eb310061693c86a9c8b3c7f6e2bab1ec680c46a (patch)
treeb012c56604f7e66544d2806b80bfc94443f6436b /src/modules/mavlink/mavlink_ftp.cpp
parent407a4e0f0675f0b283eea0632208c8c3f8b9ca20 (diff)
downloadpx4-firmware-8eb310061693c86a9c8b3c7f6e2bab1ec680c46a.tar.gz
px4-firmware-8eb310061693c86a9c8b3c7f6e2bab1ec680c46a.tar.bz2
px4-firmware-8eb310061693c86a9c8b3c7f6e2bab1ec680c46a.zip
FTP: Rename command.
Payload: `<oldpath>\0<newpath>` See: man 2 rename
Diffstat (limited to 'src/modules/mavlink/mavlink_ftp.cpp')
-rw-r--r--src/modules/mavlink/mavlink_ftp.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/modules/mavlink/mavlink_ftp.cpp b/src/modules/mavlink/mavlink_ftp.cpp
index 14a42ed72..117cc4ec1 100644
--- a/src/modules/mavlink/mavlink_ftp.cpp
+++ b/src/modules/mavlink/mavlink_ftp.cpp
@@ -204,6 +204,10 @@ MavlinkFTP::_process_request(Request *req)
errorCode = _workRemoveFile(payload);
break;
+ case kCmdRename:
+ errorCode = _workRename(payload);
+ break;
+
case kCmdTruncateFile:
errorCode = _workTruncateFile(payload);
break;
@@ -629,6 +633,33 @@ MavlinkFTP::_workReset(PayloadHeader* payload)
return kErrNone;
}
+/// @brief Responds to a Rename command
+MavlinkFTP::ErrorCode
+MavlinkFTP::_workRename(PayloadHeader* payload)
+{
+ char oldpath[kMaxDataLength];
+ char newpath[kMaxDataLength];
+
+ char *ptr = _data_as_cstring(payload);
+ size_t oldpath_sz = strlen(ptr);
+
+ if (oldpath_sz == payload->size) {
+ // no newpath
+ errno = EINVAL;
+ return kErrFailErrno;
+ }
+
+ strncpy(oldpath, ptr, kMaxDataLength);
+ strncpy(newpath, ptr + oldpath_sz + 1, kMaxDataLength);
+
+ if (rename(oldpath, newpath) == 0) {
+ payload->size = 0;
+ return kErrNone;
+ } else {
+ return kErrFailErrno;
+ }
+}
+
/// @brief Responds to a RemoveDirectory command
MavlinkFTP::ErrorCode
MavlinkFTP::_workRemoveDirectory(PayloadHeader* payload)