Remove pstrings from nsswitch/ and registry/
[amitay/samba.git] / source3 / registry / reg_cachehook.c
index e2444d8d17e99be550daaa9dba4dc816b113db62..289d4e50cec788bfbc7d758d328ea31c73459808 100644 (file)
@@ -1,11 +1,11 @@
 /* 
  *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
+ *  Virtual Windows Registry Layer
  *  Copyright (C) Gerald Carter                     2002.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation; either version 3 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 /* Implementation of registry hook cache tree */
 
 #include "includes.h"
+#include "adt_tree.h"
 
 #undef DBGC_CLASS
-#define DBGC_CLASS DBGC_RPC_SRV
+#define DBGC_CLASS DBGC_REGISTRY
 
 static SORTED_TREE *cache_tree;
 extern REGISTRY_OPS regdb_ops;         /* these are the default */
@@ -33,9 +33,9 @@ static REGISTRY_HOOK default_hook = { KEY_TREE_ROOT, &regdb_ops };
  Initialize the cache tree
  *********************************************************************/
 
-BOOL reghook_cache_init( void )
+bool reghook_cache_init( void )
 {
-       cache_tree = sorted_tree_init( &default_hook, NULL, NULL );
+       cache_tree = pathtree_init( &default_hook, NULL );
 
        return ( cache_tree == NULL );
 }
@@ -45,37 +45,46 @@ BOOL reghook_cache_init( void )
  is not in the exact format that a SORTED_TREE expects.
  *********************************************************************/
 
-BOOL reghook_cache_add( REGISTRY_HOOK *hook )
+bool reghook_cache_add( REGISTRY_HOOK *hook )
 {
-       pstring key;
-       
-       if ( !hook )
-               return False;
-               
-       pstrcpy( key, "\\");
-       pstrcat( key, hook->keyname );  
-       
-       pstring_sub( key, "\\", "/" );
+       TALLOC_CTX *ctx = talloc_tos();
+       char *key = NULL;
+
+       if (!hook) {
+               return false;
+       }
+
+       key = talloc_asprintf(ctx, "//%s", hook->keyname);
+       if (!key) {
+               return false;
+       }
+       key = talloc_string_sub(ctx, key, "\\", "/");
+       if (!key) {
+               return false;
+       }
 
        DEBUG(10,("reghook_cache_add: Adding key [%s]\n", key));
-               
-       return sorted_tree_add( cache_tree, key, hook );
+
+       return pathtree_add( cache_tree, key, hook );
 }
 
 /**********************************************************************
  Initialize the cache tree
  *********************************************************************/
 
-REGISTRY_HOOK* reghook_cache_find( char *keyname )
+REGISTRY_HOOK* reghook_cache_find( const char *keyname )
 {
        char *key;
        int len;
+       REGISTRY_HOOK *hook;
        
        if ( !keyname )
                return NULL;
        
+       /* prepend the string with a '\' character */
+       
        len = strlen( keyname );
-       if ( !(key = malloc( len + 2 )) ) {
+       if ( !(key = (char *)SMB_MALLOC( len + 2 )) ) {
                DEBUG(0,("reghook_cache_find: malloc failed for string [%s] !?!?!\n",
                        keyname));
                return NULL;
@@ -84,11 +93,17 @@ REGISTRY_HOOK* reghook_cache_find( char *keyname )
        *key = '\\';
        strncpy( key+1, keyname, len+1);
        
+       /* swap to a form understood by the SORTED_TREE */
+
        string_sub( key, "\\", "/", 0 );
                
        DEBUG(10,("reghook_cache_find: Searching for keyname [%s]\n", key));
        
-       return sorted_tree_find( cache_tree, key ) ;
+       hook = (REGISTRY_HOOK *)pathtree_find( cache_tree, key ) ;
+       
+       SAFE_FREE( key );
+       
+       return hook;
 }
 
 /**********************************************************************
@@ -99,5 +114,5 @@ void reghook_dump_cache( int debuglevel )
 {
        DEBUG(debuglevel,("reghook_dump_cache: Starting cache dump now...\n"));
        
-       sorted_tree_print_keys( cache_tree, debuglevel );
+       pathtree_print_keys( cache_tree, debuglevel );
 }