registry: add a transaction wrapper to init_registry_key_internal().
authorMichael Adam <obnox@samba.org>
Thu, 20 Mar 2008 13:01:13 +0000 (14:01 +0100)
committerMichael Adam <obnox@samba.org>
Thu, 20 Mar 2008 14:01:52 +0000 (15:01 +0100)
Michael
(This used to be commit 8b9cff84d5c39e6d7c315d87ac2fdf7fc0d4e4c4)

source3/registry/reg_backend_db.c

index fc7d2bc2cf07d925f203673b6f1d0b9793690d25..e2e908cb84cbeec4059dbb9384cc98f8362ebf41 100644 (file)
@@ -178,6 +178,37 @@ fail:
        return ret;
 }
 
+/**
+ * Initialize a key in the registry:
+ * create each component key of the specified path,
+ * wrapped in one db transaction.
+ */
+static bool init_registry_key(const char *add_path)
+{
+       if (regdb->transaction_start(regdb) == -1) {
+               DEBUG(0, ("init_registry_key: transaction_start failed\n"));
+               return false;
+       }
+
+       if (!init_registry_key_internal(add_path)) {
+               goto fail;
+       }
+
+       if (regdb->transaction_commit(regdb) == -1) {
+               DEBUG(0, ("init_registry_key: Could not commit transaction\n"));
+               return false;
+       }
+
+       return true;
+
+fail:
+       if (regdb->transaction_cancel(regdb) == -1) {
+               smb_panic("init_registry_key: transaction_cancel failed\n");
+       }
+
+       return false;
+}
+
 /***********************************************************************
  Open the registry data in the tdb
  ***********************************************************************/