aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-01-12 15:53:06 +0100
committerLorenz Meier <lm@inf.ethz.ch>2014-01-12 15:53:06 +0100
commit8b5adac0d94506927c8fc2efb39812b422e0e330 (patch)
tree3381ff730eefddf43b132e9b0abec97b888a9e69
parent5a0c6353690a903b0cbf03aee7cb040726f25fd8 (diff)
downloadpx4-firmware-8b5adac0d94506927c8fc2efb39812b422e0e330.tar.gz
px4-firmware-8b5adac0d94506927c8fc2efb39812b422e0e330.tar.bz2
px4-firmware-8b5adac0d94506927c8fc2efb39812b422e0e330.zip
Support for better param printing
-rw-r--r--src/systemcmds/param/param.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/systemcmds/param/param.c b/src/systemcmds/param/param.c
index 65f291f40..9e5e6f2e6 100644
--- a/src/systemcmds/param/param.c
+++ b/src/systemcmds/param/param.c
@@ -203,11 +203,38 @@ do_show_print(void *arg, param_t param)
int32_t i;
float f;
const char *search_string = (const char*)arg;
+ const char *p_name = (const char*)param_name(param);
/* print nothing if search string is invalid and not matching */
- if (!(arg == NULL || (!strcmp(search_string, param_name(param))))) {
- /* param not found */
- return;
+ if (!(arg == NULL)) {
+
+ /* start search */
+ char *ss = search_string;
+ char *pp = p_name;
+ bool mismatch = false;
+
+ /* XXX this comparison is only ok for trailing wildcards */
+ while (*ss != '\0' && *pp != '\0') {
+
+ if (*ss == *pp) {
+ ss++;
+ pp++;
+ } else if (*ss == '*') {
+ if (*(ss + 1) != '\0') {
+ warnx("* symbol only allowed at end of search string.");
+ exit(1);
+ }
+
+ pp++;
+ } else {
+ /* param not found */
+ return;
+ }
+ }
+
+ /* the search string must have been consumed */
+ if (!(*ss == '\0' || *ss == '*'))
+ return;
}
printf("%c %s: ",