registry: add a function regdb_key_is_base_key() to check whether is composite.
authorMichael Adam <obnox@samba.org>
Wed, 7 May 2008 22:34:35 +0000 (00:34 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 8 May 2008 16:29:09 +0000 (18:29 +0200)
This partly duplicates code from regdb_key_exists(). Maybe refactor later.

Michael
(This used to be commit c27d03bba842ecf99f23b22dc40fa7df33392fa0)

source3/registry/reg_backend_db.c

index 3089c43eba28a9780eb4cba39c2aff91dd3575ec..9468c40cf7d6a1f1d70cb4e661f0104fc4d413e7 100644 (file)
@@ -28,6 +28,7 @@ static struct db_context *regdb = NULL;
 static int regdb_refcount;
 
 static bool regdb_key_exists(const char *key);
+static bool regdb_key_is_base_key(const char *key);
 
 /* List the deepest path into the registry.  All part components will be created.*/
 
@@ -770,6 +771,38 @@ static TDB_DATA regdb_fetch_key_internal(TALLOC_CTX *mem_ctx, const char *key)
 }
 
 
+/**
+ * check whether a given key name represents a base key,
+ * i.e one without a subkey separator ('/' or '\').
+ */
+static bool regdb_key_is_base_key(const char *key)
+{
+       TALLOC_CTX *mem_ctx = talloc_stackframe();
+       bool ret = false;
+       char *path;
+
+       if (key == NULL) {
+               goto done;
+       }
+
+       path = normalize_reg_path(mem_ctx, key);
+       if (path == NULL) {
+               DEBUG(0, ("out of memory! (talloc failed)\n"));
+               goto done;
+       }
+
+       if (*path == '\0') {
+               goto done;
+       }
+
+       ret = (strrchr(path, '/') == NULL);
+
+done:
+       TALLOC_FREE(mem_ctx);
+       return ret;
+}
+
+
 /**
  * Check for the existence of a key.
  *