projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
document distributed with 4.2BSD
[unix-history]
/
usr
/
src
/
bin
/
cat
/
cat.c
diff --git
a/usr/src/bin/cat/cat.c
b/usr/src/bin/cat/cat.c
index
91eca19
..
0b9e5ef
100644
(file)
--- a/
usr/src/bin/cat/cat.c
+++ b/
usr/src/bin/cat/cat.c
@@
-1,6
+1,12
@@
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved. The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
#ifndef lint
#ifndef lint
-static char
*sccsid = "@(#)cat.c 4.8
(Berkeley) %G%";
-#endif
+static char
sccsid[] = "@(#)cat.c 5.2
(Berkeley) %G%";
+#endif
not lint
/*
* Concatenate files.
/*
* Concatenate files.
@@
-10,7
+16,7
@@
static char *sccsid = "@(#)cat.c 4.8 (Berkeley) %G%";
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
-/* #define OPTSIZE BUFSIZ /* define this only if not 4.2 BSD */
+/* #define OPTSIZE BUFSIZ /* define this only if not 4.2 BSD
or beyond
*/
int bflg, eflg, nflg, sflg, tflg, uflg, vflg;
int spaced, col, lno, inline, ibsize, obsize;
int bflg, eflg, nflg, sflg, tflg, uflg, vflg;
int spaced, col, lno, inline, ibsize, obsize;
@@
-64,7
+70,9
@@
char **argv;
dev = statb.st_dev;
ino = statb.st_ino;
}
dev = statb.st_dev;
ino = statb.st_ino;
}
+#ifndef OPTSIZE
obsize = statb.st_blksize;
obsize = statb.st_blksize;
+#endif
}
else
obsize = 0;
}
else
obsize = 0;
@@
-91,7
+99,9
@@
char **argv;
retval = 1;
continue;
}
retval = 1;
continue;
}
+#ifndef OPTSIZE
ibsize = statb.st_blksize;
ibsize = statb.st_blksize;
+#endif
}
else
ibsize = 0;
}
else
ibsize = 0;
@@
-101,9
+111,11
@@
char **argv;
while ((c = getc(fi)) != EOF)
putchar(c);
} else
while ((c = getc(fi)) != EOF)
putchar(c);
} else
-
fastcat(fileno(fi));
/* no flags specified */
+
retval |= fastcat(fileno(fi));
/* no flags specified */
if (fi!=stdin)
fclose(fi);
if (fi!=stdin)
fclose(fi);
+ else
+ clearerr(fi); /* reset sticky eof */
if (ferror(stdout)) {
fprintf(stderr, "cat: output write error\n");
retval = 1;
if (ferror(stdout)) {
fprintf(stderr, "cat: output write error\n");
retval = 1;
@@
-169,18
+181,20
@@
register int fd;
char *malloc();
#ifndef OPTSIZE
char *malloc();
#ifndef OPTSIZE
- if (
ibsize == 0
)
- buffsize =
BUFSIZ; /* handle reads from a pip
e */
- else if (
obsize == 0
)
+ if (
obsize
)
+ buffsize =
obsize; /* common case, use output blksiz
e */
+ else if (
ibsize
)
buffsize = ibsize;
else
buffsize = ibsize;
else
- buffsize =
obsize; /* common case, use output blksize */
+ buffsize =
BUFSIZ;
#else
buffsize = OPTSIZE;
#endif
#else
buffsize = OPTSIZE;
#endif
- if ((buff = malloc(buffsize)) == NULL)
+ if ((buff = malloc(buffsize)) == NULL)
{
perror("cat: no memory");
perror("cat: no memory");
+ return (1);
+ }
/*
* Note that on some systems (V7), very large writes to a pipe
/*
* Note that on some systems (V7), very large writes to a pipe
@@
-191,13
+205,18
@@
register int fd;
offset = 0;
do {
nwritten = write(fileno(stdout), &buff[offset], n);
offset = 0;
do {
nwritten = write(fileno(stdout), &buff[offset], n);
- if (nwritten <= 0)
+ if (nwritten <= 0)
{
perror("cat: write error");
perror("cat: write error");
+ exit(2);
+ }
offset += nwritten;
} while ((n -= nwritten) > 0);
}
offset += nwritten;
} while ((n -= nwritten) > 0);
}
- if (n < 0)
- perror("cat: read error");
free(buff);
free(buff);
+ if (n < 0) {
+ perror("cat: read error");
+ return (1);
+ }
+ return (0);
}
}