forked from Archive/PX4-Autopilot
mavlink stream: do not use getopt as it leads to problems with the global optarg variable
This commit is contained in:
parent
2d2ecbad00
commit
6b79f53338
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue