/* Find a backend in the list of available backends */
static struct reg_init_function_entry *reg_find_backend_entry(const char *name)
{
- struct reg_init_function_entry *entry = backends;
+ struct reg_init_function_entry *entry;
+ static BOOL reg_first_init = True;
+
+ if(reg_first_init) {
+ status = register_subsystem("registry", registry_register);
+ if (!NT_STATUS_IS_OK(status))
+ return WERR_GENERAL_FAILURE;
+
+ static_init_registry;
+ reg_first_init = False;
+ }
+
+ entry = backends;
while(entry) {
if (strcmp(entry->functions->name, name)==0) return entry;
return NULL;
}
+BOOL reg_has_backend(const char *backend)
+{
+ return reg_find_backend_entry(backend)?True:False;
+}
+
/* Open a registry file/host/etc */
WERROR reg_open(const char *backend, const char *location, const char *credentials, REG_HANDLE **h)
{
struct reg_init_function_entry *entry;
- static BOOL reg_first_init = True;
TALLOC_CTX *mem_ctx;
REG_HANDLE *ret;
NTSTATUS status;
WERROR werr;
-
- if(reg_first_init) {
- status = register_subsystem("registry", registry_register);
- if (!NT_STATUS_IS_OK(status))
- return WERR_GENERAL_FAILURE;
-
- static_init_registry;
- reg_first_init = False;
- }
-
+
entry = reg_find_backend_entry(backend);
if (!entry) {
menu_file_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_file), menu_file_menu);
- open_nt4 = gtk_image_menu_item_new_with_mnemonic("_Open NT4 file");
- gtk_widget_show (open_nt4);
- gtk_container_add (GTK_CONTAINER (menu_file_menu), open_nt4);
+ if(reg_has_backend("nt4")) {
+ open_nt4 = gtk_image_menu_item_new_with_mnemonic("_Open NT4 file");
+ gtk_widget_show (open_nt4);
+ gtk_container_add (GTK_CONTAINER (menu_file_menu), open_nt4);
+ }
- open_w95 = gtk_image_menu_item_new_with_mnemonic("_Open Win9x file");
- gtk_widget_show (open_w95);
- gtk_container_add (GTK_CONTAINER (menu_file_menu), open_w95);
+ if(reg_has_backend("w95")) {
+ open_w95 = gtk_image_menu_item_new_with_mnemonic("_Open Win9x file");
+ gtk_widget_show (open_w95);
+ gtk_container_add (GTK_CONTAINER (menu_file_menu), open_w95);
+ }
- open_gconf = gtk_image_menu_item_new_with_mnemonic ("_Open GConf");
- gtk_widget_show (open_gconf);
- gtk_container_add (GTK_CONTAINER (menu_file_menu), open_gconf);
+ if(reg_has_backend("gconf")) {
+ open_gconf = gtk_image_menu_item_new_with_mnemonic ("_Open GConf");
+ gtk_widget_show (open_gconf);
+ gtk_container_add (GTK_CONTAINER (menu_file_menu), open_gconf);
+ }
- open_remote = gtk_menu_item_new_with_mnemonic ("_Open Remote");
- gtk_widget_show (open_remote);
- gtk_container_add (GTK_CONTAINER (menu_file_menu), open_remote);
+ if(reg_has_backend("rpc")) {
+ open_remote = gtk_menu_item_new_with_mnemonic ("_Open Remote");
+ gtk_widget_show (open_remote);
+ gtk_container_add (GTK_CONTAINER (menu_file_menu), open_remote);
+ }
save = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group);
gtk_widget_show (save);