diff options
author | Volker Lendecke <vlendec@samba.org> | 2006-11-18 17:46:32 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:15:54 -0500 |
commit | 17c7c337f64b082c1bf1045a4093c279deeec958 (patch) | |
tree | 93d1deabd05ab9a501ce4e6f81da1b1c130d2060 | |
parent | e2a35ceffe35b25aafde987c50e63b89a3e3ec16 (diff) | |
download | samba-17c7c337f64b082c1bf1045a4093c279deeec958.tar.gz samba-17c7c337f64b082c1bf1045a4093c279deeec958.tar.xz samba-17c7c337f64b082c1bf1045a4093c279deeec958.zip |
r19777: Make regsubkey_ctr_addkey return WERROR. Nobody checks this so far, but this
will change.
Volker
-rw-r--r-- | source/registry/reg_objects.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/source/registry/reg_objects.c b/source/registry/reg_objects.c index 83fd85658fb..94b7a4df950 100644 --- a/source/registry/reg_objects.c +++ b/source/registry/reg_objects.c @@ -41,35 +41,37 @@ Add a new key to the array **********************************************************************/ -int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, const char *keyname ) +WERROR regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, const char *keyname ) { - if ( !keyname ) - return ctr->num_subkeys; + char **newkeys; + + if ( !keyname ) { + return WERR_OK; + } /* make sure the keyname is not already there */ - if ( regsubkey_ctr_key_exists( ctr, keyname ) ) - return ctr->num_subkeys; - - /* allocate a space for the char* in the array */ - - if (ctr->subkeys == NULL) { - ctr->subkeys = TALLOC_P(ctr, char *); - } else { - ctr->subkeys = TALLOC_REALLOC_ARRAY(ctr, ctr->subkeys, char *, ctr->num_subkeys+1); + if ( regsubkey_ctr_key_exists( ctr, keyname ) ) { + return WERR_OK; } - if (!ctr->subkeys) { - ctr->num_subkeys = 0; - return 0; + if (!(newkeys = TALLOC_REALLOC_ARRAY(ctr, ctr->subkeys, char *, + ctr->num_subkeys+1))) { + return WERR_NOMEM; } - /* allocate the string and save it in the array */ - - ctr->subkeys[ctr->num_subkeys] = talloc_strdup( ctr, keyname ); + ctr->subkeys = newkeys; + + if (!(ctr->subkeys[ctr->num_subkeys] = talloc_strdup(ctr->subkeys, + keyname ))) { + /* + * Don't shrink the new array again, this wastes a pointer + */ + return WERR_NOMEM; + } ctr->num_subkeys++; - - return ctr->num_subkeys; + + return WERR_OK; } /*********************************************************************** |