From 3a5caab17d8a05178bffd77fb481be5109517d3e Mon Sep 17 00:00:00 2001 From: Mihail Chindris Date: Wed, 16 Jun 2021 18:45:42 +0100 Subject: [PATCH] context.c: Replace sanitize code with function This function can be used in other similar scenarios where sanitization is needed Signed-off-by: Mihail Chindris --- context.c | 39 +++++++++++++++++++++++++++++++-------- iio-private.h | 4 ++++ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/context.c b/context.c index d74f6a046..0fab1f2a7 100644 --- a/context.c +++ b/context.c @@ -70,6 +70,32 @@ static ssize_t sanitize_xml(char *ptr, ssize_t len, const char *str) return count; } +ssize_t iio_xml_print_and_sanitized_param(char *ptr, ssize_t len, + const char *before, char *param, + const char *after) +{ + ssize_t ret, alen = 0; + + /* Print before */ + ret = iio_snprintf(ptr, len, "%s", before); + if (ret < 0) + return ret; + iio_update_xml_indexes(ret, &ptr, &len, &alen); + + /* Print param */ + ret = sanitize_xml(ptr, len, param); + if (ret < 0) + return ret; + iio_update_xml_indexes(ret, &ptr, &len, &alen); + + /* Print after */ + ret = iio_snprintf(ptr, len, "%s", after); + if (ret < 0) + return ret; + + return alen + ret; +} + static ssize_t iio_snprintf_context_xml(char *ptr, ssize_t len, const struct iio_context *ctx) { @@ -91,18 +117,15 @@ static ssize_t iio_snprintf_context_xml(char *ptr, ssize_t len, for (i = 0; i < ctx->nb_attrs; i++) { ret = iio_snprintf(ptr, len, - "attrs[i]); if (ret < 0) return ret; - iio_update_xml_indexes(ret, &ptr, &len, &alen); - ret = sanitize_xml(ptr, len, ctx->values[i]); - if (ret < 0) - return ret; - - iio_update_xml_indexes(ret, &ptr, &len, &alen); - ret = iio_snprintf(ptr, len, "\" />"); + ret = iio_xml_print_and_sanitized_param(ptr, len, + "value=\"", + ctx->values[i], + "\" />"); if (ret < 0) return ret; diff --git a/iio-private.h b/iio-private.h index 3ab87d84c..aaafd8746 100644 --- a/iio-private.h +++ b/iio-private.h @@ -271,6 +271,10 @@ int add_iio_dev_attr(struct iio_dev_attrs *attrs, const char *attr, ssize_t __iio_printf iio_snprintf(char *buf, size_t len, const char *fmt, ...); +ssize_t iio_xml_print_and_sanitized_param(char *ptr, ssize_t len, + const char *before, char *param, + const char *after); + static inline void iio_update_xml_indexes(ssize_t ret, char **ptr, ssize_t *len, ssize_t *alen) {