SHA256
1
0
forked from pool/kbd
kbd/kbd-1.12-nohang-kbdrate2.diff

45 lines
843 B
Diff

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 <signal.h>
+
#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 );