diff options
author | Vladimir Ermakov <vooon341@gmail.com> | 2014-09-17 20:02:32 +0400 |
---|---|---|
committer | Vladimir Ermakov <vooon341@gmail.com> | 2014-09-17 20:02:32 +0400 |
commit | 407a4e0f0675f0b283eea0632208c8c3f8b9ca20 (patch) | |
tree | e3147c0751f7d59a348514c59ac039defa9e59d3 /src/modules/mavlink/mavlink_ftp.cpp | |
parent | f55d20a133397b2529826f015bec3452294ad4c2 (diff) | |
download | px4-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.
Diffstat (limited to 'src/modules/mavlink/mavlink_ftp.cpp')
-rw-r--r-- | src/modules/mavlink/mavlink_ftp.cpp | 8 |
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; } |