[BACK]Return to paste.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / paste

Diff for /src/usr.bin/paste/paste.c between version 1.6 and 1.7

version 1.6, 1999/08/23 23:58:23 version 1.7, 1999/08/24 18:49:45
Line 116 
Line 116 
         register char ch, *p;          register char ch, *p;
         LIST *head, *tmp;          LIST *head, *tmp;
         int opencnt, output;          int opencnt, output;
           char *buf, *lbuf;
         size_t len;          size_t len;
   
         for (cnt = 0, head = NULL; (p = *argv); ++argv, ++cnt) {          for (cnt = 0, head = NULL; (p = *argv); ++argv, ++cnt) {
Line 142 
Line 143 
         }          }
   
         for (opencnt = cnt; opencnt;) {          for (opencnt = cnt; opencnt;) {
                   lbuf = NULL;
                 for (output = 0, lp = head; lp; lp = lp->next) {                  for (output = 0, lp = head; lp; lp = lp->next) {
                         if (!lp->fp) {                          if (!lp->fp) {
                                 if (output && lp->cnt &&                                  if (output && lp->cnt &&
Line 149 
Line 151 
                                         putchar(ch);                                          putchar(ch);
                                 continue;                                  continue;
                         }                          }
                         if (!(p = fgetln(lp->fp, &len))) {                          if (!(buf = fgetln(lp->fp, &len))) {
                                 if (!--opencnt)                                  if (!--opencnt)
                                         break;                                          break;
                                 lp->fp = NULL;                                  lp->fp = NULL;
Line 158 
Line 160 
                                         putchar(ch);                                          putchar(ch);
                                 continue;                                  continue;
                         }                          }
                         if (*(p + len - 1) == '\n')                          if (*(buf + len - 1) == '\n')
                                 *(p + len - 1) = '\0';                                  *(buf + len - 1) = '\0';
                         else {                          else {
                                 (void)fprintf(stderr,                                  lbuf = (char *)malloc(len + 1);
                                     "paste: %s: incomplete line.\n",                                  memcpy(lbuf, buf, len);
                                     lp->name);                                  lbuf[len] = '\0';
                                 exit(1);                                  buf = lbuf;
                         }                          }
                         /*                          /*
                          * make sure that we don't print any delimiters                           * make sure that we don't print any delimiters
Line 177 
Line 179 
                                                 putchar(ch);                                                  putchar(ch);
                         } else if ((ch = delim[(lp->cnt - 1) % delimcnt]))                          } else if ((ch = delim[(lp->cnt - 1) % delimcnt]))
                                 putchar(ch);                                  putchar(ch);
                         (void)printf("%s", p);                          (void)printf("%s", buf);
                           if (lbuf != NULL) {
                                   free(lbuf);
                                   lbuf = NULL;
                           }
                 }                  }
                 if (output)                  if (output)
                         putchar('\n');                          putchar('\n');
Line 191 
Line 197 
         register FILE *fp;          register FILE *fp;
         register int cnt;          register int cnt;
         register char ch, *p, *dp;          register char ch, *p, *dp;
         char buf[_POSIX2_LINE_MAX + 1];          char *buf, *lbuf;
           size_t len;
   
           lbuf = NULL;
         for (; (p = *argv); ++argv) {          for (; (p = *argv); ++argv) {
                 if (p[0] == '-' && !p[1])                  if (p[0] == '-' && !p[1])
                         fp = stdin;                          fp = stdin;
Line 201 
Line 209 
                             strerror(errno));                              strerror(errno));
                         continue;                          continue;
                 }                  }
                 if (fgets(buf, sizeof(buf), fp)) {                  if ((buf = fgetln(fp, &len))) {
                         for (cnt = 0, dp = delim;;) {                          for (cnt = 0, dp = delim;;) {
                                 if (!(p = strchr(buf, '\n'))) {                                  if (*(buf + len - 1) == '\n')
                                         (void)fprintf(stderr,                                          *(buf + len - 1) = '\0';
                                             "paste: %s: input line too long.\n",                                  else {
                                             *argv);                                          lbuf = (char *)malloc(len + 1);
                                         exit(1);                                          memcpy(lbuf, buf, len);
                                           lbuf[len] = '\0';
                                           buf = lbuf;
                                 }                                  }
                                 *p = '\0';  
                                 (void)printf("%s", buf);                                  (void)printf("%s", buf);
                                 if (!fgets(buf, sizeof(buf), fp))                                  if (!(buf = fgetln(fp, &len)))
                                         break;                                          break;
                                 if ((ch = *dp++))                                  if ((ch = *dp++))
                                         putchar(ch);                                          putchar(ch);
Line 224 
Line 233 
                 }                  }
                 if (fp != stdin)                  if (fp != stdin)
                         (void)fclose(fp);                          (void)fclose(fp);
                   if (lbuf != NULL) {
                           free(lbuf);
                           lbuf = NULL;
                   }
         }          }
 }  }
   

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7