aboutsummaryrefslogtreecommitdiff
path: root/src/modules/mavlink/mavlink_main.cpp
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2014-03-14 14:40:54 +0100
committerThomas Gubler <thomasgubler@gmail.com>2014-03-14 14:42:35 +0100
commit6b79f533388ab78ddbbb8cc316b38c6e7403e46a (patch)
tree4a4eceb055e6267ea0a5a7620c8c5df029a62ed8 /src/modules/mavlink/mavlink_main.cpp
parent2d2ecbad00c4f21d0c3ded2faa4f9bdb7adefddc (diff)
downloadpx4-firmware-6b79f533388ab78ddbbb8cc316b38c6e7403e46a.tar.gz
px4-firmware-6b79f533388ab78ddbbb8cc316b38c6e7403e46a.tar.bz2
px4-firmware-6b79f533388ab78ddbbb8cc316b38c6e7403e46a.zip
mavlink stream: do not use getopt as it leads to problems with the global optarg variable
Diffstat (limited to 'src/modules/mavlink/mavlink_main.cpp')
-rw-r--r--src/modules/mavlink/mavlink_main.cpp37
1 files changed, 17 insertions, 20 deletions
diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp
index d722bec46..f1a1f9568 100644
--- a/src/modules/mavlink/mavlink_main.cpp
+++ b/src/modules/mavlink/mavlink_main.cpp
@@ -1538,7 +1538,7 @@ Mavlink::configure_stream_threadsafe(const char *stream_name, const float rate)
/* copy stream name */
unsigned n = strlen(stream_name) + 1;
char *s = new char[n];
- memcpy(s, stream_name, n);
+ strcpy(s, stream_name);
/* set subscription task */
_subscribe_to_stream_rate = rate;
@@ -1959,36 +1959,33 @@ Mavlink::stream(int argc, char *argv[])
const char *stream_name = nullptr;
int ch;
- argc -= 1;
- argv += 1;
+ argc -= 2;
+ argv += 2;
/* don't exit from getopt loop to leave getopt global variables in consistent state,
* set error flag instead */
bool err_flag = false;
- while ((ch = getopt(argc, argv, "r:d:s:")) != EOF) {
- switch (ch) {
- case 'r':
- rate = strtod(optarg, nullptr);
+ int i = 0;
+ while (i < argc) {
+ if (0 == strcmp(argv[i], "-r") && i < argc - 1 ) {
+ rate = strtod(argv[i+1], nullptr);
if (rate < 0.0f) {
err_flag = true;
}
-
- break;
-
- case 'd':
- device_name = optarg;
- break;
-
- case 's':
- stream_name = optarg;
- break;
-
- default:
+ i++;
+ } else if (0 == strcmp(argv[i], "-d") && i < argc - 1 ) {
+ device_name = argv[i+1];
+ i++;
+ } else if (0 == strcmp(argv[i], "-s") && i < argc - 1 ) {
+ stream_name = argv[i+1];
+ i++;
+ } else {
err_flag = true;
- break;
}
+
+ i++;
}
if (!err_flag && rate >= 0.0 && stream_name != nullptr) {