diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/osmocom/core/utils.h | 18 | ||||
-rw-r--r-- | include/osmocom/ctrl/control_cmd.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h index 5f412139..4b083f6c 100644 --- a/include/osmocom/core/utils.h +++ b/include/osmocom/core/utils.h @@ -85,6 +85,24 @@ static inline void osmo_talloc_replace_string(void *ctx, char **dst, const char *dst = talloc_strdup(ctx, newstr); } +/*! Append to a string and re-/allocate if necessary. + * \param[in] ctx Talloc context to use for initial allocation. + * \param[in,out] dest char* to re-/allocate and append to. + * \param[in] fmt printf-like string format. + * \param[in] args Arguments for fmt. + * + * \a dest may be passed in NULL, or a string previously allocated by talloc. + * If an existing string is passed in, it will remain associated with whichever + * ctx it was allocated before, regardless whether it matches \a ctx or not. + */ +#define osmo_talloc_asprintf(ctx, dest, fmt, args ...) \ + do { \ + if (!dest) \ + dest = talloc_asprintf(ctx, fmt, ## args); \ + else \ + dest = talloc_asprintf_append((char*)dest, fmt, ## args); \ + } while (0) + int osmo_constant_time_cmp(const uint8_t *exp, const uint8_t *rel, const int count); uint64_t osmo_decode_big_endian(const uint8_t *data, size_t data_len); uint8_t *osmo_encode_big_endian(uint64_t value, size_t data_len); diff --git a/include/osmocom/ctrl/control_cmd.h b/include/osmocom/ctrl/control_cmd.h index 77532e66..4372e257 100644 --- a/include/osmocom/ctrl/control_cmd.h +++ b/include/osmocom/ctrl/control_cmd.h @@ -66,6 +66,9 @@ struct ctrl_cmd { char *reply; }; +#define ctrl_cmd_reply_printf(cmd, fmt, args ...) \ + osmo_talloc_asprintf(cmd, cmd->reply, fmt, ## args) + struct ctrl_cmd_struct { int nr_commands; char **command; |