See ChangeLog: Sat Mar 20 11:53:40 CET 1999 Werner Koch
authorWerner Koch <wk@gnupg.org>
Sat, 20 Mar 1999 10:53:34 +0000 (10:53 +0000)
committerWerner Koch <wk@gnupg.org>
Sat, 20 Mar 1999 10:53:34 +0000 (10:53 +0000)
cipher/ChangeLog
cipher/rndegd.c
cipher/rndlinux.c

index 3ac7d31..bfb5860 100644 (file)
@@ -1,3 +1,9 @@
+Sat Mar 20 11:44:21 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * rndlinux.c (tty_printf) [IS_MODULE]: Removed.
+
+       * rndegd.c (gather_random): Some fixes.
+
 Wed Mar 17 13:09:03 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
        * rndegd.c (do_read): New.
index 0777ff8..7fc1f49 100644 (file)
@@ -82,6 +82,7 @@ do_read( int fd, void *buf, size_t nbytes )
 }
 
 
+
 /* fixme: level 1 is not yet handled */
 static int
 gather_random( void (*add)(const void*, size_t, int), int requester,
@@ -138,14 +139,15 @@ gather_random( void (*add)(const void*, size_t, int), int requester,
        do_restart = 1;
        goto restart;
     }
-    if( !n ) {
-       g10_log_error("bad EGD reply: too short\n");
-       do_restart = 1;
-       goto restart;
-    }
-    if( n > 1 ) {
-       n--;
-       (*add)( buffer+1, n, requester );
+    n = buffer[0];
+    if( n ) {
+       n = do_read( fd, buffer, n );
+       if( n == -1 ) {
+           g10_log_error("read error on EGD: %s\n", strerror(errno));
+           do_restart = 1;
+           goto restart;
+       }
+       (*add)( buffer, n, requester );
        length -= n;
     }
 
@@ -172,11 +174,6 @@ gather_random( void (*add)(const void*, size_t, int), int requester,
            do_restart = 1;
            goto restart;
        }
-       if( n != nbytes  ) {
-           g10_log_error("bad EGD reply: too short %d/%d\n", nbytes, n );
-           do_restart = 1;
-           goto restart;
-       }
        (*add)( buffer, n, requester );
        length -= n;
     }
index 365233b..8c591fb 100644 (file)
@@ -48,14 +48,6 @@ static int open_device( const char *name, int minor );
 static int gather_random( void (*add)(const void*, size_t, int), int requester,
                                          size_t length, int level );
 
-#ifdef IS_MODULE
-static void tty_printf(const char *fmt, ... )
-{
-    g10_log_info("tty_printf not available (%s)\n", fmt );
-}
-#endif
-
-
 
 /****************
  * Used to open the Linux and xBSD /dev/random devices
@@ -110,15 +102,24 @@ gather_random( void (*add)(const void*, size_t, int), int requester,
        tv.tv_usec = 0;
        if( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) {
            if( !warn )
-               tty_printf( _(
-"\n"
+             #ifdef IS_MODULE
+               fprintf(stderr,
+             #else
+               tty_printf(
+             #endif
+_("\n"
 "Not enough random bytes available.  Please do some other work to give\n"
 "the OS a chance to collect more entropy! (Need %d more bytes)\n"), length );
            warn = 1;
            continue;
        }
        else if( rc == -1 ) {
-           tty_printf("select() error: %s\n", strerror(errno));
+         #ifdef IS_MODULE
+           fprintf(stderr,
+         #else
+           tty_printf(
+         #endif
+                      "select() error: %s\n", strerror(errno));
            continue;
        }