summaryrefslogtreecommitdiff
path: root/source4/lib/registry
diff options
context:
space:
mode:
authorMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>2009-11-27 21:14:44 +0100
committerMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>2009-11-27 21:17:59 +0100
commit7d400715e9af2056690c03a1a2f45c7f343fa313 (patch)
tree2a282a343120d187b218bf389798fcefc0084891 /source4/lib/registry
parente79dd2ef7d8b2aba7a84df5f5e82d2869a0598fc (diff)
downloadsamba-7d400715e9af2056690c03a1a2f45c7f343fa313.tar.gz
samba-7d400715e9af2056690c03a1a2f45c7f343fa313.tar.bz2
samba-7d400715e9af2056690c03a1a2f45c7f343fa313.zip
s4:registry/util - Don't include the trailing '\0' in the internal data format but add it on the back-conversion to a string
As far as I know the registry library saves all data (including) strings without the null termination. So do it also here in a similar way.
Diffstat (limited to 'source4/lib/registry')
-rw-r--r--source4/lib/registry/util.c41
1 files changed, 27 insertions, 14 deletions
diff --git a/source4/lib/registry/util.c b/source4/lib/registry/util.c
index 88b9d18afa..764660121f 100644
--- a/source4/lib/registry/util.c
+++ b/source4/lib/registry/util.c
@@ -56,6 +56,7 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx,
const DATA_BLOB data)
{
char *ret = NULL;
+ size_t ret_cnt;
if (data.length == 0)
return talloc_strdup(mem_ctx, "");
@@ -63,18 +64,27 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx,
switch (type) {
case REG_EXPAND_SZ:
case REG_SZ:
- convert_string_talloc_convenience(mem_ctx, iconv_convenience, CH_UTF16, CH_UNIX,
- data.data, data.length,
- (void **)&ret, NULL, false);
- return ret;
+ convert_string_talloc_convenience(mem_ctx,
+ iconv_convenience,
+ CH_UTF16, CH_UNIX,
+ data.data,
+ data.length,
+ (void **)&ret,
+ &ret_cnt, false);
+ ret = talloc_realloc(mem_ctx, ret, char, ret_cnt + 1);
+ ret[ret_cnt] = '\0';
+ break;
case REG_BINARY:
ret = data_blob_hex_string_upper(mem_ctx, &data);
- return ret;
+ break;
case REG_DWORD:
- if (*(int *)data.data == 0)
- return talloc_strdup(mem_ctx, "0");
- return talloc_asprintf(mem_ctx, "0x%x",
- *(int *)data.data);
+ if (*(int *)data.data == 0) {
+ ret = talloc_strdup(mem_ctx, "0");
+ } else {
+ ret = talloc_asprintf(mem_ctx, "0x%x",
+ *(int *)data.data);
+ }
+ break;
case REG_MULTI_SZ:
/* FIXME */
break;
@@ -119,13 +129,16 @@ _PUBLIC_ bool reg_string_to_val(TALLOC_CTX *mem_ctx,
/* Convert data appropriately */
- switch (*type)
- {
+ switch (*type) {
case REG_SZ:
case REG_EXPAND_SZ:
- convert_string_talloc_convenience(mem_ctx, iconv_convenience, CH_UNIX, CH_UTF16,
- data_str, strlen(data_str)+1,
- (void **)&data->data, &data->length, false);
+ convert_string_talloc_convenience(mem_ctx,
+ iconv_convenience,
+ CH_UNIX, CH_UTF16,
+ data_str,
+ strlen(data_str),
+ (void **)&data->data,
+ &data->length, false);
break;