diff options
author | Gerald Carter <jerry@samba.org> | 2005-06-17 18:57:37 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:57:19 -0500 |
commit | c25b67b24d3c7ec04a58410aaa05c1aae9688e32 (patch) | |
tree | 4c58725f37a14273333371b15a96dc02fa2a70ae /source3/registry/reg_objects.c | |
parent | 5c9963c287e20a4a4b8bbaa088328438eb4f942c (diff) | |
download | samba-c25b67b24d3c7ec04a58410aaa05c1aae9688e32.tar.gz samba-c25b67b24d3c7ec04a58410aaa05c1aae9688e32.tar.bz2 samba-c25b67b24d3c7ec04a58410aaa05c1aae9688e32.zip |
r7698: * clean upserver frontend for RegDeleteKey()
* implement RegDeleteKey() for reg_db backend
(This used to be commit 91b81a23b8e2a096747e02fd9392ef590e7f0d61)
Diffstat (limited to 'source3/registry/reg_objects.c')
-rw-r--r-- | source3/registry/reg_objects.c | 65 |
1 files changed, 52 insertions, 13 deletions
diff --git a/source3/registry/reg_objects.c b/source3/registry/reg_objects.c index 2dd61f515f..582a696529 100644 --- a/source3/registry/reg_objects.c +++ b/source3/registry/reg_objects.c @@ -43,22 +43,16 @@ void regsubkey_ctr_init( REGSUBKEY_CTR *ctr ) int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, const char *keyname ) { - uint32 len; char **pp; - int i; - + if ( !keyname ) return ctr->num_subkeys; - len = strlen( keyname ); - /* make sure the keyname is not already there */ - for ( i=0; i<ctr->num_subkeys; i++ ) { - if ( strequal( ctr->subkeys[i], keyname ) ) - return ctr->num_subkeys; - } - + if ( regsubkey_ctr_key_exists( ctr, keyname ) ) + return ctr->num_subkeys; + /* allocate a space for the char* in the array */ if ( ctr->subkeys == 0 ) @@ -71,13 +65,58 @@ int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, const char *keyname ) /* allocate the string and save it in the array */ - ctr->subkeys[ctr->num_subkeys] = TALLOC( ctr->ctx, len+1 ); - strncpy( ctr->subkeys[ctr->num_subkeys], keyname, len+1 ); + ctr->subkeys[ctr->num_subkeys] = talloc_strdup( ctr->ctx, keyname ); ctr->num_subkeys++; return ctr->num_subkeys; } + /*********************************************************************** + Add a new key to the array + **********************************************************************/ + +int regsubkey_ctr_delkey( REGSUBKEY_CTR *ctr, const char *keyname ) +{ + int i; + + if ( !keyname ) + return ctr->num_subkeys; + + /* make sure the keyname is actually already there */ + + for ( i=0; i<ctr->num_subkeys; i++ ) { + if ( strequal( ctr->subkeys[i], keyname ) ) + break; + } + + if ( i == ctr->num_subkeys ) + return ctr->num_subkeys; + + /* update if we have any keys left */ + ctr->num_subkeys--; + if ( ctr->num_subkeys ) + memmove( &ctr->subkeys[i], &ctr->subkeys[i+1], sizeof(char*) * (ctr->num_subkeys-i) ); + + return ctr->num_subkeys; +} + +/*********************************************************************** + Check for the existance of a key + **********************************************************************/ + +BOOL regsubkey_ctr_key_exists( REGSUBKEY_CTR *ctr, const char *keyname ) +{ + int i; + + for ( i=0; i<ctr->num_subkeys; i++ ) { + if ( strequal( ctr->subkeys[i],keyname ) ) + return True; + } + + return False; + +} + /*********************************************************************** How many keys does the container hold ? **********************************************************************/ @@ -351,7 +390,7 @@ int regval_ctr_delvalue( REGVAL_CTR *ctr, const char *name ) } /*********************************************************************** - Delete a single value from the registry container. + Retrieve single value from the registry container. No need to free memory since it is talloc'd. **********************************************************************/ |