Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

30351 + 30352: metafy strings on import into zsh variables

  • Loading branch information...
commit a76c8de44c8c1f47f4db4cef0e9b1ce2f8c52a31 1 parent afa1124
Peter Stephenson authored
Showing with 47 additions and 17 deletions.
  1. +7 −1 ChangeLog
  2. +18 −16 Src/params.c
  3. +22 −0 Src/utils.c
View
8 ChangeLog
@@ -1,3 +1,9 @@
+2012-03-13 Peter Stephenson <pws@csr.com>
+
+ * 30351 changed as in 30352: Src/params.c, Src/utils.c: metafy
+ scalar and array parameter values as they are imported from
+ strings defined outside zsh.
+
2012-03-07 Peter Stephenson <pws@csr.com>
* users/16865: Doc/Zsh/cond.yo: note that -eq and friends are
@@ -16094,5 +16100,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5607 $
+* $Revision: 1.5608 $
*****************************************************
View
34 Src/params.c
@@ -698,16 +698,18 @@ createparamtable(void)
* So allow the user to set it in the special cases where it's
* useful.
*/
- setsparam("TMPPREFIX", ztrdup(DEFAULT_TMPPREFIX));
- setsparam("TIMEFMT", ztrdup(DEFAULT_TIMEFMT));
- setsparam("WATCHFMT", ztrdup(default_watchfmt));
+ setsparam("TMPPREFIX", ztrdup_metafy(DEFAULT_TMPPREFIX));
+ setsparam("TIMEFMT", ztrdup_metafy(DEFAULT_TIMEFMT));
+ setsparam("WATCHFMT", ztrdup_metafy(default_watchfmt));
hostnam = (char *)zalloc(256);
gethostname(hostnam, 256);
- setsparam("HOST", ztrdup(hostnam));
+ setsparam("HOST", ztrdup_metafy(hostnam));
zfree(hostnam, 256);
- setsparam("LOGNAME", ztrdup((str = getlogin()) && *str ? str : cached_username));
+ setsparam("LOGNAME",
+ ztrdup_metafy((str = getlogin()) && *str ?
+ str : cached_username));
#if !defined(HAVE_PUTENV) && !defined(USE_SET_UNSET_ENV)
/* Copy the environment variables we are inheriting to dynamic *
@@ -778,22 +780,22 @@ createparamtable(void)
if(uname(&unamebuf)) setsparam("CPUTYPE", ztrdup("unknown"));
else
{
- machinebuf = ztrdup(unamebuf.machine);
+ machinebuf = ztrdup_metafy(unamebuf.machine);
setsparam("CPUTYPE", machinebuf);
}
-
+
#else
- setsparam("CPUTYPE", ztrdup("unknown"));
+ setsparam("CPUTYPE", ztrdup_metafy("unknown"));
#endif
- setsparam("MACHTYPE", ztrdup(MACHTYPE));
- setsparam("OSTYPE", ztrdup(OSTYPE));
- setsparam("TTY", ztrdup(ttystrname));
- setsparam("VENDOR", ztrdup(VENDOR));
- setsparam("ZSH_NAME", ztrdup(zsh_name));
- setsparam("ZSH_VERSION", ztrdup(ZSH_VERSION));
- setsparam("ZSH_PATCHLEVEL", ztrdup(ZSH_PATCHLEVEL));
+ setsparam("MACHTYPE", ztrdup_metafy(MACHTYPE));
+ setsparam("OSTYPE", ztrdup_metafy(OSTYPE));
+ setsparam("TTY", ztrdup_metafy(ttystrname));
+ setsparam("VENDOR", ztrdup_metafy(VENDOR));
+ setsparam("ZSH_NAME", ztrdup_metafy(zsh_name));
+ setsparam("ZSH_VERSION", ztrdup_metafy(ZSH_VERSION));
+ setsparam("ZSH_PATCHLEVEL", ztrdup_metafy(ZSH_PATCHLEVEL));
setaparam("signals", sigptr = zalloc((SIGCOUNT+4) * sizeof(char *)));
- for (t = sigs; (*sigptr++ = ztrdup(*t++)); );
+ for (t = sigs; (*sigptr++ = ztrdup_metafy(*t++)); );
noerrs = 0;
}
View
22 Src/utils.c
@@ -4013,6 +4013,28 @@ metafy(char *buf, int len, int heap)
/*
+ * Duplicate a string, metafying it as we go.
+ *
+ * Typically, this is used only for strings imported from outside
+ * zsh, as strings internally are either already metafied or passed
+ * around with an associated length.
+ */
+/**/
+mod_export char *
+ztrdup_metafy(const char *s)
+{
+ /* To mimic ztrdup() behaviour */
+ if (!s)
+ return NULL;
+ /*
+ * metafy() does lots of different things, so the pointer
+ * isn't const. Using it with META_DUP should be safe.
+ */
+ return metafy((char *)s, -1, META_DUP);
+}
+
+
+/*
* Take a null-terminated, metafied string in s into a literal
* representation by converting in place. The length is in *len
* len is non-NULL; if len is NULL, you don't know the length of
Please sign in to comment.
Something went wrong with that request. Please try again.