* This code is derived from software contributed to Berkeley by
* Case Larsen.
*
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * %sccs.include.redist.c%
*/
#ifndef lint
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)comm.c 5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)comm.c 5.8 (Berkeley) %G%";
#endif /* not lint */
-#include <sys/file.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <errno.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
-#define MAXLINELEN (2048 + 1)
+#define MAXLINELEN (_POSIX2_LINE_MAX + 1)
-static char *tabs[] = { "", "\t", "\t\t" };
+char *tabs[] = { "", "\t", "\t\t" };
main(argc,argv)
int argc;
- char **argv;
+ char *argv[];
{
- extern int optind;
- FILE *fp1, *fp2, *file();
register int comp, file1done, file2done, read1, read2;
register char *col1, *col2, *col3;
int ch, flag1, flag2, flag3;
+ FILE *fp1, *fp2, *file();
char **p, line1[MAXLINELEN], line2[MAXLINELEN];
+ extern int optind;
flag1 = flag2 = flag3 = 1;
while ((ch = getopt(argc, argv, "-123")) != EOF)
/* for each column printed, add another tab offset */
p = tabs;
+ col1 = col2 = col3 = NULL;
if (flag1)
col1 = *p++;
if (flag2)
col2 = *p++;
if (flag3)
- col3 = *p++;
+ col3 = *p;
for (read1 = read2 = 1;;) {
/* read next line, check for EOF */
/* if one file done, display the rest of the other file */
if (file1done) {
if (!file2done && col2)
- show(fp1, col2, line2);
+ show(fp2, col2, line2);
break;
}
if (file2done) {
if (!file1done && col1)
- show(fp2, col1, line1);
+ show(fp1, col1, line1);
break;
}
if (!strcmp(name, "-"))
return(stdin);
- if (!(fp = fopen(name, "r"))) {
- (void)fprintf(stderr, "comm: can't read %s.\n", name);
+ if ((fp = fopen(name, "r")) == NULL) {
+ (void)fprintf(stderr, "comm: %s: %s\n", name, strerror(errno));
exit(1);
}
return(fp);
usage()
{
- (void)fprintf(stderr, "usage: comm [-123] [ - ] file1 file2\n");
+ (void)fprintf(stderr, "usage: comm [-123] file1 file2\n");
exit(1);
}