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

Diff for /src/usr.bin/tail/read.c between version 1.7 and 1.8

version 1.7, 2003/06/03 02:56:17 version 1.8, 2006/03/22 19:43:29
Line 42 
Line 42 
   
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/stat.h>  #include <sys/stat.h>
   #include <sys/limits.h>
   
 #include <err.h>  #include <err.h>
 #include <errno.h>  #include <errno.h>
Line 71 
Line 72 
         FILE *fp;          FILE *fp;
         off_t off;          off_t off;
 {  {
         int ch, len, tlen;          int ch;
           size_t len, tlen;
         char *ep, *p, *t;          char *ep, *p, *t;
         int wrap;          int wrap;
         char *sp;          char *sp;
   
           if (off > SIZE_T_MAX)
                   errx(1, "offset too large");
   
         if ((sp = p = malloc(off)) == NULL)          if ((sp = p = malloc(off)) == NULL)
                 err(1, NULL);                  err(1, NULL);
   
Line 143 
Line 148 
         off_t off;          off_t off;
 {  {
         struct {          struct {
                 u_int blen;                  size_t blen;
                 u_int len;                  size_t len;
                 char *l;                  char *l;
         } *lines;          } *lines;
         int ch;          int ch;
         char *p = NULL;          char *p = NULL;
         int blen, cnt, recno, wrap;          int wrap;
         char *sp = NULL;          size_t cnt, recno, blen, newsize;
           char *sp = NULL, *newp = NULL;
   
           if (off > SIZE_T_MAX)
                   errx(1, "offset too large");
   
         if ((lines = calloc(off, sizeof(*lines))) == NULL)          if ((lines = calloc(off, sizeof(*lines))) == NULL)
                 err(1, NULL);                  err(1, NULL);
   
Line 159 
Line 168 
   
         while ((ch = getc(fp)) != EOF) {          while ((ch = getc(fp)) != EOF) {
                 if (++cnt > blen) {                  if (++cnt > blen) {
                         if ((sp = realloc(sp, blen += 1024)) == NULL)                          newsize = blen + 1024;
                           if ((newp = realloc(sp, newsize)) == NULL)
                                 err(1, NULL);                                  err(1, NULL);
                           sp = newp;
                           blen = newsize;
                         p = sp + cnt - 1;                          p = sp + cnt - 1;
                 }                  }
                 *p++ = ch;                  *p++ = ch;
                 if (ch == '\n') {                  if (ch == '\n') {
                         if (lines[recno].blen < cnt) {                          if (lines[recno].blen < cnt) {
                                 lines[recno].blen = cnt + 256;                                  newsize = cnt + 256;
                                 if ((lines[recno].l = realloc(lines[recno].l,                                  if ((newp = realloc(lines[recno].l,
                                     lines[recno].blen)) == NULL)                                      newsize)) == NULL)
                                         err(1, NULL);                                          err(1, NULL);
                                   lines[recno].l = newp;
                                   lines[recno].blen = newsize;
                         }                          }
                         memcpy(lines[recno].l, sp, (lines[recno].len = cnt));                          memcpy(lines[recno].l, sp, (lines[recno].len = cnt));
                         cnt = 0;                          cnt = 0;
Line 194 
Line 208 
         }          }
   
         if (rflag) {          if (rflag) {
                 for (cnt = recno - 1; cnt >= 0; --cnt)                  for (cnt = recno; cnt > 0; --cnt)
                         WR(lines[cnt].l, lines[cnt].len);                          WR(lines[cnt - 1].l, lines[cnt - 1].len);
                 if (wrap)                  if (wrap)
                         for (cnt = off - 1; cnt >= recno; --cnt)                          for (cnt = off; cnt > recno; --cnt)
                                 WR(lines[cnt].l, lines[cnt].len);                                  WR(lines[cnt - 1].l, lines[cnt - 1].len);
         } else {          } else {
                 if (wrap)                  if (wrap)
                         for (cnt = recno; cnt < off; ++cnt)                          for (cnt = recno; cnt < off; ++cnt)

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