1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-21 00:01:26 +01:00

fix setting of individual positional parameters after 14915

This commit is contained in:
Peter Stephenson 2001-06-15 13:07:50 +00:00
parent 12e1cf567d
commit 3f6a9e4522
2 changed files with 24 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2001-06-15 Peter Stephenson <pws@csr.com>
* 14929: Src/params.c: after 14915, assigning to individual
positional parameters failed.
2001-06-15 Andrej Borsenkow <bor@zsh.org>
* 14931: Src/Modules/tcp.c, Src/Modules/zftp.c: fix length
@ -5,6 +10,10 @@
2001-06-14 Peter Stephenson <pws@csr.com>
* 14921: Functions/Zftp/zfinit, Completion/Zsh/Command/_zftp:
Load tcp module for zftp; autoload zfget_match and zfcd_match
for _zftp.
* 14915: Doc/Zsh/builtins.yo, Doc/Zsh/Params.yo, Src/builtin.c,
Src/params.c: special parameters can't have readonly turned off;
$* and $@ are readonly.

View file

@ -108,13 +108,12 @@ mod_export int termflags;
/* Nodes for special parameters for parameter hash table */
static
#ifdef HAVE_UNION_INIT
# define BR(X) {X}
struct param
typedef struct param initparam;
#else
# define BR(X) X
struct iparam {
typedef struct iparam {
struct hashnode *next;
char *nam; /* hash data */
int flags; /* PM_* flags (defined in zsh.h) */
@ -127,9 +126,10 @@ struct iparam {
char *ename; /* name of corresponding environment var */
Param old; /* old struct for use with local */
int level; /* if (old != NULL), level of localness */
}
} initparam;
#endif
special_params[] ={
static initparam special_params[] ={
#define SFN(X) BR(((void (*)_((Param, char *)))(X)))
#define GFN(X) BR(((char *(*)_((Param)))(X)))
#define IPDEF1(A,B,C,D) {NULL,A,PM_INTEGER|PM_SPECIAL|D,BR(NULL),SFN(C),GFN(B),stdunsetfn,10,NULL,NULL,NULL,0}
@ -248,6 +248,15 @@ IPDEF10("pipestatus", pipestatgetfn, pipestatsetfn),
{NULL, NULL}
};
/*
* Special way of referring to the positional parameters. Unlike $*
* and $@, this is not readonly. This parameter is not directly
* visible in user space.
*/
initparam argvparam_pm = IPDEF9F("", &pparams, NULL, \
PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT);
#undef BR
#define IS_UNSET_VALUE(V) \
@ -502,7 +511,7 @@ createparamtable(void)
while ((++ip)->nam)
paramtab->addnode(paramtab, ztrdup(ip->nam), ip);
argvparam = (Param) paramtab->getnode(paramtab, "*");
argvparam = (Param) &argvparam_pm;
noerrs = 2;