diff -Nur kbd-1.12-4/src/kbdrate.c kbd-1.12-5/src/kbdrate.c --- kbd-1.12-4/src/kbdrate.c 2004-02-26 22:46:55.000000000 +0100 +++ kbd-1.12-5/src/kbdrate.c 2004-02-26 22:50:19.000000000 +0100 @@ -90,6 +90,8 @@ }; #endif +#include + #include "nls.h" #include "version.h" @@ -185,6 +187,12 @@ #endif /* KIOCSRATE */ } +void +sigalrmhandler( int sig ) { + fprintf( stderr, "kbdrate: Failed waiting for kbd controller!\n" ); + raise( SIGINT ); +} + int main( int argc, char **argv ) { #ifdef __sparc__ @@ -260,6 +268,9 @@ exit( 1 ); } + signal( SIGALRM, sigalrmhandler ); + alarm( 3 ); + do { lseek( fd, 0x64, 0 ); read( fd, &data, 1 ); @@ -274,6 +285,8 @@ read( fd, &data, 1 ); } while ((data & 2) == 2 ); /* wait */ + alarm( 0 ); + lseek( fd, 0x60, 0 ); sleep( 1 ); write( fd, &value, 1 );