2010-04-27 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Tue, 27 Apr 2010 03:04:56 +0000 (03:04 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Tue, 27 Apr 2010 03:04:56 +0000 (03:04 +0000)
* rndw32ce.c (fillup_buffer): Rewrite without using nested
functions, which are broken on arm/cegcc.

random/ChangeLog
random/rndw32ce.c

index 71483c9..9feb32c 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-27  Marcus Brinkmann  <marcus@g10code.de>
+
+       * rndw32ce.c (fillup_buffer): Rewrite without using nested
+       functions, which are broken on arm/cegcc.
+
 2010-04-12  Brad Hards  <bradh@frogmouth.net>  (wk)
 
        Spelling fixes.
index 1223960..6cd5d57 100644 (file)
    some extra random.  We do this, despite that it is a questionable
    suggestion as the OS as better means of collecting entropy than an
    application.  */
+static size_t filler_used;
+static size_t filler_length;
+static unsigned char *filler_buffer;
+
 static void
-fillup_buffer (unsigned char *buffer, size_t length)
+filler (const void *data, size_t datalen, enum random_origins dummy)
 {
-  size_t used = 0;
+  (void)dummy;
+  if (filler_used + datalen > filler_length)
+    datalen = filler_length - filler_used;
+  memcpy (filler_buffer + filler_used, data, datalen);
+  filler_used += datalen;
+}
 
-  /* This code uses gcc anyway, thus we can use a nested function.  */
-  void filler (const void *data, size_t datalen, enum random_origins dummy)
-  {
-    (void)dummy;
-    if (used + datalen > length)
-      datalen = length - used;
-    memcpy (buffer+used, data, datalen);
-    used += datalen;
-  }
 
-  while (used < length)
+static void
+fillup_buffer (unsigned char *buffer, size_t length)
+{
+  filler_used = 0;
+  filler_length = length;
+  filler_buffer = buffer;
+
+  while (filler_used < length)
     _gcry_rndw32ce_gather_random_fast (filler, 0);
 }
 
 
-
 int
 _gcry_rndw32ce_gather_random (void (*add)(const void*, size_t,
                                           enum random_origins),