diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2014-01-12 15:53:06 +0100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2014-01-12 15:53:06 +0100 |
commit | 8b5adac0d94506927c8fc2efb39812b422e0e330 (patch) | |
tree | 3381ff730eefddf43b132e9b0abec97b888a9e69 /src/systemcmds/param/param.c | |
parent | 5a0c6353690a903b0cbf03aee7cb040726f25fd8 (diff) | |
download | px4-firmware-8b5adac0d94506927c8fc2efb39812b422e0e330.tar.gz px4-firmware-8b5adac0d94506927c8fc2efb39812b422e0e330.tar.bz2 px4-firmware-8b5adac0d94506927c8fc2efb39812b422e0e330.zip |
Support for better param printing
Diffstat (limited to 'src/systemcmds/param/param.c')
-rw-r--r-- | src/systemcmds/param/param.c | 33 |
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: ", |