diff options
author | Nobuyoshi Nakada <[email protected]> | 2024-02-22 13:24:42 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2024-02-22 15:43:46 +0900 |
commit | 97a39ccc2cada2eb5d25ec74169d6a513356ff38 (patch) | |
tree | 9a6ee4eac5095552540fb5b89dc73bf2dce76b9b /dln.c | |
parent | 9f8f32bf9f3758ba67dd2afe7e07d9eccb68bbc7 (diff) |
Split `init_funcname`
Extract `build_funcname` that takes the prefix as an argument, and
`concat_funcname` that concats the parts.
Diffstat (limited to 'dln.c')
-rw-r--r-- | dln.c | 26 |
1 files changed, 16 insertions, 10 deletions
@@ -122,21 +122,27 @@ init_funcname_len(const char **file) return (dot ? dot : p) - base; } -static const char funcname_prefix[sizeof(FUNCNAME_PREFIX) - 1] = FUNCNAME_PREFIX; +static inline char * +concat_funcname(char *buf, const char *prefix, size_t plen, const char *base, size_t flen) +{ + if (!buf) { + dln_memerror(); + } + memcpy(buf, prefix, plen); + memcpy(buf + plen, base, flen); + buf[plen + flen] = '\0'; + return buf; +} -#define init_funcname(buf, file) do {\ +#define build_funcname(prefix, buf, file) do {\ const char *base = (file);\ const size_t flen = init_funcname_len(&base);\ - const size_t plen = sizeof(funcname_prefix);\ + const size_t plen = sizeof(prefix "") - 1;\ char *const tmp = ALLOCA_N(char, plen+flen+1);\ - if (!tmp) {\ - dln_memerror();\ - }\ - memcpy(tmp, funcname_prefix, plen);\ - memcpy(tmp+plen, base, flen);\ - tmp[plen+flen] = '\0';\ - *(buf) = tmp;\ + *(buf) = concat_funcname(tmp, prefix, plen, base, flen);\ } while (0) + +#define init_funcname(buf, file) build_funcname(FUNCNAME_PREFIX, buf, file) #endif #ifdef USE_DLN_DLOPEN |