Module Name: src
Committed By: christos
Date: Mon Apr 18 15:23:28 UTC 2011
Modified Files:
src/external/historical/nawk/dist: main.c run.c
Log Message:
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.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/historical/nawk/dist/main.c
cvs rdiff -u -r1.2 -r1.3 src/external/historical/nawk/dist/run.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/historical/nawk/dist/main.c
diff -u src/external/historical/nawk/dist/main.c:1.4 src/external/historical/nawk/dist/main.c:1.5
--- src/external/historical/nawk/dist/main.c:1.4 Mon Oct 18 11:58:05 2010
+++ src/external/historical/nawk/dist/main.c Mon Apr 18 11:23:28 2011
@@ -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') {
Index: src/external/historical/nawk/dist/run.c
diff -u src/external/historical/nawk/dist/run.c:1.2 src/external/historical/nawk/dist/run.c:1.3
--- src/external/historical/nawk/dist/run.c:1.2 Thu Aug 26 10:55:20 2010
+++ src/external/historical/nawk/dist/run.c Mon Apr 18 11:23:28 2011
@@ -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: