lib/registry/util.c - Reorder the registry datatypes of the conversion functions
[ira/wip.git] / source4 / lib / registry / util.c
index a1897eff2e78e12f4d7ae6d0ada148293d860dfb..f9ea2a193435a7dbe8100bae1e19e520d33800fc 100644 (file)
@@ -63,22 +63,33 @@ _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,
+                                                         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:
+                       /* Other datatypes aren't supported -> return "NULL" */
                        break;
        }
 
@@ -119,31 +130,33 @@ _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),
-                                                    (void **)&data->data, &data->length, false);
+                       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;