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 PR/44876: Aleksey Cheusov: awk...



details:   https://anonhg.NetBSD.org/src/rev/9e633f7f4496
branches:  trunk
changeset: 764383:9e633f7f4496
user:      christos <christos%NetBSD.org@localhost>
date:      Mon Apr 18 15:23:28 2011 +0000

description:
PR/44876: Aleksey Cheusov: awk: incorrect return value of function srand()
Make it return the value of the previous random seed as the standard mandates.

diffstat:

 external/historical/nawk/dist/main.c |  5 +++++
 external/historical/nawk/dist/run.c  |  6 +++++-
 2 files changed, 10 insertions(+), 1 deletions(-)

diffs (52 lines):

diff -r 1683370ae944 -r 9e633f7f4496 external/historical/nawk/dist/main.c
--- a/external/historical/nawk/dist/main.c      Mon Apr 18 08:36:14 2011 +0000
+++ b/external/historical/nawk/dist/main.c      Mon Apr 18 15:23:28 2011 +0000
@@ -42,6 +42,7 @@
 extern int     nfields;
 
 int    dbg     = 0;
+unsigned int srand_seed;
 char   *cmdname;       /* gets argv[0] for error messages */
 extern FILE    *yyin;  /* lex input file */
 char   *lexprog;       /* points to program argument if it exists */
@@ -122,6 +123,10 @@
 #else
        (void)signal(SIGFPE, fpecatch);
 #endif
+       /* Set and keep track of the random seed */
+       srand_seed = 1;
+       srand(srand_seed);
+
        yyin = NULL;
        symtab = makesymtab(NSYMTAB/NSYMTAB);
        while (argc > 1 && argv[1][0] == '-' && argv[1][1] != '\0') {
diff -r 1683370ae944 -r 9e633f7f4496 external/historical/nawk/dist/run.c
--- a/external/historical/nawk/dist/run.c       Mon Apr 18 08:36:14 2011 +0000
+++ b/external/historical/nawk/dist/run.c       Mon Apr 18 15:23:28 2011 +0000
@@ -74,6 +74,7 @@
 
 jmp_buf env;
 extern int     pairstack[];
+extern unsigned int srand_seed;
 
 Node   *winner = NULL; /* root of parse tree */
 Cell   *tmps;          /* free temporary cells for execution */
@@ -1546,6 +1547,7 @@
        Cell *x, *y;
        Awkfloat u;
        int t, sz;
+       unsigned int tmp;
        char *buf, *fmt;
        Node *nextarg;
        FILE *fp;
@@ -1598,7 +1600,9 @@
                        u = time((time_t *)0);
                else
                        u = getfval(x);
-               srand((unsigned int) u);
+               srand(tmp = (unsigned int) u);
+               u = srand_seed;
+               srand_seed = tmp;
                break;
        case FTOUPPER:
        case FTOLOWER:



Home | Main Index | Thread Index | Old Index