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);
- return ret;
+ convert_string_talloc_convenience(mem_ctx,
+ iconv_convenience,
+ CH_UTF16, CH_UNIX,
+ data.data,
+ data.length,
+ (void **)&ret,
+ NULL, false);
+ break;
case REG_BINARY:
- ret = data_blob_hex_string(mem_ctx, &data);
- return ret;
+ ret = data_blob_hex_string_upper(mem_ctx, &data);
+ 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_NONE:
+ /* "NULL" is the right return value */
+ break;
case REG_MULTI_SZ:
- /* FIXME */
+ /* FIXME: We don't support this yet */
break;
default:
+ /* FIXME */
+ /* Other datatypes aren't supported -> return "NULL" */
break;
}
/* Convert data appropriately */
- switch (*type)
- {
+ switch (*type) {
case REG_SZ:
case REG_EXPAND_SZ:
- data->length = convert_string_talloc_convenience(mem_ctx, iconv_convenience, CH_UNIX, CH_UTF16,
- data_str, strlen(data_str),
- (void **)&data->data);
+ convert_string_talloc_convenience(mem_ctx,
+ iconv_convenience,
+ CH_UNIX, CH_UTF16,
+ data_str,
+ strlen(data_str)+1,
+ (void **)&data->data,
+ &data->length, false);
+ break;
+ case REG_BINARY:
+ *data = strhex_to_data_blob(mem_ctx, data_str);
break;
-
case REG_DWORD: {
uint32_t tmp = strtol(data_str, NULL, 0);
*data = data_blob_talloc(mem_ctx, &tmp, 4);
}
break;
-
case REG_NONE:
ZERO_STRUCTP(data);
break;
-
- case REG_BINARY:
- *data = strhex_to_data_blob(mem_ctx, data_str);
- break;
-
+ case REG_MULTI_SZ:
+ /* FIXME: We don't support this yet */
+ return false;
default:
/* FIXME */
+ /* Other datatypes aren't supported -> return no success */
return false;
}
return true;