diff options
Diffstat (limited to 'sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch')
-rw-r--r-- | sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch b/sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch new file mode 100644 index 0000000..56fbe59 --- /dev/null +++ b/sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch @@ -0,0 +1,195 @@ +--- kudzu-1.2.57.1/keyboard.c.BAD 2006-12-10 11:36:40.000000000 -0500 ++++ kudzu-1.2.57.1/keyboard.c 2006-12-10 11:44:58.000000000 -0500 +@@ -21,7 +21,6 @@ + #include "keyboard.h" + + #ifdef __sparc__ +-#include <asm/kbio.h> + #include <asm/openpromio.h> + #include <asm/types.h> + #endif +@@ -96,7 +95,15 @@ + {0, 0} + }; + +-#if !defined(__s390__) && !defined(__s390x__) ++#if defined(__sparc__) ++static int termcmp(struct termios *a, struct termios *b) ++{ ++ if (a->c_iflag != b->c_iflag || a->c_oflag != b->c_oflag || ++ a->c_cflag != b->c_cflag || a->c_lflag != b->c_lflag) ++ return 1; ++ return memcmp(a->c_cc, b->c_cc, sizeof(a->c_cc)); ++} ++#elif !defined(__s390__) && !defined(__s390x__) + static int termcmp(struct termios *a, struct termios *b) + { + if (a->c_iflag != b->c_iflag || a->c_oflag != b->c_oflag || +@@ -110,150 +117,6 @@ + struct device *keyboardProbe(enum deviceClass probeClass, int probeFlags, + struct device *devlist) + { +-#ifdef __sparc__ +- int fd; +- char buf[256]; +- struct keyboardDevice *kbddev; +- +- if (probeClass & CLASS_KEYBOARD) { +- static struct { +- int layout0, layout1, layout2; +- char *symbols; +- int use_iso9995_3; +- } sunkbd_translate[] = { +- { 0, 33, 80, "", 0, }, +- { 1, 34, 81, "", 0, }, +- { 2, -1, -1, "fr_BE", 0, }, +- { 3, -1, -1, "ca", 0, }, +- { 4, 36, 83, "dk", 1, }, +- { 5, 37, 84, "de", 1, }, +- { 6, 38, 85, "it", 1, }, +- { 7, 39, 86, "nl", 0, }, +- { 8, 40, 87, "no", 1, }, +- { 9, 41, 88, "pt", 1, }, +- { 10, 42, 89, "es", 1, }, +- { 11, 43, 90, "se", 1, }, +- { 12, 44, 91, "fr_CH",1, }, +- { 13, 45, 92, "de_CH",1, }, +- { 14, 46, 93, "gb", 1, }, +- { 16, 47, 94, "ko", 0, }, +- { 17, 48, 95, "tw", 0, }, +- { 32, 49, 96, "jp", 0, }, +- { 50, 97, -1, "fr_CA",0, }, +- { 51, -1, -1, "hu", 0, }, +- { 52, -1, -1, "pl", 0, }, +- { 53, -1, -1, "cs", 0, }, +- { 54, -1, -1, "ru", 0, }, +- { -1, -1, -1, NULL, 0, } +- }; +- +- char twelve = 12; +- int fdstd = 0; +- char buf[4096]; +- +- for (fd = 0; fd <= 2; fd++) { +- sprintf (buf, "/proc/self/fd/%d", fd); +- if (readlink (buf, buf, 4096) == 12 && +- !strncmp (buf, "/dev/console", 12)) { +- fdstd = 1; +- break; +- } +- } +- if (!fdstd) { +- fd = open("/dev/console", O_RDWR); +- if (fd < 0) return devlist; +- } +- +- kbddev=keyboardNewDevice(NULL); +- kbddev->type=CLASS_KEYBOARD; +- if (devlist) +- kbddev->next = devlist; +- devlist = (struct device *) kbddev; +- +- if (ioctl (fd, TIOCLINUX, &twelve) < 0) { +- /* Serial console */ +- char desc[64]; +- struct serial_struct si; +- int line = 0; +- +- if (ioctl (fd, TIOCGSERIAL, &si) >= 0) { +- if (si.line & 1) +- /* ttyb */ +- line = 1; +- } +- if (!fdstd) close(fd); +- sprintf (desc, "Serial console tty%c", line + 'a'); +- fd = open("/dev/openprom", O_RDONLY); +- if (fd >= 0) { +- struct openpromio *op = (struct openpromio *)buf; +- sprintf (op->oprom_array, "tty%c-mode", line + 'a'); +- op->oprom_size = 4096-128-4; +- if (ioctl (fd, OPROMGETOPT, op) >= 0 && +- op->oprom_size > 0 && op->oprom_size < 40) { +- strcat (desc, " "); +- op->oprom_array [op->oprom_size] = 0; +- strcat (desc, op->oprom_array); +- } +- close (fd); +- } +- kbddev->desc=strdup(desc); +- kbddev->device=strdup("console"); +- return devlist; +- } +- +- if (!fdstd) close(fd); +- fd=open("/dev/kbd", O_RDWR); +- if (fd < 0) { +- /* PS/2 keyboard */ +- kbddev->desc=strdup("Generic PS/2 Keyboard"); +- } else { +- /* Sun keyboard */ +- int kbdtype, kbdlayout, i; +- char *desc, *desclayout = NULL; +- +- kbddev->device=strdup("kbd"); +- desc = "Sun Type4 "; +- if (ioctl(fd, KIOCTYPE, &kbdtype) >= 0) +- switch (kbdtype) { +- case 2: desc = "Sun Type2 "; break; +- case 3: desc = "Sun Type3 "; break; +- case 4: ioctl(fd, KIOCLAYOUT, &kbdlayout); +- if (kbdlayout < 33) +- desc = "Sun Type4 "; +- else switch (kbdlayout) { +- case 33: case 47: case 48: case 49: +- case 80: case 94: case 95: case 96: +- desc = "Sun Type5 "; break; +- case 34: case 81: +- desc = "Sun Type5 Unix "; break; +- default: +- desc = "Sun Type5 Euro "; break; +- } +- for (i = 0; sunkbd_translate[i].layout0 != -1; i++) { +- if (sunkbd_translate[i].layout0 == kbdlayout || +- sunkbd_translate[i].layout1 == kbdlayout || +- sunkbd_translate[i].layout2 == kbdlayout) +- break; +- } +- if (sunkbd_translate[i].layout0 != -1 && +- sunkbd_translate[i].symbols[0]) +- desclayout = sunkbd_translate[i].symbols; +- break; +- } +- if (desclayout) { +- kbddev->desc = malloc(strlen(desc) + strlen(desclayout) + 1 + strlen("Keyboard") + 1); +- strcpy (kbddev->desc, desc); +- strcat (kbddev->desc, desclayout); +- strcat (kbddev->desc, " Keyboard"); +- } else { +- kbddev->desc = malloc(strlen(desc) + strlen("Keyboard") + 1); +- strcpy (kbddev->desc, desc); +- strcat (kbddev->desc, "Keyboard"); +- } +- } +- close (fd); +- } +-#else + int fd; + char twelve = 12; + int fdstd = 0; +@@ -311,7 +174,7 @@ + kbddev->device = strdup("ttySG0"); + } + #endif +-#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) ++#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || defined(__sparc__) + int cfd; + struct termios cmode, mode; + +@@ -397,7 +260,6 @@ + kbddev->device=strdup(desc); + } + } +-#endif + out: + return devlist; + } |