Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/historical/nawk/dist Add a check_number function th...



details:   https://anonhg.NetBSD.org/src/rev/ac6e852e2522
branches:  trunk
changeset: 943363:ac6e852e2522
user:      christos <christos%NetBSD.org@localhost>
date:      Mon Aug 31 23:37:55 2020 +0000

description:
Add a check_number function that does what is repeated in many places in
the code, but better.

diffstat:

 external/historical/nawk/dist/lib.c   |  36 +++++++++++++++++++---------------
 external/historical/nawk/dist/proto.h |   1 +
 external/historical/nawk/dist/run.c   |  15 ++-----------
 3 files changed, 24 insertions(+), 28 deletions(-)

diffs (119 lines):

diff -r a95c7545569f -r ac6e852e2522 external/historical/nawk/dist/lib.c
--- a/external/historical/nawk/dist/lib.c       Mon Aug 31 23:36:58 2020 +0000
+++ b/external/historical/nawk/dist/lib.c       Mon Aug 31 23:37:55 2020 +0000
@@ -191,10 +191,7 @@
                                        xfree(fldtab[0]->sval);
                                fldtab[0]->sval = buf;  /* buf == record */
                                fldtab[0]->tval = REC | STR | DONTFREE;
-                               if (is_number(fldtab[0]->sval)) {
-                                       fldtab[0]->fval = atof(fldtab[0]->sval);
-                                       fldtab[0]->tval |= NUM;
-                               }
+                               check_number(fldtab[0]);
                        }
                        setfval(nrloc, nrloc->fval+1);
                        setfval(fnrloc, fnrloc->fval+1);
@@ -306,10 +303,7 @@
        p = qstring(p, '\0');
        q = setsymtab(s, p, 0.0, STR, symtab);
        setsval(q, p);
-       if (is_number(q->sval)) {
-               q->fval = atof(q->sval);
-               q->tval |= NUM;
-       }
+       check_number(q);
           dprintf( ("command line set %s to |%s|\n", s, p) );
 }
 
@@ -407,10 +401,7 @@
        donefld = true;
        for (j = 1; j <= lastfld; j++) {
                p = fldtab[j];
-               if(is_number(p->sval)) {
-                       p->fval = atof(p->sval);
-                       p->tval |= NUM;
-               }
+               check_number(p);
        }
        setfval(nfloc, (Awkfloat) lastfld);
        donerec = true; /* restore */
@@ -763,7 +754,8 @@
 /* wrong: violates 4.10.1.4 of ansi C standard */
 
 #include <math.h>
-int is_number(const char *s)
+
+static int get_number(const char *s, double *res)
 {
        double r;
        char *ep;
@@ -773,8 +765,20 @@
                return 0;
        while (*ep == ' ' || *ep == '\t' || *ep == '\n')
                ep++;
-       if (*ep == '\0')
-               return 1;
-       else
+       if (*ep != '\0')
                return 0;
+       if (res)                
+               *res = r;
+       return 1;
 }
+
+void check_number(Cell *x)
+{
+       if (get_number(x->sval, &x->fval))
+               x->tval |= NUM;
+}
+
+int is_number(const char *s)
+{
+       return get_number(s, NULL);
+}
diff -r a95c7545569f -r ac6e852e2522 external/historical/nawk/dist/proto.h
--- a/external/historical/nawk/dist/proto.h     Mon Aug 31 23:36:58 2020 +0000
+++ b/external/historical/nawk/dist/proto.h     Mon Aug 31 23:37:55 2020 +0000
@@ -149,6 +149,7 @@
 extern double  errcheck(double, const char *);
 extern int     isclvar(const char *);
 extern int     is_number(const char *);
+extern void    check_number(Cell *);
 
 extern int     adjbuf(char **, int *, int, int, char **, const char *);
 extern void    run(Node *);
diff -r a95c7545569f -r ac6e852e2522 external/historical/nawk/dist/run.c
--- a/external/historical/nawk/dist/run.c       Mon Aug 31 23:36:58 2020 +0000
+++ b/external/historical/nawk/dist/run.c       Mon Aug 31 23:37:55 2020 +0000
@@ -432,17 +432,11 @@
                } else if (a[0] != NULL) {      /* getline var <file */
                        x = execute(a[0]);
                        setsval(x, buf);
-                       if (is_number(x->sval)) {
-                               x->fval = atof(x->sval);
-                               x->tval |= NUM;
-                       }
+                       check_number(x);
                        tempfree(x);
                } else {                        /* getline <file */
                        setsval(fldtab[0], buf);
-                       if (is_number(fldtab[0]->sval)) {
-                               fldtab[0]->fval = atof(fldtab[0]->sval);
-                               fldtab[0]->tval |= NUM;
-                       }
+                       check_number(fldtab[0]);
                }
        } else {                        /* bare getline; use current input */
                if (a[0] == NULL)       /* getline */
@@ -451,10 +445,7 @@
                        n = getrec(&buf, &bufsize, false);
                        x = execute(a[0]);
                        setsval(x, buf);
-                       if (is_number(x->sval)) {
-                               x->fval = atof(x->sval);
-                               x->tval |= NUM;
-                       }
+                       check_number(x);
                        tempfree(x);
                }
        }



Home | Main Index | Thread Index | Old Index