+static WERROR regval_hilvl_to_lolvl(TALLOC_CTX *mem_ctx, const char *valname,
+ struct registry_value *src,
+ REGISTRY_VALUE **dst)
+{
+ WERROR err;
+ DATA_BLOB value_data;
+ REGISTRY_VALUE *newval = NULL;
+
+ if (dst == NULL) {
+ return WERR_INVALID_PARAM;
+ }
+
+ err = registry_push_value(mem_ctx, src, &value_data);
+ if (!W_ERROR_IS_OK(err)) {
+ DEBUG(10, ("error calling registry_push_value.\n"));
+ return err;
+ }
+
+ newval = regval_compose(mem_ctx, valname, src->type,
+ (char *)value_data.data, value_data.length);
+ if (newval == NULL) {
+ DEBUG(10, ("error composing registry value. (no memory?)\n"));
+ return WERR_NOMEM;
+ }
+
+ *dst = newval;
+ return WERR_OK;
+}
+
+static WERROR regval_lolvl_to_hilvl(TALLOC_CTX *mem_ctx, REGISTRY_VALUE *src,
+ struct registry_value **dst)
+{
+ if (dst == NULL) {
+ return WERR_INVALID_PARAM;
+ }
+
+ return registry_pull_value(mem_ctx, dst, regval_type(src),
+ regval_data_p(src), regval_size(src),
+ regval_size(src));
+}
+