s3-registry: use push_reg_multi_sz() in registry_push_value().
authorGünther Deschner <gd@samba.org>
Tue, 24 Nov 2009 14:26:32 +0000 (15:26 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 24 Nov 2009 14:48:19 +0000 (15:48 +0100)
Guenther

source3/lib/util_reg_api.c

index 503db77..309fa62 100644 (file)
@@ -155,74 +155,18 @@ WERROR registry_push_value(TALLOC_CTX *mem_ctx,
        }
        case REG_SZ:
        case REG_EXPAND_SZ: {
-               if (!convert_string_talloc(mem_ctx, CH_UNIX, CH_UTF16LE,
-                                          value->v.sz.str,
-                                          MIN(value->v.sz.len,
-                                              strlen(value->v.sz.str)+1),
-                                          (void *)&(presult->data),
-                                          &presult->length, False))
+               if (!push_reg_sz(mem_ctx, presult, value->v.sz.str))
                {
                        return WERR_NOMEM;
                }
                break;
        }
-       case REG_MULTI_SZ: {
-               uint32_t count;
-               size_t len = 0;
-               char **strings;
-               size_t *string_lengths;
-               uint32_t ofs;
-               TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
-               strings = TALLOC_ARRAY(tmp_ctx, char *,
-                                      value->v.multi_sz.num_strings);
-               if (strings == NULL) {
-                       return WERR_NOMEM;
-               }
-
-               string_lengths = TALLOC_ARRAY(tmp_ctx, size_t,
-                                             value->v.multi_sz.num_strings);
-               if (string_lengths == NULL) {
-                       TALLOC_FREE(tmp_ctx);
-                       return WERR_NOMEM;
-               }
-
-               /* convert the single strings */
-               for (count = 0; count < value->v.multi_sz.num_strings; count++)
+       case REG_MULTI_SZ:
+               if (!push_reg_multi_sz(mem_ctx, presult, (const char **)value->v.multi_sz.strings))
                {
-                       if (!convert_string_talloc(strings, CH_UNIX,
-                               CH_UTF16LE, value->v.multi_sz.strings[count],
-                               strlen(value->v.multi_sz.strings[count])+1,
-                               (void *)&strings[count],
-                               &string_lengths[count], false))
-                       {
-
-                               TALLOC_FREE(tmp_ctx);
-                               return WERR_NOMEM;
-                       }
-                       len += string_lengths[count];
-               }
-
-               /* now concatenate all into the data blob */
-               presult->data = TALLOC_ARRAY(mem_ctx, uint8_t, len);
-               if (presult->data == NULL) {
-                       TALLOC_FREE(tmp_ctx);
                        return WERR_NOMEM;
                }
-               for (count = 0, ofs = 0;
-                    count < value->v.multi_sz.num_strings;
-                    count++)
-               {
-                       memcpy(presult->data + ofs, strings[count],
-                              string_lengths[count]);
-                       ofs += string_lengths[count];
-               }
-               presult->length = len;
-
-               TALLOC_FREE(tmp_ctx);
-
                break;
-       }
        case REG_BINARY:
                *presult = data_blob_talloc(mem_ctx,
                                            value->v.binary.data,