freebsd-ports/shells/v7sh/files/patch-macro.c
Alexey Dokuchaev afadaecf27 Unbreak on 5.X and -CURRENT.
Reported by:	kris
Approved by:	portmgr (krion), fjoe (mentor, implicit)
2004-10-07 10:02:13 +00:00

252 lines
5.2 KiB
C

diff -u -x CVS -x work -x core -x *.core -x #* -x *~ -x *.orig -x *.rej -I $Id.*$ -I $.+BSD.*$ macro.c.orig macro.c
--- macro.c.orig Fri Jun 4 02:51:01 2004
+++ macro.c Sat Jun 19 18:42:23 2004
@@ -10,27 +10,37 @@
#include "defs.h"
#include "sym.h"
-LOCAL CHAR quote; /* used locally */
-LOCAL CHAR quoted; /* used locally */
+LOCAL VOID copyto(INT);
+LOCAL VOID skipto(INT);
+LOCAL INT getch(INT);
+LOCAL VOID comsubst(VOID);
+#define flush flush_
+LOCAL VOID flush(INT);
+LOCAL INT quote; /* used locally */
+LOCAL BOOL quoted; /* used locally */
-LOCAL STRING copyto(endch)
- REG CHAR endch;
+LOCAL VOID copyto(endch)
+ REG INT endch;
{
- REG CHAR c;
+ REG INT c;
WHILE (c=getch(endch))!=endch ANDF c
DO pushstak(c|quote) OD
zerostak();
- IF c!=endch THEN error(badsub) FI
+ IF c!=endch
+ THEN error(badsub);
+ /*NOTREACHED*/
+ FI
}
-LOCAL skipto(endch)
- REG CHAR endch;
+LOCAL VOID skipto(endch)
+ REG INT endch;
{
/* skip chars up to } */
- REG CHAR c;
+ REG INT c;
+
WHILE (c=readc()) ANDF c!=endch
DO SWITCH c IN
@@ -43,13 +53,16 @@
FI
ENDSW
OD
- IF c!=endch THEN error(badsub) FI
+ IF c!=endch
+ THEN error(badsub);
+ /*NOTREACHED*/
+ FI
}
-LOCAL getch(endch)
+LOCAL INT getch(endch)
CHAR endch;
{
- REG CHAR d;
+ REG INT d;
retry:
d=readc();
@@ -62,13 +75,16 @@
THEN NAMPTR n=NIL;
INT dolg=0;
BOOL bra;
- REG STRING argp, v;
+ REG STRING argp, v=NIL; /* GCC */
+#if defined(SYSIII)
+ BOOL nulflg;
+#endif
CHAR idb[2];
STRING id=idb;
- IF bra=(c==BRACE) THEN c=readc() FI
+ IF (bra=c==BRACE)!=0 THEN c=readc() FI /* GCC */
IF letter(c)
- THEN argp=relstak();
+ THEN argp=(STRING) relstak();
WHILE alphanum(c) DO pushstak(c); c=readc() OD
zerostak();
n=lookup(absstak(argp)); setstak(argp);
@@ -80,7 +96,7 @@
THEN dolg=1; c='1';
FI
c -= '0';
- v=((c==0) ? cmdadr : (c<=dolc) ? dolv[c] : (dolg=0));
+ v=((c==0) ? cmdadr : (c<=dolc) ? dolv[c] : (STRING) (dolg=0));
ELIF c=='$'
THEN v=pidadr;
ELIF c=='!'
@@ -91,18 +107,31 @@
THEN v=exitadr;
ELIF c=='-'
THEN v=flagadr;
- ELIF bra THEN error(badsub);
+ ELIF bra
+ THEN error(badsub);
+ /*NOTREACHED*/
ELSE goto retry;
FI
c = readc();
+#if defined(SYSIII)
+ IF c==':' ANDF bra /* null and unset fix */
+ THEN nulflg=1; c=readc();
+ ELSE nulflg=0;
+ FI
+#endif
IF !defchar(c) ANDF bra
THEN error(badsub);
+ /*NOTREACHED*/
FI
argp=0;
IF bra
THEN IF c!='}'
- THEN argp=relstak();
+ THEN argp=(STRING) relstak();
+#if defined(SYSIII)
+ IF (v==0 ORF (nulflg ANDF *v==0)) NEQ (setchar(c))
+#else /* V7 */
IF (v==0)NEQ(setchar(c))
+#endif
THEN copyto('}');
ELSE skipto('}');
FI
@@ -110,9 +139,13 @@
FI
ELSE peekc = c|MARK; c = 0;
FI
+#if defined(SYSIII)
+ IF v ANDF (!nulflg ORF *v)
+#else /* V7 */
IF v
+#endif
THEN IF c!='+'
- THEN LOOP WHILE c = *v++
+ THEN LOOP WHILE (c = *v++)!=0 /* GCC */
DO pushstak(c|quote); OD
IF dolg==0 ORF (++dolg>dolc)
THEN break;
@@ -123,14 +156,21 @@
ELIF argp
THEN IF c=='?'
THEN failed(id,*argp?argp:badparam);
+ /*NOTREACHED*/
ELIF c=='='
THEN IF n
THEN assign(n,argp);
ELSE error(badsub);
+ /*NOTREACHED*/
FI
FI
ELIF flags&setflg
+#if defined(SYSIII)
+ THEN failed(id,unset);
+#else /* V7 */
THEN failed(id,badparam);
+#endif
+ /*NOTREACHED*/
FI
goto retry;
ELSE peekc=c|MARK;
@@ -152,24 +192,25 @@
* Leaves result on top of stack
*/
REG BOOL savqu =quoted;
- REG CHAR savq = quote;
+ REG INT savq = quote;
FILEHDR fb;
- push(&fb); estabf(as);
+ push((FILEPTR) &fb); estabf(as);
usestak();
quote=0; quoted=0;
copyto(0);
pop();
IF quoted ANDF (stakbot==staktop) THEN pushstak(QUOTE) FI
+ /* above is the fix for *'.c' bug */
quote=savq; quoted=savqu;
return(fixstak());
}
-LOCAL comsubst()
+LOCAL VOID comsubst()
{
/* command substn */
FILEBLK cb;
- REG CHAR d;
+ REG INT d;
REG STKPTR savptr = fixstak();
usestak();
@@ -194,8 +235,16 @@
close(pv[OTPIPE]);
END
tdystak(savptr); staktop=movstr(savptr,stakbot);
- WHILE d=readc() DO pushstak(d|quote) OD
+#if defined(RENO)
+ WHILE (d=readc())!=0 DO locstak(); pushstak(d|quote) OD
+#else /* V7 */
+ WHILE (d=readc())!=0 DO pushstak(d|quote) OD /* GCC */
+#endif
+#if defined(SYSIII)
+ await(0,0);
+#else /* V7 */
await(0);
+#endif
WHILE stakbot!=staktop
DO IF (*--staktop&STRIP)!=NL
THEN ++staktop; break;
@@ -206,16 +255,16 @@
#define CPYSIZ 512
-subst(in,ot)
+VOID subst(in,ot)
INT in, ot;
{
- REG CHAR c;
+ REG INT c;
FILEBLK fb;
REG INT count=CPYSIZ;
push(&fb); initf(in);
/* DQUOTE used to stop it from quoting */
- WHILE c=(getch(DQUOTE)&STRIP)
+ WHILE (c=(getch(DQUOTE)&STRIP))!=0 /* GCC */
DO pushstak(c);
IF --count == 0
THEN flush(ot); count=CPYSIZ;
@@ -225,9 +274,10 @@
pop();
}
-LOCAL flush(ot)
+LOCAL VOID flush(ot)
+ INT ot;
{
- write(ot,stakbot,staktop-stakbot);
- IF flags&execpr THEN write(output,stakbot,staktop-stakbot) FI
+ write(ot,stakbot,(SIZE) (staktop-stakbot));
+ IF flags&execpr THEN write(output,stakbot,(SIZE) (staktop-stakbot)) FI
staktop=stakbot;
}