summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/Modules/mapfile.c3
-rw-r--r--Src/Zle/complete.c3
-rw-r--r--Src/Zle/zle_params.c14
3 files changed, 16 insertions, 4 deletions
diff --git a/Src/Modules/mapfile.c b/Src/Modules/mapfile.c
index 7a903418f..dd86fb596 100644
--- a/Src/Modules/mapfile.c
+++ b/Src/Modules/mapfile.c
@@ -158,7 +158,8 @@ setpmmapfiles(Param pm, HashTable ht)
setpmmapfile(v.pm, ztrdup(getstrvalue(&v)));
}
- deleteparamtable(ht);
+ if (ht != pm->u.hash)
+ deleteparamtable(ht);
}
/**/
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index 313dcb92f..1dc2b01c2 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -1325,7 +1325,8 @@ set_compstate(UNUSED(Param pm), HashTable ht)
break;
}
- deleteparamtable(ht);
+ if (ht != pm->u.hash)
+ deleteparamtable(ht);
}
/**/
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c
index 0a922d2d6..f3112165a 100644
--- a/Src/Zle/zle_params.c
+++ b/Src/Zle/zle_params.c
@@ -124,7 +124,7 @@ static const struct gsu_array killring_gsu =
static const struct gsu_scalar register_gsu =
{ strgetfn, set_register, unset_register };
static const struct gsu_hash registers_gsu =
-{ hashgetfn, set_registers, zleunsetfn };
+{ hashgetfn, set_registers, unset_registers };
/* implementation is in zle_refresh.c */
static const struct gsu_array region_highlight_gsu =
@@ -837,7 +837,17 @@ set_registers(UNUSED(Param pm), HashTable ht)
set_register(v.pm, getstrvalue(&v));
}
- deleteparamtable(ht);
+ if (ht != pm->u.hash)
+ deleteparamtable(ht);
+}
+
+/**/
+static void
+unset_registers(Param pm, int exp)
+{
+ stdunsetfn(pm, exp);
+ deletehashtable(pm->u.hash);
+ pm->u.hash = NULL;
}
static void