diff options
author | Matthias Dieter Wallnöfer <mwallnoefer@yahoo.de> | 2009-11-27 21:14:44 +0100 |
---|---|---|
committer | Matthias Dieter Wallnöfer <mwallnoefer@yahoo.de> | 2009-11-27 21:17:59 +0100 |
commit | 7d400715e9af2056690c03a1a2f45c7f343fa313 (patch) | |
tree | 2a282a343120d187b218bf389798fcefc0084891 | |
parent | e79dd2ef7d8b2aba7a84df5f5e82d2869a0598fc (diff) | |
download | samba-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.
-rw-r--r-- | source4/lib/registry/util.c | 41 |
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; |