Copy files from xscreensaver-5.11 xscreensaver-files
authorJoachim Breitner <mail@joachim-breitner.de>
Mon, 21 Jun 2010 08:15:52 +0000 (10:15 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Mon, 21 Jun 2010 08:15:52 +0000 (10:15 +0200)
hacks/screenhack.c
utils/yarandom.c

index f90289d..bd251dc 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2010 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -221,6 +221,8 @@ merge_options (void)
          strcat (newr, oldr);
          *s = newr;
        }
+      else
+        *s = strdup (*s);
   }
 }
 
@@ -806,6 +808,12 @@ main (int argc, char **argv)
       exit (help_p ? 0 : 1);
     }
 
+  {
+    char **s;
+    for (s = merged_defaults; *s; s++)
+      free(*s);
+  }
+
   free (merged_options);
   free (merged_defaults);
   merged_options = 0;
index cc38895..6d4a323 100644 (file)
@@ -1,5 +1,5 @@
 /* yarandom.c -- Yet Another Random Number Generator.
- * Copyright (c) 1997, 1998, 2003 by Jamie Zawinski <jwz@jwz.org>
+ * Copyright (c) 1997-2010 by Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -109,14 +109,28 @@ ya_rand_init(unsigned int seed)
 #else
       gettimeofday(&tp);
 #endif
-      /* ignore overflow */
-      seed = (999*tp.tv_sec) + (1001*tp.tv_usec) + (1003 * getpid());
+      /* Since the multiplications will have a larger effect on the
+         upper bits than the lower bits, after every addition in the
+         seed, perform a bitwise rotate by an odd number, resulting
+         in a better distribution of randomness throughout the bits.
+         -- Brian Carlson, 2010.
+       */
+#define ROT(X,N) (((X)<<(N)) | ((X)>>((sizeof(unsigned int)*8)-(N))))
+      seed = (999 * tp.tv_sec);
+      seed = ROT (seed, 11);
+      seed += (1001 * tp.tv_usec);
+      seed = ROT (seed, 7);
+      seed += (1003 * getpid());
+      seed = ROT (seed, 13);
     }
 
   a[0] += seed;
   for (i = 1; i < VectorSize; i++)
     {
-      seed = a[i-1]*1001 + seed*999;
+      seed = seed*999;
+      seed = ROT (seed, 9);
+      seed += a[i-1]*1001;
+      seed = ROT (seed, 15);
       a[i] += seed;
     }