From 63bc7675938325c425dc321e8b65fff71947914c Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Fri, 14 Apr 2023 18:29:04 +0200 Subject: [PATCH] src/confd: refactor sr_get_int() into a generic srx_get_int() Signed-off-by: Joachim Wiberg --- src/confd/src/ietf-system.c | 64 ++----------------------------------- src/confd/src/srx_val.c | 48 ++++++++++++++++++++++++++++ src/confd/src/srx_val.h | 4 ++- 3 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/confd/src/ietf-system.c b/src/confd/src/ietf-system.c index 364e0390..040a547d 100644 --- a/src/confd/src/ietf-system.c +++ b/src/confd/src/ietf-system.c @@ -251,64 +251,6 @@ static int sys_reload_services(void) return systemf("initctl -nbq touch sysklogd lldpd"); } -int sr_get_int(sr_session_ctx_t *session, const char *fmt, ...) -{ - sr_val_t *val = NULL; - char *xpath; - va_list ap; - int rc = 0; - int len; - - va_start(ap, fmt); - len = vsnprintf(NULL, 0, fmt, ap) + 1; - va_end(ap); - - xpath = alloca(len); - if (!xpath) - goto fail; - - va_start(ap, fmt); - vsnprintf(xpath, len, fmt, ap); - va_end(ap); - - if (sr_get_item(session, xpath, 0, &val) || !val) - goto fail; - - switch (val->type) { - case SR_INT8_T: - rc = val->data.int8_val; - break; - case SR_UINT8_T: - rc = val->data.uint8_val; - break; - case SR_INT16_T: - rc = val->data.int16_val; - break; - case SR_UINT16_T: - rc = val->data.uint16_val; - break; - case SR_INT32_T: - rc = val->data.int32_val; - break; - case SR_UINT32_T: - rc = val->data.uint32_val; - break; - case SR_INT64_T: - rc = val->data.int64_val; - break; - case SR_UINT64_T: - rc = val->data.uint64_val; - break; - default: - goto fail; - } - -fail: - if (val) - sr_free_val(val); - return rc; -} - #define TIMEZONE_CONF "/etc/timezone" #define TIMEZONE_PREV TIMEZONE_CONF "-" #define TIMEZONE_NEXT TIMEZONE_CONF "+" @@ -497,7 +439,7 @@ static int change_dns(sr_session_ctx_t *session, uint32_t sub_id, const char *mo const char *xpath, sr_event_t event, unsigned request_id, void *priv) { const char *fn = RESOLV_NEXT; - int timeout, attempts; + int timeout = 0, attempts = 0; int rc = SR_ERR_SYS; sr_val_t *val; size_t cnt; @@ -540,8 +482,8 @@ static int change_dns(sr_session_ctx_t *session, uint32_t sub_id, const char *mo return SR_ERR_SYS; } - timeout = sr_get_int(session, "/ietf-system:system/dns-resolver/options/timeout"); - attempts = sr_get_int(session, "/ietf-system:system/dns-resolver/options/attempts"); + SRX_GET_UINT8(session, timeout, "/ietf-system:system/dns-resolver/options/timeout"); + SRX_GET_UINT8(session, timeout, "/ietf-system:system/dns-resolver/options/attempts"); if (timeout || attempts) { fprintf(fp, "options"); if (timeout) diff --git a/src/confd/src/srx_val.c b/src/confd/src/srx_val.c index 48515949..5dd21b30 100644 --- a/src/confd/src/srx_val.c +++ b/src/confd/src/srx_val.c @@ -49,6 +49,54 @@ fail: return result; } +int srx_get_int(sr_session_ctx_t *session, int *result, sr_val_type_t type, const char *fmt, ...) +{ + sr_val_t *val = NULL; + va_list ap; + int rc; + + va_start(ap, fmt); + rc = srx_vaget(session, fmt, ap, &val, type); + va_end(ap); + + if (rc) + return rc; + rc = -1; + + switch (val->type) { + case SR_INT8_T: + *result = val->data.int8_val; + break; + case SR_UINT8_T: + *result = val->data.uint8_val; + break; + case SR_INT16_T: + *result = val->data.int16_val; + break; + case SR_UINT16_T: + *result = val->data.uint16_val; + break; + case SR_INT32_T: + *result = val->data.int32_val; + break; + case SR_UINT32_T: + *result = val->data.uint32_val; + break; + case SR_INT64_T: + *result = val->data.int64_val; + break; + case SR_UINT64_T: + *result = val->data.uint64_val; + break; + default: + goto fail; + } + + rc = 0; +fail: + sr_free_val(val); + return rc; +} char *srx_get_str(sr_session_ctx_t *session, const char *fmt, ...) { diff --git a/src/confd/src/srx_val.h b/src/confd/src/srx_val.h index da72b4f2..80d996fd 100644 --- a/src/confd/src/srx_val.h +++ b/src/confd/src/srx_val.h @@ -3,10 +3,12 @@ #ifndef CONFD_SRX_VAL_H_ #define CONFD_SRX_VAL_H_ - #include "core.h" +#define SRX_GET_UINT8(s,v,fmt,...) srx_get_int(s, &v, SR_UINT8_T, fmt, ##__VA_ARGS__) + char *srx_get_str (sr_session_ctx_t *session, const char *fmt, ...); +int srx_get_int (sr_session_ctx_t *session, int *result, sr_val_type_t type, const char *fmt, ...); int srx_get_bool (sr_session_ctx_t *session, const char *fmt, ...); #endif /* CONFD_SRX_VAL_H_ */