summaryrefslogtreecommitdiff
path: root/sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch
reinit the tree, so we can have metadata
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.patch195
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 000000000000..5626a357345d
--- /dev/null
+++ b/sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboard.patch
@@ -0,0 +1,195 @@
+--- a/keyboard.c
++++ b/keyboard.c
+@@ -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;
+ }