=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/awk/tran.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/awk/tran.c 1997/08/25 16:17:14 1.3 --- src/usr.bin/awk/tran.c 1999/04/18 17:06:31 1.4 *************** *** 1,4 **** ! /* $OpenBSD: tran.c,v 1.3 1997/08/25 16:17:14 kstailey Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved --- 1,4 ---- ! /* $OpenBSD: tran.c,v 1.4 1999/04/18 17:06:31 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved *************** *** 108,114 **** cp->sval = (char *) ARGVtab; for (i = 0; i < ac; i++) { sprintf(temp, "%d", i); ! if (isnumber(*av)) setsymtab(temp, *av, atof(*av), STR|NUM, ARGVtab); else setsymtab(temp, *av, 0.0, STR, ARGVtab); --- 108,114 ---- cp->sval = (char *) ARGVtab; for (i = 0; i < ac; i++) { sprintf(temp, "%d", i); ! if (is_number(*av)) setsymtab(temp, *av, atof(*av), STR|NUM, ARGVtab); else setsymtab(temp, *av, 0.0, STR, ARGVtab); *************** *** 128,134 **** if ((p = strchr(*envp, '=')) == NULL) continue; *p++ = 0; /* split into two strings at = */ ! if (isnumber(p)) setsymtab(*envp, p, atof(p), STR|NUM, ENVtab); else setsymtab(*envp, p, 0.0, STR, ENVtab); --- 128,134 ---- if ((p = strchr(*envp, '=')) == NULL) continue; *p++ = 0; /* split into two strings at = */ ! if (is_number(p)) setsymtab(*envp, p, atof(p), STR|NUM, ENVtab); else setsymtab(*envp, p, 0.0, STR, ENVtab); *************** *** 288,293 **** --- 288,295 ---- donefld = 0; /* mark $1... invalid */ donerec = 1; } + if (freeable(vp)) + xfree(vp->sval); /* free any previous string */ vp->tval &= ~STR; /* mark string invalid */ vp->tval |= NUM; /* mark number ok */ dprintf( ("setfval %p: %s = %g, t=%o\n", vp, vp->nval, f, vp->tval) ); *************** *** 342,348 **** recbld(); if (!isnum(vp)) { /* not a number */ vp->fval = atof(vp->sval); /* best guess */ ! if (isnumber(vp->sval) && !(vp->tval&CON)) vp->tval |= NUM; /* make NUM only sparingly */ } dprintf( ("getfval %p: %s = %g, t=%o\n", vp, vp->nval, vp->fval, vp->tval) ); --- 344,350 ---- recbld(); if (!isnum(vp)) { /* not a number */ vp->fval = atof(vp->sval); /* best guess */ ! if (is_number(vp->sval) && !(vp->tval&CON)) vp->tval |= NUM; /* make NUM only sparingly */ } dprintf( ("getfval %p: %s = %g, t=%o\n", vp, vp->nval, vp->fval, vp->tval) );