Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: Re: echoti and number of arguments
- X-seq: zsh-workers 18626
- From: Oliver Kiddle <okiddle@xxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxxxxx>
- Subject: PATCH: Re: echoti and number of arguments
- Date: Tue, 24 Jun 2003 20:04:13 +0200
- Cc: Stephane CHAZELAS <Stephane_CHAZELAS@xxxxxxxx>, Tomi.Vainio@xxxxxxx
- In-reply-to: <20030519165108.D129@xxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <20030517100115.A128@xxxxxxxxxxxxxxxxxx> <6877.1053340085@xxxxxxx> <20030519165108.D129@xxxxxxxxxxxxxxxxxx>
This patch does basically as suggested in 18551, replacing the quick
fix I sent earlier. I've taken the second approach of hard coding the
list of five capabilities that accept non-integers as parameters. First
parameter is taken to be integer and any others a string.
I've also tried using putp() instead of tputs() to get rid of the
compiler warnings. We can always revert that if any problems crop up.
Anyway, this works on Solaris (32 and 64-bit) and Linux.
Oliver
Index: Src/Modules/terminfo.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/terminfo.c,v
retrieving revision 1.20
diff -u -r1.20 terminfo.c
--- Src/Modules/terminfo.c 25 Mar 2003 05:33:29 -0000 1.20
+++ Src/Modules/terminfo.c 24 Jun 2003 17:39:03 -0000
@@ -59,8 +59,10 @@
static int
bin_echoti(char *name, char **argv, Options ops, int func)
{
- char *s, *t, *u;
- int num, argct;
+ char *s, *t, **u;
+ int arg, num, strarg = 0;
+ long pars[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+ char *strcap[] = { "pfkey", "pfloc", "pfx", "pln", "pfxl", NULL };
s = *argv++;
/* This depends on the termcap stuff in init.c */
@@ -92,28 +94,32 @@
zwarnnam(name, "no such terminfo capability: %s", s, 0);
return 1;
}
- /* count the number of arguments required */
- for (argct = 0, u = t; *u; u++)
- if (*u == '%') {
- if (u++, (*u == 'd' || *u == '2' || *u == '3' || *u == '.' ||
- *u == '+'))
- argct++;
- }
- /* check that the number of arguments provided is correct */
- if (arrlen(argv) != argct) {
- zwarnnam(name, (arrlen(argv) < argct) ? "not enough arguments" :
- "too many arguments", NULL, 0);
+ /* check that the number of arguments provided is not too high */
+ if (arrlen(argv) > 9) {
+ zwarnnam(name, "too many arguments", NULL, 0);
return 1;
}
+
+ /* check if we have a capability taking non-integers for parameters */
+ for (u = strcap; *u && !strarg; u++)
+ strarg = !strcmp(s, *u);
+
+ /* get the arguments */
+ for (arg=0; argv[arg]; arg++) {
+ if (strarg && arg > 0)
+ pars[arg] = (long) argv[arg];
+ else
+ pars[arg] = atoi(argv[arg]);
+ }
+
/* output string, through the proper termcap functions */
- if (!argct)
- tputs(t, 1, putraw);
+ if (!arg)
+ putp(t);
else {
- num = (argv[1]) ? atoi(argv[1]) : atoi(*argv);
- tputs(tparm(t, atoi(*argv)), num, putraw);
+ putp(tparm(t, pars[0], pars[1], pars[2], pars[3], pars[4],
+ pars[5], pars[6], pars[7], pars[8]));
}
return 0;
-
}
/**/
________________________________________________________________________
This email has been scanned for all viruses by the MessageLabs Email
Security System. For more information on a proactive email security
service working around the clock, around the globe, visit
http://www.messagelabs.com
________________________________________________________________________
Messages sorted by:
Reverse Date,
Date,
Thread,
Author