diff options
author | Marcus Brinkmann <mb@g10code.com> | 2010-04-27 03:04:56 +0000 |
---|---|---|
committer | Marcus Brinkmann <mb@g10code.com> | 2010-04-27 03:04:56 +0000 |
commit | 0e833de6d0c0c812f77cf92c2604ce89b401ae62 (patch) | |
tree | a40b33d2e40bcb5077472ba0d9036cf5fe8d7826 /random/rndw32ce.c | |
parent | 3a1abf59f070c1e676e6dca8f5b966460126623d (diff) | |
download | libgcrypt-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/rndw32ce.c')
-rw-r--r-- | random/rndw32ce.c | 32 |
1 files changed, 19 insertions, 13 deletions
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), |