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

Diff for /src/usr.bin/awk/tran.c between version 1.24 and 1.25

version 1.24, 2020/06/10 21:03:56 version 1.25, 2020/06/10 21:04:40
Line 115 
Line 115 
         rlengthloc = setsymtab("RLENGTH", "", 0.0, NUM, symtab);          rlengthloc = setsymtab("RLENGTH", "", 0.0, NUM, symtab);
         RLENGTH = &rlengthloc->fval;          RLENGTH = &rlengthloc->fval;
         symtabloc = setsymtab("SYMTAB", "", 0.0, ARR, symtab);          symtabloc = setsymtab("SYMTAB", "", 0.0, ARR, symtab);
           free(symtabloc->sval);
         symtabloc->sval = (char *) symtab;          symtabloc->sval = (char *) symtab;
 }  }
   
Line 127 
Line 128 
         ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval;          ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval;
         cp = setsymtab("ARGV", "", 0.0, ARR, symtab);          cp = setsymtab("ARGV", "", 0.0, ARR, symtab);
         ARGVtab = makesymtab(NSYMTAB);  /* could be (int) ARGC as well */          ARGVtab = makesymtab(NSYMTAB);  /* could be (int) ARGC as well */
           free(cp->sval);
         cp->sval = (char *) ARGVtab;          cp->sval = (char *) ARGVtab;
         for (i = 0; i < ac; i++) {          for (i = 0; i < ac; i++) {
                 snprintf(temp, sizeof temp, "%d", i);                  snprintf(temp, sizeof temp, "%d", i);
Line 145 
Line 147 
   
         cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab);          cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab);
         ENVtab = makesymtab(NSYMTAB);          ENVtab = makesymtab(NSYMTAB);
           free(cp->sval);
         cp->sval = (char *) ENVtab;          cp->sval = (char *) ENVtab;
         for ( ; *envp; envp++) {          for ( ; *envp; envp++) {
                 if ((p = strchr(*envp, '=')) == NULL)                  if ((p = strchr(*envp, '=')) == NULL)
Line 526 
Line 529 
         if (p == NULL)          if (p == NULL)
                 FATAL("out of space concatenating %s and %s", sa, sb);                  FATAL("out of space concatenating %s and %s", sa, sb);
         snprintf(p, l, "%s%s", sa, sb);          snprintf(p, l, "%s%s", sa, sb);
         c = setsymtab(p, p, 0.0, CON|STR|DONTFREE, symtab);          char *newbuf = malloc(strlen(p) + 2);
           if (newbuf == NULL)
                   FATAL("out of space concatenating %s and %s", sa, sb);
           // See string() in lex.c; a string "xx" is stored in the symbol
           // table as "xx ".
           sprintf(newbuf, "%s ", p);
           c = setsymtab(newbuf, p, 0.0, CON|STR|DONTFREE, symtab);
         free(p);          free(p);
           free(newbuf);
         return c;          return c;
 }  }
   

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.25