From 1ef336538a4a953d7b3efb542b24bb9a231f4cc8 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Dec 09 2020 17:46:14 +0000 Subject: Apply patch kbd-1.15-sparc.patch patch_name: kbd-1.15-sparc.patch present_in_specfile: true --- diff --git a/docs/man/man8/kbdrate.8 b/docs/man/man8/kbdrate.8 index d16b7c9..e5d2006 100644 --- a/docs/man/man8/kbdrate.8 +++ b/docs/man/man8/kbdrate.8 @@ -22,7 +22,7 @@ Using without any options will reset the repeat rate to 10.9 characters per second (cps) and the delay to 250 milliseconds (ms) for Intel- and M68K-based systems. These are the IBM defaults. On SPARC-based systems it will reset the repeat rate -to 5 cps and the delay to 200 ms. +to 20 cps and the delay to 200 ms. .SH OPTIONS .TP diff --git a/src/kbdrate.c b/src/kbdrate.c index 834855c..f8ef0e9 100644 --- a/src/kbdrate.c +++ b/src/kbdrate.c @@ -111,9 +111,12 @@ static int valid_delays[] = { 250, 500, 750, 1000 }; static int KDKBDREP_ioctl_ok(double rate, int delay, int silent) { +#if defined(KDKBDREP) && !defined(__sparc__) /* * This ioctl is defined in but is not * implemented anywhere - must be in some m68k patches. + * We cannot blindly try unimplemented ioctls on sparc64 - + * the 32<->64bit transition layer does not like it. * Since 2.4.9 also on i386. */ struct my_kbd_repeat kbdrep_s; @@ -176,6 +179,9 @@ KDKBDREP_ioctl_ok(double rate, int delay, int silent) rate, kbdrep_s.delay); return 1; /* success! */ +#else /* no KDKBDREP or __sparc__ */ + return 0; +#endif /* KDKBDREP */ } #ifndef KIOCSRATE @@ -226,7 +232,7 @@ sigalrmhandler(int sig __attribute__((unused))) int main(int argc, char **argv) { #ifdef __sparc__ - double rate = 5.0; /* Default rate */ + double rate = 20.0; /* Default rate */ int delay = 200; /* Default delay */ #else double rate = 10.9; /* Default rate */ @@ -275,8 +281,9 @@ int main(int argc, char **argv) if (KIOCSRATE_ioctl_ok(rate, delay, silent)) /* sparc? */ return 0; - /* The ioport way */ + /* The ioport way - will crash on sparc */ +#ifndef __sparc__ for (i = 0; i < RATE_COUNT; i++) if (rate * 10 >= valid_rates[i]) { value &= 0x60; @@ -333,5 +340,6 @@ int main(int argc, char **argv) valid_rates[value & 0x1f] / 10.0, valid_delays[(value & 0x60) >> 5]); +#endif return EXIT_SUCCESS; }