aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-01-12 15:53:20 +0100
committerLorenz Meier <lm@inf.ethz.ch>2014-01-12 15:53:20 +0100
commit17a478a190d1349b74f34933a6d300a04fdb229d (patch)
treebdcc360a78838929b59cf05df2b641b2c7d3b592
parent29e2c841bb9d91fa82e41906e4eb420604e9512f (diff)
parent8b5adac0d94506927c8fc2efb39812b422e0e330 (diff)
downloadpx4-firmware-17a478a190d1349b74f34933a6d300a04fdb229d.tar.gz
px4-firmware-17a478a190d1349b74f34933a6d300a04fdb229d.tar.bz2
px4-firmware-17a478a190d1349b74f34933a6d300a04fdb229d.zip
Merge branch 'mtd' into mtd_multi
-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: ",