aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Ermakov <vooon341@gmail.com>2014-09-17 20:02:32 +0400
committerVladimir Ermakov <vooon341@gmail.com>2014-09-17 20:02:32 +0400
commit407a4e0f0675f0b283eea0632208c8c3f8b9ca20 (patch)
treee3147c0751f7d59a348514c59ac039defa9e59d3
parentf55d20a133397b2529826f015bec3452294ad4c2 (diff)
downloadpx4-firmware-407a4e0f0675f0b283eea0632208c8c3f8b9ca20.tar.gz
px4-firmware-407a4e0f0675f0b283eea0632208c8c3f8b9ca20.tar.bz2
px4-firmware-407a4e0f0675f0b283eea0632208c8c3f8b9ca20.zip
FTP: fix truncate errors. Also correct errno reporting.
Seems that warnx() everytime changes originak errno to EINVAL.
-rw-r--r--src/modules/mavlink/mavlink_ftp.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/modules/mavlink/mavlink_ftp.cpp b/src/modules/mavlink/mavlink_ftp.cpp
index 6865655da..14a42ed72 100644
--- a/src/modules/mavlink/mavlink_ftp.cpp
+++ b/src/modules/mavlink/mavlink_ftp.cpp
@@ -230,6 +230,7 @@ out:
warnx("FTP: ack\n");
#endif
} else {
+ int r_errno = errno;
warnx("FTP: nak %u", errorCode);
payload->req_opcode = payload->opcode;
payload->opcode = kRspNak;
@@ -237,7 +238,7 @@ out:
payload->data[0] = errorCode;
if (errorCode == kErrFailErrno) {
payload->size = 2;
- payload->data[1] = errno;
+ payload->data[1] = r_errno;
}
}
@@ -544,8 +545,7 @@ MavlinkFTP::_workTruncateFile(PayloadHeader* payload)
}
// check perms allow us to write (not romfs)
- int mode = st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
- if (!(mode & ~(S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH))) {
+ if (!(st.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH))) {
errno = EROFS;
return kErrFailErrno;
}
@@ -571,7 +571,7 @@ MavlinkFTP::_workTruncateFile(PayloadHeader* payload)
return kErrFailErrno;
}
- if (lseek(fd, payload->offset - 1, SEEK_SET) != 0) {
+ if (lseek(fd, payload->offset - 1, SEEK_SET) < 0) {
::close(fd);
return kErrFailErrno;
}