From: Simon Marchi Date: Fri, 20 Aug 2021 20:10:37 +0000 (-0400) Subject: common: move append_str to string-utils X-Git-Tag: v2.13.2~12 X-Git-Url: https://git.liburcu.org/?p=lttng-tools.git;a=commitdiff_plain;h=5b770521bbf951df78c52ea4c2b7cf9e0dc1bd5e common: move append_str to string-utils Move the append_str function from filter-visitor-generate-bytecode.c to the string-utils lib, so that it can be re-used elsewhere. Change-Id: Ica09cb750ac7f3f2d6f3fb5fc786b683ceb6f79a Signed-off-by: Simon Marchi Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/filter/filter-visitor-generate-bytecode.c b/src/common/filter/filter-visitor-generate-bytecode.c index 8bf87d7c6..938f7d8a9 100644 --- a/src/common/filter/filter-visitor-generate-bytecode.c +++ b/src/common/filter/filter-visitor-generate-bytecode.c @@ -19,6 +19,7 @@ #include "common/bytecode/bytecode.h" #include "common/compat/string.h" #include "common/macros.h" +#include "common/string-utils/string-utils.h" #include "filter-ast.h" #include "filter-ir.h" @@ -59,27 +60,6 @@ int visit_node_root(struct filter_parser_ctx *ctx, struct ir_op *node) return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn)); } -static -int append_str(char **s, const char *append) -{ - char *old = *s; - char *new; - size_t oldlen = (old == NULL) ? 0 : strlen(old); - size_t appendlen = strlen(append); - - new = calloc(oldlen + appendlen + 1, 1); - if (!new) { - return -ENOMEM; - } - if (oldlen) { - strcpy(new, old); - } - strcat(new, append); - *s = new; - free(old); - return 0; -} - /* * 1: match * 0: no match @@ -97,14 +77,14 @@ int load_expression_legacy_match(const struct ir_load_expression *exp, switch (op->type) { case IR_LOAD_EXPRESSION_GET_CONTEXT_ROOT: *op_type = BYTECODE_OP_GET_CONTEXT_REF; - if (append_str(symbol, "$ctx.")) { + if (strutils_append_str(symbol, "$ctx.")) { return -ENOMEM; } need_dot = false; break; case IR_LOAD_EXPRESSION_GET_APP_CONTEXT_ROOT: *op_type = BYTECODE_OP_GET_CONTEXT_REF; - if (append_str(symbol, "$app.")) { + if (strutils_append_str(symbol, "$app.")) { return -ENOMEM; } need_dot = false; @@ -130,10 +110,10 @@ int load_expression_legacy_match(const struct ir_load_expression *exp, case IR_LOAD_EXPRESSION_LOAD_FIELD: goto end; case IR_LOAD_EXPRESSION_GET_SYMBOL: - if (need_dot && append_str(symbol, ".")) { + if (need_dot && strutils_append_str(symbol, ".")) { return -ENOMEM; } - if (append_str(symbol, op->u.symbol)) { + if (strutils_append_str(symbol, op->u.symbol)) { return -ENOMEM; } break; diff --git a/src/common/string-utils/string-utils.c b/src/common/string-utils/string-utils.c index 669f7d05f..526604d14 100644 --- a/src/common/string-utils/string-utils.c +++ b/src/common/string-utils/string-utils.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "string-utils.h" #include "../macros.h" @@ -370,3 +371,24 @@ size_t strutils_array_of_strings_len(char * const *array) return count; } + +LTTNG_HIDDEN +int strutils_append_str(char **s, const char *append) +{ + char *old = *s; + char *new; + size_t oldlen = (old == NULL) ? 0 : strlen(old); + size_t appendlen = strlen(append); + + new = calloc(oldlen + appendlen + 1, 1); + if (!new) { + return -ENOMEM; + } + if (oldlen) { + strcpy(new, old); + } + strcat(new, append); + *s = new; + free(old); + return 0; +} diff --git a/src/common/string-utils/string-utils.h b/src/common/string-utils/string-utils.h index 9d287f3d9..55deba38b 100644 --- a/src/common/string-utils/string-utils.h +++ b/src/common/string-utils/string-utils.h @@ -34,4 +34,15 @@ void strutils_free_null_terminated_array_of_strings(char **array); LTTNG_HIDDEN size_t strutils_array_of_strings_len(char * const *array); +/* + * Append `append` to the malloc-end string `str`. + * + * On success, `str` is free'd (if not NULL) and assigned a new malloc-ed + * string. On failure, `str` is not modified. + * + * Return 0 on success, -ENOMEM on failure. + */ +LTTNG_HIDDEN +int strutils_append_str(char **str, const char *append); + #endif /* _STRING_UTILS_H */