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 | |
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')
-rw-r--r-- | usr/src/lib/libdemangle/common/demangle-sys.h | 3 | ||||
-rw-r--r-- | usr/src/lib/libdemangle/common/demangle.c | 40 | ||||
-rw-r--r-- | usr/src/lib/libdemangle/common/mapfile-vers | 2 |
3 files changed, 35 insertions, 10 deletions
diff --git a/usr/src/lib/libdemangle/common/demangle-sys.h b/usr/src/lib/libdemangle/common/demangle-sys.h index 05776ee5ee..3452d39667 100644 --- a/usr/src/lib/libdemangle/common/demangle-sys.h +++ b/usr/src/lib/libdemangle/common/demangle-sys.h @@ -11,7 +11,7 @@ /* * Copyright 2017 Jason King - * Copyright 2018, Joyent, Inc. + * Copyright 2019 Joyent, Inc. */ #ifndef _DEMANGLE_SYS_H @@ -34,6 +34,7 @@ typedef struct sysdem_alloc_s { void (*free)(void *, size_t); } sysdem_ops_t; +boolean_t sysdem_parse_lang(const char *, sysdem_lang_t *); char *sysdemangle(const char *, sysdem_lang_t, sysdem_ops_t *); #ifdef __cplusplus 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 diff --git a/usr/src/lib/libdemangle/common/mapfile-vers b/usr/src/lib/libdemangle/common/mapfile-vers index 48c11ef0d7..2207547185 100644 --- a/usr/src/lib/libdemangle/common/mapfile-vers +++ b/usr/src/lib/libdemangle/common/mapfile-vers @@ -11,6 +11,7 @@ # # Copyright 2017 Jason King +# Copyright 2019 Joyent, Inc. # # @@ -30,6 +31,7 @@ $mapfile_version 2 SYMBOL_VERSION ILLUMOSprivate { global: + sysdem_parse_lang; sysdemangle; local: *; |