freebsd-ports/shells/v7sh/files/patch-io.c

190 lines
3.2 KiB
C

diff -u -x CVS -x work -x core -x *.core -x #* -x *~ -x *.orig -x *.rej -I $Id.*$ -I $.+BSD.*$ io.c.orig io.c
--- io.c.orig Fri Jun 4 02:51:01 2004
+++ io.c Sat Jun 19 18:42:22 2004
@@ -8,25 +8,34 @@
*/
#include "defs.h"
-#include "dup.h"
+
+IOPTR iotemp;
+IOPTR iopend;
+INT stripflg;
+/* set by trim */
+BOOL nosubst;
/* ======== input output and file copying ======== */
-initf(fd)
+VOID initf(fd)
UFD fd;
{
- REG FILE f=standin;
+ REG FILEPTR f=standin;
+#if defined(SYSIII)
+ f->fdes=fd; f->fsiz=((flags&oneflg)==0 ? BUFSIZ : 1);
+#else /* V7 */
f->fdes=fd; f->fsiz=((flags&(oneflg|ttyflg))==0 ? BUFSIZ : 1);
+#endif
f->fnxt=f->fend=f->fbuf; f->feval=0; f->flin=1;
f->feof=FALSE;
}
-estabf(s)
+INT estabf(s)
REG STRING s;
{
- REG FILE f;
+ REG FILEPTR f;
(f=standin)->fdes = -1;
f->fend=length(s)+(f->fnxt=s);
@@ -34,19 +43,19 @@
return(f->feof=(s==0));
}
-push(af)
- FILE af;
+VOID push(af)
+ FILEPTR af;
{
- REG FILE f;
+ REG FILEPTR f;
(f=af)->fstak=standin;
f->feof=0; f->feval=0;
standin=f;
}
-pop()
+INT pop()
{
- REG FILE f;
+ REG FILEPTR f;
IF (f=standin)->fstak
THEN IF f->fdes>=0 THEN close(f->fdes) FI
@@ -56,64 +65,66 @@
FI
}
-chkpipe(pv)
+VOID chkpipe(pv)
INT *pv;
{
IF pipe(pv)<0 ORF pv[INPIPE]<0 ORF pv[OTPIPE]<0
THEN error(piperr);
+ /*NOTREACHED*/
FI
}
-chkopen(idf)
- STRING idf;
+INT chkopen(idf)
+ CSTRING idf;
{
REG INT rc;
- IF (rc=open(idf,0))<0
+ IF (rc=open(idf,O_RDONLY))<0
THEN failed(idf,badopen);
- ELSE return(rc);
+ /*NOTREACHED*/
FI
+ return(rc);
}
-rename(f1,f2)
+VOID rename(f1,f2)
REG INT f1, f2;
{
IF f1!=f2
- THEN dup(f1|DUPFLG, f2);
+ THEN dup2(f1, f2);
close(f1);
IF f2==0 THEN ioset|=1 FI
FI
}
-create(s)
+INT create(s)
STRING s;
{
REG INT rc;
IF (rc=creat(s,0666))<0
THEN failed(s,badcreate);
- ELSE return(rc);
+ /*NOTREACHED*/
FI
+ return(rc);
}
-tmpfil()
+INT tmpfil()
{
itos(serial++); movstr(numbuf,tmpnam);
return(create(tmpout));
}
-/* set by trim */
-BOOL nosubst;
-copy(ioparg)
+VOID copy(ioparg)
IOPTR ioparg;
{
- CHAR c, *ends;
- REG CHAR *cline, *clinep;
+ INT c;
+ STRING ends;
+ REG STRING cline, clinep;
INT fd;
REG IOPTR iop;
- IF iop=ioparg
+ IF (iop=ioparg)!=NIL /* GCC */
THEN copy(iop->iolst);
ends=mactrim(iop->ioname); IF nosubst THEN iop->iofile &= ~IODOC FI
fd=tmpfil();
@@ -121,13 +132,36 @@
iop->iolst=iotemp; iotemp=iop;
cline=locstak();
+#if defined(SYSIII)
+ IF stripflg
+ THEN WHILE *ends=='\t' DO ends++ OD
+ FI
+#endif
LOOP clinep=cline; chkpr(NL);
+#if defined(SYSIII)
+ IF stripflg
+ THEN
+ WHILE (c=(nosubst ? readc() : nextc(*ends)), !eolchar(c))
+ && cline == clinep && c == '\t' DONE
+ WHILE (!eolchar(c))
+ DO
+ *clinep++=c;
+ c=(nosubst ? readc() : nextc(*ends));
+ OD
+ ELSE
+#endif
WHILE (c = (nosubst ? readc() : nextc(*ends)), !eolchar(c)) DO *clinep++ = c OD
+#if defined(SYSIII)
+ FI
+#endif
*clinep=0;
IF eof ORF eq(cline,ends) THEN break FI
*clinep++=NL;
- write(fd,cline,clinep-cline);
+ write(fd,cline,(SIZE) (clinep-cline));
POOL
+#if defined(SYSIII)
+ IF stripflg THEN stripflg-- FI
+#endif
close(fd);
FI
}