about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBarton E. Schaefer <schaefer@zsh.org>2014-07-24 08:16:29 -0700
committerBarton E. Schaefer <schaefer@zsh.org>2014-07-24 08:16:29 -0700
commitf6429189a8de189f5bc388b9602b293fdd2fc286 (patch)
tree6a65a7a76c7ed332bf79a4bb1a46a3ad9a8753e6
parent6076c474f2427ec9a75cecab1fc95f7cd9f066f6 (diff)
downloadzsh-f6429189a8de189f5bc388b9602b293fdd2fc286.tar.gz
zsh-f6429189a8de189f5bc388b9602b293fdd2fc286.tar.xz
zsh-f6429189a8de189f5bc388b9602b293fdd2fc286.zip
32903: new empty (unset) elements in the special parameter hash tables are special themselves
-rw-r--r--ChangeLog6
-rw-r--r--Src/Modules/parameter.c30
2 files changed, 21 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 563708769..6e9fd6099 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-07-24  Barton E. Schaefer  <schaefer@zsh.org>
+
+	* 32903: Src/Modules/parameter.c: new empty (unset) elements in
+	the special parameter hash tables are special themselves, so that
+	adding elements via assignment syntax handles them correctly.
+
 2014-07-24  Peter Stephenson  <p.stephenson@samsung.com>
 
 	* unposted: Functions/Zle/replace-argument, Doc/Zsh/contrib.yo:
diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
index 22148f991..0385a709e 100644
--- a/Src/Modules/parameter.c
+++ b/Src/Modules/parameter.c
@@ -106,7 +106,7 @@ getpmparameter(UNUSED(HashTable ht), const char *name)
 	pm->u.str = paramtypestr(rpm);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -224,7 +224,7 @@ getpmcommand(UNUSED(HashTable ht), const char *name)
 	}
     } else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -410,7 +410,7 @@ getfunction(UNUSED(HashTable ht), const char *name, int dis)
 	}
     } else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -661,7 +661,7 @@ getbuiltin(UNUSED(HashTable ht), const char *name, int dis)
 	pm->u.str = dupstring(t);
     } else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -876,7 +876,7 @@ getpmoption(UNUSED(HashTable ht), const char *name)
     }
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -934,7 +934,7 @@ getpmmodule(UNUSED(HashTable ht), const char *name)
 	pm->u.str = dupstring(type);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1048,7 +1048,7 @@ getpmhistory(UNUSED(HashTable ht), const char *name)
 	pm->u.str = dupstring(he->node.nam);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1158,7 +1158,7 @@ getpmjobtext(UNUSED(HashTable ht), const char *name)
 	pm->u.str = pmjobtext(job);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1259,7 +1259,7 @@ getpmjobstate(UNUSED(HashTable ht), const char *name)
 	pm->u.str = pmjobstate(job);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1325,7 +1325,7 @@ getpmjobdir(UNUSED(HashTable ht), const char *name)
 	pm->u.str = pmjobdir(job);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1451,7 +1451,7 @@ getpmnameddir(UNUSED(HashTable ht), const char *name)
 	pm->u.str = dupstring(nd->dir);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1502,7 +1502,7 @@ getpmuserdir(UNUSED(HashTable ht), const char *name)
 	pm->u.str = dupstring(nd->dir);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1754,7 +1754,7 @@ getalias(HashTable alht, UNUSED(HashTable ht), const char *name, int flags)
 	pm->u.str = dupstring(al->text);
     else {
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     }
     return &pm->node;
 }
@@ -1950,7 +1950,7 @@ getpmusergroups(UNUSED(HashTable ht), const char *name)
     if (!gs) {
 	zerr("failed to retrieve groups for user: %e", errno);
 	pm->u.str = dupstring("");
-	pm->node.flags |= PM_UNSET;
+	pm->node.flags |= (PM_UNSET|PM_SPECIAL);
 	return &pm->node;
     }
 
@@ -1965,7 +1965,7 @@ getpmusergroups(UNUSED(HashTable ht), const char *name)
     }
 
     pm->u.str = dupstring("");
-    pm->node.flags |= PM_UNSET;
+    pm->node.flags |= (PM_UNSET|PM_SPECIAL);
     return &pm->node;
 }