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

Diff for /src/usr.bin/awk/lib.c between version 1.32 and 1.33

version 1.32, 2020/06/10 21:03:56 version 1.33, 2020/06/10 21:05:02
Line 31 
Line 31 
 #include <stdlib.h>  #include <stdlib.h>
 #include <unistd.h>  #include <unistd.h>
 #include <stdarg.h>  #include <stdarg.h>
   #include <limits.h>
 #include "awk.h"  #include "awk.h"
 #include "ytab.h"  #include "ytab.h"
   
   char    EMPTY[] = { '\0' };
 FILE    *infile = NULL;  FILE    *infile = NULL;
 char    *file   = "";  char    *file   = EMPTY;
 char    *record;  char    *record;
 int     recsize = RECSIZE;  int     recsize = RECSIZE;
 char    *fields;  char    *fields;
 int     fieldssize = RECSIZE;  int     fieldssize = RECSIZE;
   
 Cell    **fldtab;       /* pointers to Cells */  Cell    **fldtab;       /* pointers to Cells */
 char    inputFS[100] = " ";  static size_t   len_inputFS = 0;
   static char     *inputFS = NULL; /* FS at time of input, for field splitting */
   
 #define MAXFLD  2  #define MAXFLD  2
 int     nfields = MAXFLD;       /* last allocated slot for $i */  int     nfields = MAXFLD;       /* last allocated slot for $i */
Line 54 
Line 57 
 int     argno   = 1;    /* current input argument number */  int     argno   = 1;    /* current input argument number */
 extern  Awkfloat *ARGC;  extern  Awkfloat *ARGC;
   
 static Cell dollar0 = { OCELL, CFLD, NULL, "", 0.0, REC|STR|DONTFREE };  static Cell dollar0 = { OCELL, CFLD, NULL, EMPTY, 0.0, REC|STR|DONTFREE };
 static Cell dollar1 = { OCELL, CFLD, NULL, "", 0.0, FLD|STR|DONTFREE };  static Cell dollar1 = { OCELL, CFLD, NULL, EMPTY, 0.0, FLD|STR|DONTFREE };
   
 void recinit(unsigned int n)  void recinit(unsigned int n)
 {  {
Line 118 
Line 121 
  */   */
 void savefs(void)  void savefs(void)
 {  {
         if (strlen(getsval(fsloc)) >= sizeof (inputFS))          size_t len;
           if ((len = strlen(getsval(fsloc))) < len_inputFS) {
                   strlcpy(inputFS, *FS, sizeof(inputFS)); /* for subsequent field splitting */
                   return;
           }
   
           len_inputFS = len + 1;
           inputFS = realloc(inputFS, len_inputFS);
           if (inputFS == NULL)
                 FATAL("field separator %.10s... is too long", *FS);                  FATAL("field separator %.10s... is too long", *FS);
         strlcpy(inputFS, *FS, sizeof(inputFS));          memcpy(inputFS, *FS, len_inputFS);
 }  }
   
 static bool firsttime = true;  static bool firsttime = true;
Line 335 
Line 346 
                 *fr = 0;                  *fr = 0;
         } else if ((sep = *inputFS) == 0) {             /* new: FS="" => 1 char/field */          } else if ((sep = *inputFS) == 0) {             /* new: FS="" => 1 char/field */
                 for (i = 0; *r != '\0'; r += n) {                  for (i = 0; *r != '\0'; r += n) {
                         char buf[MB_CUR_MAX + 1];                          char buf[MB_LEN_MAX + 1];
   
                         i++;                          i++;
                         if (i > nfields)                          if (i > nfields)
                                 growfldtab(i);                                  growfldtab(i);
                         if (freeable(fldtab[i]))                          if (freeable(fldtab[i]))
                                 xfree(fldtab[i]->sval);                                  xfree(fldtab[i]->sval);
                         n = mblen(r, MB_CUR_MAX);                          n = mblen(r, MB_LEN_MAX);
                         if (n < 0)                          if (n < 0)
                                 n = 1;                                  n = 1;
                         memcpy(buf, r, n);                          memcpy(buf, r, n);
Line 406 
Line 417 
                 p = fldtab[i];                  p = fldtab[i];
                 if (freeable(p))                  if (freeable(p))
                         xfree(p->sval);                          xfree(p->sval);
                 p->sval = "";                  p->sval = EMPTY,
                 p->tval = FLD | STR | DONTFREE;                  p->tval = FLD | STR | DONTFREE;
         }          }
 }  }

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.33