summaryrefslogtreecommitdiff
path: root/source4/lib/registry/patchfile_preg.c
diff options
context:
space:
mode:
authorWilco Baan Hofman <wilco@synlap.(none)>2008-04-15 21:35:59 +0200
committerWilco Baan Hofman <wilco@synlap.(none)>2008-04-15 21:35:59 +0200
commit439f75f522d241aa78f06572c47ff6b871289793 (patch)
tree228c2082cd44a1fc71b92f81218e2ac0f799e93b /source4/lib/registry/patchfile_preg.c
parent5e687d79533684949deb9bd9bc86f88eab4ae310 (diff)
downloadsamba-439f75f522d241aa78f06572c47ff6b871289793.tar.gz
samba-439f75f522d241aa78f06572c47ff6b871289793.tar.bz2
samba-439f75f522d241aa78f06572c47ff6b871289793.zip
More patchfile fixes. Write support should work now.
(This used to be commit cc38f2f086b92bbe65bd6e7f4e03fdf7f21ef2f6)
Diffstat (limited to 'source4/lib/registry/patchfile_preg.c')
-rw-r--r--source4/lib/registry/patchfile_preg.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/source4/lib/registry/patchfile_preg.c b/source4/lib/registry/patchfile_preg.c
index ea41a9e21b..c2bc8d10b3 100644
--- a/source4/lib/registry/patchfile_preg.c
+++ b/source4/lib/registry/patchfile_preg.c
@@ -92,27 +92,40 @@ static WERROR reg_preg_diff_del_key(void *_data, const char *key_name)
DATA_BLOB blob;
parent_name = talloc_strndup(data->ctx, key_name, strrchr(key_name, '\\')-key_name);
- blob.data = (void *)talloc_strndup(data->ctx, key_name,
+ blob.data = (void *)talloc_strndup(data->ctx, key_name+(strrchr(key_name, '\\')-key_name)+1,
strlen(key_name)-(strrchr(key_name, '\\')-key_name));
blob.length = strlen((char *)blob.data)+1;
/* FIXME: These values should be accumulated to be written at done(). */
- reg_preg_diff_set_value(_data, parent_name, "**DeleteKeys", REG_SZ, blob);
-
- return WERR_OK;
+ return reg_preg_diff_set_value(data, parent_name, "**DeleteKeys", REG_SZ, blob);
}
-/* FIXME These functions need to be implemented */
static WERROR reg_preg_diff_del_value(void *_data, const char *key_name,
const char *value_name)
{
- return WERR_NOT_SUPPORTED;
+ struct preg_data *data = _data;
+ char *val;
+ DATA_BLOB blob;
+
+ val = talloc_asprintf(data->ctx, "**Del.%s", value_name);
+
+ blob.data = (void *)talloc(data->ctx, uint32_t);
+ *(uint32_t *)blob.data = 0;
+ blob.length = 4;
+ return reg_preg_diff_set_value(data, key_name, val, REG_DWORD, blob);
}
static WERROR reg_preg_diff_del_all_values(void *_data, const char *key_name)
{
- return WERR_NOT_SUPPORTED;
+ struct preg_data *data = _data;
+ DATA_BLOB blob;
+
+ blob.data = (void *)talloc(data->ctx, uint32_t);
+ *(uint32_t *)blob.data = 0;
+ blob.length = 4;
+
+ return reg_preg_diff_set_value(data, key_name, "**DelVals.", REG_DWORD, blob);
}
static WERROR reg_preg_diff_done(void *_data)