- lastf = openf = (FILE **)calloc(argc+1, sizeof (FILE *));
- if (openf == 0) {
- fprintf(stderr, "tee: Out of memory.\n");
- exit(-1);
+ add(1, "stdout");
+ for (; *argv; ++argv)
+ if ((fd = open(*argv, append ? O_WRONLY|O_CREAT :
+ O_WRONLY|O_CREAT|O_TRUNC, 0600)) < 0)
+ (void)fprintf(stderr, "tee: %s: %s.\n",
+ *argv, strerror(errno));
+ else {
+ if (append)
+ (void)lseek(fd, 0L, L_XTND);
+ add(fd, *argv);
+ }
+ exitval = 0;
+ while ((n = read(0, buf, sizeof(buf))) > 0)
+ for (p = head; p; p = p->next)
+ if (write(p->fd, buf, n) != n) {
+ (void)fprintf(stderr, "tee: %s: %s.\n",
+ p->name, strerror(errno));
+ exitval = 1;
+ }
+ if (n < 0) {
+ (void)fprintf(stderr, "tee: read: %s\n", strerror(errno));
+ exit(1);