summaryrefslogtreecommitdiff
path: root/random
diff options
context:
space:
mode:
authorMarcus Brinkmann <mb@g10code.com>2010-04-27 03:04:56 +0000
committerMarcus Brinkmann <mb@g10code.com>2010-04-27 03:04:56 +0000
commit0e833de6d0c0c812f77cf92c2604ce89b401ae62 (patch)
treea40b33d2e40bcb5077472ba0d9036cf5fe8d7826 /random
parent3a1abf59f070c1e676e6dca8f5b966460126623d (diff)
downloadlibgcrypt-0e833de6d0c0c812f77cf92c2604ce89b401ae62.tar.gz
2010-04-27 Marcus Brinkmann <marcus@g10code.de>
* rndw32ce.c (fillup_buffer): Rewrite without using nested functions, which are broken on arm/cegcc.
Diffstat (limited to 'random')
-rw-r--r--random/ChangeLog5
-rw-r--r--random/rndw32ce.c32
2 files changed, 24 insertions, 13 deletions
diff --git a/random/ChangeLog b/random/ChangeLog
index 71483c90..9feb32c7 100644
--- a/random/ChangeLog
+++ b/random/ChangeLog
@@ -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.
diff --git a/random/rndw32ce.c b/random/rndw32ce.c
index 12239602..6cd5d57e 100644
--- a/random/rndw32ce.c
+++ b/random/rndw32ce.c
@@ -34,27 +34,33 @@
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),