diff options
author | Chris Davis <cd.rattan@gmail.com> | 2014-07-27 17:39:06 -0700 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2014-10-01 14:32:09 +0200 |
commit | 1b6445ae03521d788bf247eb550d1b51113fc8df (patch) | |
tree | 8140bb281bf010d0f172e9e001e0c80073891ad6 | |
parent | 061d3e9a66f7f71cc6532fa6b0bcf47bf0fe3e35 (diff) | |
download | samba-1b6445ae03521d788bf247eb550d1b51113fc8df.tar.gz samba-1b6445ae03521d788bf247eb550d1b51113fc8df.tar.xz samba-1b6445ae03521d788bf247eb550d1b51113fc8df.zip |
regedit: use the right function to reopen a hive
Signed-off-by: Chris Davis <cd.rattan@gmail.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
-rw-r--r-- | source3/utils/regedit.c | 15 | ||||
-rw-r--r-- | source3/utils/regedit_treeview.c | 17 | ||||
-rw-r--r-- | source3/utils/regedit_treeview.h | 3 |
3 files changed, 26 insertions, 9 deletions
diff --git a/source3/utils/regedit.c b/source3/utils/regedit.c index cc3598b10b..d77c2e4c56 100644 --- a/source3/utils/regedit.c +++ b/source3/utils/regedit.c @@ -187,7 +187,8 @@ static void add_reg_key(struct regedit *regedit, struct tree_node *node, } else { /* Reopen the parent key to make sure the new subkey will be noticed. */ - tree_node_reopen_key(parent); + tree_node_reopen_key(regedit->registry_context, + parent); } list = tree_node_first(node); @@ -377,7 +378,8 @@ static void handle_tree_input(struct regedit *regedit, int c) rv = reg_key_del(node, parent->key, node->name); if (W_ERROR_IS_OK(rv)) { - tree_node_reopen_key(parent); + tree_node_reopen_key(regedit->registry_context, + parent); tree_view_clear(regedit->keys); pop = tree_node_pop(&node); talloc_free(pop); @@ -434,7 +436,8 @@ static void handle_value_input(struct regedit *regedit, int c) dialog_notice(regedit, DIA_ALERT, "Error", "Error editing value:\n%s", msg); } else if (sel == DIALOG_OK) { - tree_node_reopen_key(node); + tree_node_reopen_key(regedit->registry_context, + node); value_list_load(regedit->vl, node->key); value_list_set_current_item_by_name(regedit->vl, name); @@ -458,7 +461,8 @@ static void handle_value_input(struct regedit *regedit, int c) dialog_notice(regedit, DIA_ALERT, "Error", "Error creating value:\n%s", msg); } else if (sel == DIALOG_OK) { - tree_node_reopen_key(node); + tree_node_reopen_key(regedit->registry_context, + node); value_list_load(regedit->vl, node->key); value_list_set_current_item_by_name(regedit->vl, name); @@ -480,7 +484,8 @@ static void handle_value_input(struct regedit *regedit, int c) node = tree_view_get_current_node(regedit->keys); reg_del_value(regedit, node->key, vitem->value_name); - tree_node_reopen_key(node); + tree_node_reopen_key(regedit->registry_context, + node); value_list_load(regedit->vl, node->key); } } diff --git a/source3/utils/regedit_treeview.c b/source3/utils/regedit_treeview.c index 47d92821e8..885e6d0998 100644 --- a/source3/utils/regedit_treeview.c +++ b/source3/utils/regedit_treeview.c @@ -197,13 +197,24 @@ static uint32_t get_num_subkeys(struct tree_node *node) return 0; } -WERROR tree_node_reopen_key(struct tree_node *node) +WERROR tree_node_reopen_key(struct registry_context *ctx, + struct tree_node *node) { SMB_ASSERT(node->parent != NULL); SMB_ASSERT(node->name != NULL); TALLOC_FREE(node->key); - return reg_open_key(node->parent, node->parent->key, node->name, - &node->key); + + if (tree_node_is_top_level(node)) { + WERROR rv; + struct registry_key *key; + rv = reg_get_predefined_key_by_name(ctx, node->name, &key); + if (W_ERROR_IS_OK(rv)) { + node->key = talloc_steal(node, key); + } + return rv; + } + + return reg_open_key(node, node->parent->key, node->name, &node->key); } bool tree_node_has_children(struct tree_node *node) diff --git a/source3/utils/regedit_treeview.h b/source3/utils/regedit_treeview.h index 4d1851ab1d..919507f9e2 100644 --- a/source3/utils/regedit_treeview.h +++ b/source3/utils/regedit_treeview.h @@ -74,7 +74,8 @@ void tree_view_clear(struct tree_view *view); WERROR tree_view_set_root(struct tree_view *view, struct tree_node *root); WERROR tree_view_set_path(struct tree_view *view, const char **path); WERROR tree_view_update(struct tree_view *view, struct tree_node *list); -WERROR tree_node_reopen_key(struct tree_node *node); +WERROR tree_node_reopen_key(struct registry_context *ctx, + struct tree_node *node); bool tree_node_has_children(struct tree_node *node); WERROR tree_node_load_children(struct tree_node *node); void tree_node_insert_sorted(struct tree_node *list, struct tree_node *node); |