2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
4 * Copyright (C) Gerald Carter 2002.
5 * Copyright (C) Jelmer Vernooij 2003-2004.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 /* Implementation of registry frontend view functions. */
25 #include "lib/registry/common/registry.h"
28 #define DBGC_CLASS DBGC_RPC_SRV
30 /***********************************************************************
31 allocate memory for and duplicate a REG_VAL.
32 This is malloc'd memory so the caller should free it when done
33 **********************************************************************/
35 REG_VAL* reg_val_dup( REG_VAL *val )
41 /**********************************************************************
42 free the memory allocated to a REG_VAL
43 *********************************************************************/
45 void reg_val_free( REG_VAL *val )
50 if(val->handle->functions->free_val_backend_data)
51 val->handle->functions->free_val_backend_data(val);
53 talloc_destroy( val->mem_ctx );
58 /**********************************************************************
59 *********************************************************************/
61 uint8* reg_val_data_blk( REG_VAL *val )
66 /**********************************************************************
67 *********************************************************************/
69 int reg_val_size( REG_VAL *val )
74 /**********************************************************************
75 *********************************************************************/
77 char *reg_val_name( REG_VAL *val )
82 /**********************************************************************
83 *********************************************************************/
85 uint32 reg_val_type( REG_VAL *val )
87 return val->data_type;
90 /**********************************************************************
91 *********************************************************************/
93 char *reg_key_name( REG_KEY *key )
98 REG_KEY *reg_key_dup(REG_KEY *key)
104 void reg_key_free(REG_KEY *key)
112 if(key->handle->functions->free_key_backend_data)
113 key->handle->functions->free_key_backend_data(key);
115 if(key->cache_values) {
117 for(i = 0; i < key->cache_values_count; i++) {
118 reg_val_free(key->cache_values[i]);
122 if(key->cache_subkeys) {
124 for(i = 0; i < key->cache_subkeys_count; i++) {
125 reg_key_free(key->cache_subkeys[i]);
129 talloc_destroy(key->mem_ctx);
132 char *reg_val_get_path(REG_VAL *v)
138 const char *reg_key_get_path(REG_KEY *k)
144 /* For use by the backends _ONLY_ */
145 REG_KEY *reg_key_new_abs(const char *path, REG_HANDLE *h, void *data)
148 TALLOC_CTX *mem_ctx = talloc_init(path);
149 r = talloc(mem_ctx, sizeof(REG_KEY));
152 r->mem_ctx = mem_ctx;
153 r->path = talloc_strdup(mem_ctx, path);
154 r->name = talloc_strdup(mem_ctx, strrchr(path, '\\')?strrchr(path,'\\')+1:path);
155 r->backend_data = data;
160 REG_KEY *reg_key_new_rel(const char *name, REG_KEY *k, void *data)
163 TALLOC_CTX *mem_ctx = talloc_init(name);
164 r = talloc(mem_ctx, sizeof(REG_KEY));
166 r->handle = k->handle;
167 r->name = talloc_strdup(mem_ctx, name);
168 r->backend_data = data;
169 r->mem_ctx = mem_ctx;
174 REG_VAL *reg_val_new(REG_KEY *parent, void *data)
177 TALLOC_CTX *mem_ctx = talloc_init("value");
178 r = talloc(mem_ctx, sizeof(REG_VAL));
180 r->mem_ctx = mem_ctx;
181 r->handle = parent->handle;
182 r->backend_data = data;