30351 + 30352: metafy strings on import into zsh variables

This commit is contained in:
Peter Stephenson 2012-03-13 09:47:01 +00:00
parent afa112474c
commit a76c8de44c
3 changed files with 47 additions and 17 deletions

View File

@ -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 File

@ -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 File

@ -4012,6 +4012,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