RIP BOOL. Convert BOOL -> bool. I found a few interesting
[samba.git] / source3 / registry / reg_cachehook.c
index daf2f241800b4a67c76b96f389de9f8365745e20..739facac99a9b822e8e157caaf4a2e1f944c8e82 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 */
+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( NULL, NULL );
+       cache_tree = pathtree_init( &default_hook, NULL );
 
        return ( cache_tree == NULL );
 }
@@ -43,7 +45,7 @@ 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;
        
@@ -57,31 +59,45 @@ BOOL reghook_cache_add( REGISTRY_HOOK *hook )
 
        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;
-               
-       if ( (key = strdup( keyname )) == NULL ) {
-               DEBUG(0,("reghook_cache_find: strdup() failed for string [%s] !?!?!\n",
+       
+       /* prepend the string with a '\' character */
+       
+       len = strlen( keyname );
+       if ( !(key = (char *)SMB_MALLOC( len + 2 )) ) {
+               DEBUG(0,("reghook_cache_find: malloc failed for string [%s] !?!?!\n",
                        keyname));
                return NULL;
        }
+
+       *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;
 }
 
 /**********************************************************************
@@ -92,5 +108,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 );
 }