diff --git a/src/confd/src/srx_val.c b/src/confd/src/srx_val.c index deef33fc..7e5e7b43 100644 --- a/src/confd/src/srx_val.c +++ b/src/confd/src/srx_val.c @@ -3,6 +3,25 @@ #include #include "core.h" +sr_error_t srx_get_diff(sr_session_ctx_t *session, struct lyd_node **treep) +{ + sr_error_t err = SR_ERR_OK; + sr_change_iter_t *iter; + struct lyd_node *tree; + + err = sr_dup_changes_iter(session, "/ietf-system:system//.", &iter); + + /* WARNING: sr_change_iter_t is opaque, we rely on the diff + * tree being the first member. */ + tree = *((struct lyd_node **)iter); + + if (lyd_dup_single(tree, NULL, LYD_DUP_RECURSIVE, treep)) + err = SR_ERR_LY; + + sr_free_change_iter(iter); + return err; +} + int srx_set_item(sr_session_ctx_t *session, const sr_val_t *val, sr_edit_options_t opts, const char *fmt, ...) { diff --git a/src/confd/src/srx_val.h b/src/confd/src/srx_val.h index 3ff8eacc..052a490f 100644 --- a/src/confd/src/srx_val.h +++ b/src/confd/src/srx_val.h @@ -8,6 +8,8 @@ #define SRX_GET_UINT8(s,v,fmt,...) srx_get_int(s, &v, SR_UINT8_T, fmt, ##__VA_ARGS__) #define SRX_GET_UINT32(s,v,fmt,...) srx_get_int(s, &v, SR_UINT32_T, fmt, ##__VA_ARGS__) +sr_error_t srx_get_diff(sr_session_ctx_t *session, struct lyd_node **treep); + int srx_set_item(sr_session_ctx_t *session, const sr_val_t *val, sr_edit_options_t opts, const char *fmt, ...) __attribute__ ((format (printf, 4, 5)));