diff options
author | John Levon <john.levon@joyent.com> | 2020-04-01 14:58:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-01 14:58:25 +0100 |
commit | a4a43b983024104a82e95c2647b94f767d62a8eb (patch) | |
tree | 57ccba9faa7b25da0ab082799ac1d41fe9447caa /usr/src/lib/libdemangle/common/demangle.c | |
parent | 280f87530631a519eb45e763050d2e0b3e55d499 (diff) | |
parent | f559d4b8282f7f6a9c3e1546000352c62e12481a (diff) | |
download | illumos-joyent-OS-8148.tar.gz |
Merge branch 'master' into OS-8148OS-8148
Diffstat (limited to 'usr/src/lib/libdemangle/common/demangle.c')
-rw-r--r-- | usr/src/lib/libdemangle/common/demangle.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/usr/src/lib/libdemangle/common/demangle.c b/usr/src/lib/libdemangle/common/demangle.c index 4f8e9ad678..b6db356416 100644 --- a/usr/src/lib/libdemangle/common/demangle.c +++ b/usr/src/lib/libdemangle/common/demangle.c @@ -21,6 +21,7 @@ #include <pthread.h> #include <sys/ctype.h> #include <sys/debug.h> +#include <sys/sysmacros.h> #include <stdarg.h> #include "demangle-sys.h" #include "demangle_int.h" @@ -31,19 +32,40 @@ static pthread_once_t debug_once = PTHREAD_ONCE_INIT; volatile boolean_t demangle_debug; FILE *debugf = stderr; +static struct { + const char *str; + sysdem_lang_t lang; +} lang_tbl[] = { + { "auto", SYSDEM_LANG_AUTO }, + { "c++", SYSDEM_LANG_CPP }, + { "rust", SYSDEM_LANG_RUST }, +}; + static const char * langstr(sysdem_lang_t lang) { - switch (lang) { - case SYSDEM_LANG_AUTO: - return ("auto"); - case SYSDEM_LANG_CPP: - return ("c++"); - case SYSDEM_LANG_RUST: - return ("rust"); - default: - return ("invalid"); + size_t i; + + for (i = 0; i < ARRAY_SIZE(lang_tbl); i++) { + if (lang == lang_tbl[i].lang) + return (lang_tbl[i].str); } + return ("invalid"); +} + +boolean_t +sysdem_parse_lang(const char *str, sysdem_lang_t *langp) +{ + size_t i; + + for (i = 0; i < ARRAY_SIZE(lang_tbl); i++) { + if (strcmp(str, lang_tbl[i].str) == 0) { + *langp = lang_tbl[i].lang; + return (B_TRUE); + } + } + + return (B_FALSE); } static sysdem_lang_t |