summaryrefslogtreecommitdiffstats
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/utils/regedit_treeview.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/source3/utils/regedit_treeview.c b/source3/utils/regedit_treeview.c
index 9962ad99fb..c8a65965bc 100644
--- a/source3/utils/regedit_treeview.c
+++ b/source3/utils/regedit_treeview.c
@@ -179,7 +179,7 @@ WERROR tree_node_load_children(struct tree_node *node)
struct registry_key *key;
const char *key_name, *klass;
NTTIME modified;
- uint32_t i, nsubkeys;
+ uint32_t i, nsubkeys, count;
WERROR rv;
struct tree_node *prev, **array;
@@ -196,7 +196,7 @@ WERROR tree_node_load_children(struct tree_node *node)
return WERR_NOMEM;
}
- for (i = 0; i < nsubkeys; ++i) {
+ for (count = 0, i = 0; i < nsubkeys; ++i) {
rv = reg_key_get_subkey_by_index(node, node->key, i,
&key_name, &klass,
&modified);
@@ -206,25 +206,28 @@ WERROR tree_node_load_children(struct tree_node *node)
rv = reg_open_key(node, node->key, key_name, &key);
if (!W_ERROR_IS_OK(rv)) {
- goto finish;
+ continue;
}
- array[i] = tree_node_new(node, node, key_name, key);
- if (array[i] == NULL) {
+ array[count] = tree_node_new(node, node, key_name, key);
+ if (array[count] == NULL) {
rv = WERR_NOMEM;
goto finish;
}
+ ++count;
}
- TYPESAFE_QSORT(array, nsubkeys, node_cmp);
+ if (count) {
+ TYPESAFE_QSORT(array, count, node_cmp);
- for (i = 1, prev = array[0]; i < nsubkeys; ++i) {
- tree_node_append(prev, array[i]);
- prev = array[i];
- }
- node->child_head = array[0];
+ for (i = 1, prev = array[0]; i < count; ++i) {
+ tree_node_append(prev, array[i]);
+ prev = array[i];
+ }
+ node->child_head = array[0];
- rv = WERR_OK;
+ rv = WERR_OK;
+ }
finish:
if (!W_ERROR_IS_OK(rv)) {