aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/osmocom/core/utils.h18
-rw-r--r--include/osmocom/ctrl/control_cmd.h3
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;