mirror of https://git.FreeBSD.org/ports.git
190 lines
3.2 KiB
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
|
|
}
|