[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.21 and 1.22

version 1.21, 2020/06/10 21:01:32 version 1.22, 2020/06/10 21:02:33
Line 192 
Line 192 
                         if (freeable(cp))                          if (freeable(cp))
                                 xfree(cp->sval);                                  xfree(cp->sval);
                         temp = cp->cnext;       /* avoids freeing then using */                          temp = cp->cnext;       /* avoids freeing then using */
                         free(cp);                          free(cp);
                         tp->nelem--;                          tp->nelem--;
                 }                  }
                 tp->tab[i] = 0;                  tp->tab[i] = NULL;
         }          }
         if (tp->nelem != 0)          if (tp->nelem != 0)
                 WARNING("can't happen: inconsistent element count freeing %s", ap->nval);                  WARNING("can't happen: inconsistent element count freeing %s", ap->nval);
Line 208 
Line 208 
         Array *tp;          Array *tp;
         Cell *p, *prev = NULL;          Cell *p, *prev = NULL;
         int h;          int h;
   
         tp = (Array *) ap->sval;          tp = (Array *) ap->sval;
         h = hash(s, tp->size);          h = hash(s, tp->size);
         for (p = tp->tab[h]; p != NULL; prev = p, p = p->cnext)          for (p = tp->tab[h]; p != NULL; prev = p, p = p->cnext)
Line 304 
Line 304 
         int fldno;          int fldno;
   
         f += 0.0;               /* normalise negative zero to positive zero */          f += 0.0;               /* normalise negative zero to positive zero */
         if ((vp->tval & (NUM | STR)) == 0)          if ((vp->tval & (NUM | STR)) == 0)
                 funnyvar(vp, "assign to");                  funnyvar(vp, "assign to");
         if (isfld(vp)) {          if (isfld(vp)) {
                 donerec = 0;    /* mark $0 invalid */                  donerec = 0;    /* mark $0 invalid */
Line 319 
Line 319 
         } else if (isrec(vp)) {          } else if (isrec(vp)) {
                 donefld = 0;    /* mark $1... invalid */                  donefld = 0;    /* mark $1... invalid */
                 donerec = 1;                  donerec = 1;
                   savefs();
         } else if (vp == ofsloc) {          } else if (vp == ofsloc) {
                 if (donerec == 0)                  if (donerec == 0)
                         recbld();                          recbld();
Line 350 
Line 351 
         int fldno;          int fldno;
         Awkfloat f;          Awkfloat f;
   
            DPRINTF( ("starting setsval %p: %s = \"%s\", t=%o, r,f=%d,%d\n",             DPRINTF( ("starting setsval %p: %s = \"%s\", t=%o, r,f=%d,%d\n",
                 (void*)vp, NN(vp->nval), s, vp->tval, donerec, donefld) );                  (void*)vp, NN(vp->nval), s, vp->tval, donerec, donefld) );
         if ((vp->tval & (NUM | STR)) == 0)          if ((vp->tval & (NUM | STR)) == 0)
                 funnyvar(vp, "assign to");                  funnyvar(vp, "assign to");
Line 363 
Line 364 
         } else if (isrec(vp)) {          } else if (isrec(vp)) {
                 donefld = 0;    /* mark $1... invalid */                  donefld = 0;    /* mark $1... invalid */
                 donerec = 1;                  donerec = 1;
                   savefs();
         } else if (vp == ofsloc) {          } else if (vp == ofsloc) {
                 if (donerec == 0)                  if (donerec == 0)
                         recbld();                          recbld();
Line 374 
Line 376 
         vp->tval |= STR;          vp->tval |= STR;
         vp->fmt = NULL;          vp->fmt = NULL;
         setfree(vp);          setfree(vp);
            DPRINTF( ("setsval %p: %s = \"%s (%p) \", t=%o r,f=%d,%d\n",             DPRINTF( ("setsval %p: %s = \"%s (%p) \", t=%o r,f=%d,%d\n",
                 (void*)vp, NN(vp->nval), t, (void *) t, vp->tval, donerec, donefld) );                  (void*)vp, NN(vp->nval), t, (void *) t, vp->tval, donerec, donefld) );
         vp->sval = t;          vp->sval = t;
         if (&vp->fval == NF) {          if (&vp->fval == NF) {
Line 515 
Line 517 
         return p;          return p;
 }  }
   
   Cell *catstr(Cell *a, Cell *b) /* concatenate a and b */
   {
           Cell *c;
           char *p;
           char *sa = getsval(a);
           char *sb = getsval(b);
           size_t l = strlen(sa) + strlen(sb) + 1;
           p = malloc(l);
           if (p == NULL)
                   FATAL("out of space concatenating %s and %s", sa, sb);
           snprintf(p, l, "%s%s", sa, sb);
           c = setsymtab(p, p, 0.0, CON|STR|DONTFREE, symtab);
           free(p);
           return c;
   }
   
 char *qstring(const char *is, int delim)        /* collect string up to next delim */  char *qstring(const char *is, int delim)        /* collect string up to next delim */
 {  {
         const char *os = is;          const char *os = is;
Line 534 
Line 552 
                         if (c == 0) {   /* \ at end */                          if (c == 0) {   /* \ at end */
                                 *bp++ = '\\';                                  *bp++ = '\\';
                                 break;  /* for loop */                                  break;  /* for loop */
                         }                          }
                         switch (c) {                          switch (c) {
                         case '\\':      *bp++ = '\\'; break;                          case '\\':      *bp++ = '\\'; break;
                         case 'n':       *bp++ = '\n'; break;                          case 'n':       *bp++ = '\n'; break;
                         case 't':       *bp++ = '\t'; break;                          case 't':       *bp++ = '\t'; break;
                         case 'v':       *bp++ = '\v'; break;  
                         case 'b':       *bp++ = '\b'; break;                          case 'b':       *bp++ = '\b'; break;
                         case 'f':       *bp++ = '\f'; break;                          case 'f':       *bp++ = '\f'; break;
                         case 'r':       *bp++ = '\r'; break;                          case 'r':       *bp++ = '\r'; break;
                         case 'a':       *bp++ = '\007'; break;                          case 'v':       *bp++ = '\v'; break;
                           case 'a':       *bp++ = '\a'; break;
                         default:                          default:
                                 if (!isdigit(c)) {                                  if (!isdigit(c)) {
                                         *bp++ = c;                                          *bp++ = c;

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22