summaryrefslogtreecommitdiff
path: root/media-gfx/splashutils/files/splashutils-1.5.4.4-multi-keyboard.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-gfx/splashutils/files/splashutils-1.5.4.4-multi-keyboard.patch')
-rw-r--r--media-gfx/splashutils/files/splashutils-1.5.4.4-multi-keyboard.patch381
1 files changed, 0 insertions, 381 deletions
diff --git a/media-gfx/splashutils/files/splashutils-1.5.4.4-multi-keyboard.patch b/media-gfx/splashutils/files/splashutils-1.5.4.4-multi-keyboard.patch
deleted file mode 100644
index 23f15fd8..00000000
--- a/media-gfx/splashutils/files/splashutils-1.5.4.4-multi-keyboard.patch
+++ /dev/null
@@ -1,381 +0,0 @@
-diff -ru a/core/src/common.h b/core/src/common.h
---- a/core/src/common.h 2013-01-11 06:35:35.000000000 +0200
-+++ b/core/src/common.h 2013-01-11 06:34:08.000000000 +0200
-@@ -34,6 +34,10 @@
- #define PATH_PROC FBSPLASH_DIR"/proc"
- #endif
-
-+/* Maximum number of keyboard connected to a machine.
-+ * The number is big (8) to be on the safe side */
-+#define MAX_KBDS 8
-+
- /* Useful short-named types */
- typedef u_int8_t u8;
- typedef u_int16_t u16;
-diff -ru a/core/src/daemon.c b/core/src/daemon.c
---- a/core/src/daemon.c 2013-01-11 06:35:35.000000000 +0200
-+++ b/core/src/daemon.c 2013-01-11 06:34:08.000000000 +0200
-@@ -20,6 +20,7 @@
- #include <sys/ioctl.h>
- #include <sys/wait.h>
- #include <sys/mman.h>
-+#include <sys/select.h>
- #include <pthread.h>
- #include <errno.h>
- #include <dirent.h>
-@@ -29,6 +30,8 @@
- #include "common.h"
- #include "daemon.h"
-
-+#define EV_BUF_SIZE 8
-+
- /* Threading structures */
- pthread_mutex_t mtx_tty = PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_t mtx_paint = PTHREAD_MUTEX_INITIALIZER;
-@@ -41,7 +44,8 @@
- int ctty = CTTY_VERBOSE;
-
- /* File descriptors */
--int fd_evdev = -1;
-+int fd_evdevs[MAX_KBDS];
-+int evdev_count = 0;
- #ifdef CONFIG_GPM
- int fd_gpm = -1;
- #endif
-@@ -51,7 +55,6 @@
-
- /* Misc settings */
- char *notify[2];
--char *evdev = NULL;
-
- /* Service list */
- list svcs = { NULL, NULL };
-@@ -400,56 +403,83 @@
- }
- }
-
-+__u16 get_ev_key_pressed(int fd_evdev, int ev_buf_size,
-+ struct input_event *ev_buf) {
-+ size_t rb;
-+ int i;
-+ rb = read(fd_evdev, ev_buf, sizeof(struct input_event) * ev_buf_size);
-+ if (rb < (int) sizeof(struct input_event))
-+ return 0;
-+
-+ for (i = 0; i < (int) (rb / sizeof(struct input_event)); i++) {
-+ if (ev_buf[i].type != EV_KEY || ev_buf[i].value != 0)
-+ continue;
-+ return ev_buf[i].code;
-+ }
-+}
-+
- /*
- * Event device monitor thread.
- */
- void* thf_switch_evdev(void *unused)
- {
-- int i, h, oldstate;
-- size_t rb;
-- struct input_event ev[8];
-+ int i, h, oldstate, nfds, retval, fd_evdev;
-+ fd_set rfds;
-+ struct input_event ev_buf[EV_BUF_SIZE];
-+ __u16 key_pressed = 0;
-
- while (1) {
-- rb = read(fd_evdev, ev, sizeof(struct input_event)*8);
-- if (rb < (int) sizeof(struct input_event))
-- continue;
-+ nfds = 0, fd_evdev = -1;
-+ FD_ZERO(&rfds);
-+ for (i = 0;i < evdev_count;i++) {
-+ FD_SET(fd_evdevs[i], &rfds);
-+ nfds = max(nfds, fd_evdevs[i]);
-+ }
-
-- for (i = 0; i < (int) (rb / sizeof(struct input_event)); i++) {
-- if (ev[i].type != EV_KEY || ev[i].value != 0)
-- continue;
-+ nfds++;
-
-- switch (ev[i].code) {
-- case KEY_F2:
-- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
-- pthread_mutex_lock(&mtx_paint);
-- if (ctty == CTTY_SILENT) {
-- h = config.tty_v;
-- } else {
-- h = config.tty_s;
-+ retval = select(nfds, &rfds, NULL, NULL, NULL);
-+ if (retval == -1)
-+ perror("select()");
-+ else if (retval) {
-+ for (i = 0;i < evdev_count;i++) {
-+ if (FD_ISSET(fd_evdevs[i], &rfds)) {
-+ fd_evdev = fd_evdevs[i];
-+ break;
- }
-- pthread_mutex_unlock(&mtx_paint);
-- pthread_setcancelstate(oldstate, NULL);
-+ }
-+ key_pressed = get_ev_key_pressed(fd_evdev, EV_BUF_SIZE, ev_buf);
-+ if (key_pressed == -1)
-+ continue;
-+ switch (key_pressed) {
-+ case KEY_F2:
-+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
-+ pthread_mutex_lock(&mtx_paint);
-+ h = (ctty == CTTY_SILENT) ? config.tty_v : config.tty_s;
-+ pthread_mutex_unlock(&mtx_paint);
-+ pthread_setcancelstate(oldstate, NULL);
-+
-+ /* Switch to the new tty. This ioctl has to be done on
-+ * the silent tty. Sometimes init will mess with the
-+ * settings of the verbose console which will prevent
-+ * console switching from working properly.
-+ *
-+ * Don't worry about fd_tty[config.tty_s]
-+ * not being protected by a mutex --
-+ * this thread is always killed before any changes
-+ * are made to fd_tty[config.tty_s].
-+ */
-+ ioctl(fd_tty[config.tty_s], VT_ACTIVATE, h);
-+ break;
-
-- /* Switch to the new tty. This ioctl has to be done on
-- * the silent tty. Sometimes init will mess with the
-- * settings of the verbose console which will prevent
-- * console switching from working properly.
-- *
-- * Don't worry about fd_tty[config.tty_s] not being protected by a
-- * mutex -- this thread is always killed before any changes
-- * are made to fd_tty[config.tty_s].
-- */
-- ioctl(fd_tty[config.tty_s], VT_ACTIVATE, h);
-- break;
--
-- case KEY_F3:
-- config.textbox_visible = !config.textbox_visible;
-- invalidate_textbox(theme, config.textbox_visible);
-- cmd_paint(NULL);
-- break;
-+ case KEY_F3:
-+ config.textbox_visible = !config.textbox_visible;
-+ invalidate_textbox(theme, config.textbox_visible);
-+ cmd_paint(NULL);
-+ break;
- }
-- }
-- }
-+ } /* end of else if (retval) */
-+ } /* end of while(1) */
-
- pthread_exit(NULL);
- }
-@@ -519,7 +549,7 @@
-
- /* Do we have to start a monitor thread? */
- if (update & UPD_MON) {
-- if (fd_evdev != -1) {
-+ if (evdev_count >= 0) {
- if (pthread_create(&th_switchmon, NULL, &thf_switch_evdev, NULL)) {
- iprint(MSG_ERROR, "Evdev monitor thread creation failed.\n");
- exit(3);
-diff -ru a/core/src/daemon.h b/core/src/daemon.h
---- a/core/src/daemon.h 2013-01-11 06:35:35.000000000 +0200
-+++ b/core/src/daemon.h 2013-01-11 06:34:08.000000000 +0200
-@@ -40,13 +40,13 @@
- extern int fd_tty_s, fd_tty1, fd_tty0;
-
- /*
-- * Event device on which the daemon listens for F2 keypresses.
-- * The proper device has to be detected by an external program and
-+ * Event devices on which the daemon listens for F2 keypresses.
-+ * The proper devices have to be detected by an external program and
- * then enabled by sending an appropriate command to the splash
- * daemon.
- */
--extern int fd_evdev;
--extern char *evdev;
-+extern int fd_evdevs[];
-+extern int evdev_count;
-
- #ifdef CONFIG_GPM
- #include <gpm.h>
-diff -ru a/core/src/daemon_cmd.c b/core/src/daemon_cmd.c
---- a/core/src/daemon_cmd.c 2013-01-11 06:35:35.000000000 +0200
-+++ b/core/src/daemon_cmd.c 2013-01-11 06:34:08.000000000 +0200
-@@ -239,18 +239,35 @@
- */
- int cmd_set_event_dev(void **args)
- {
-- if (evdev)
-- free(evdev);
--
-- evdev = strdup(args[0]);
-+ char *evdevs;
-+ char *evdev;
-+ int i, j, fd_evdev = -1;
-
- pthread_cancel(th_switchmon);
-+ for (i = 0;i < evdev_count;i++) {
-+ close(fd_evdevs[i]);
-+ }
-+ evdevs = strdup(args[1]);
-+ evdev_count = *(int*)args[0];
-+ j = 0;
-+ for (i = 0;i < evdev_count;i++, evdevs = NULL) {
-+ evdev = strtok(evdevs, ",");
-+ fd_evdev = open(evdev, O_RDONLY);
-+ if (fd_evdev != -1) {
-+ fd_evdevs[j] = fd_evdev;
-+ j++;
-+ } else {
-+ perror("failed to open event device");
-+ }
-+ }
-+ if (j == 0) { /* all input devices failed to open */
-+ evdev_count = -1;
-+ free(evdevs);
-+ return -1;
-+ }
-
-- if (fd_evdev != -1)
-- close(fd_evdev);
--
-- fd_evdev = open(evdev, O_RDONLY);
--
-+ evdev_count = j;
-+ free(evdevs);
- switchmon_start(UPD_MON, config.tty_s);
-
- return 0;
-@@ -524,8 +541,8 @@
-
- { .cmd = "set event dev",
- .handler = cmd_set_event_dev,
-- .args = 1,
-- .specs = "s"
-+ .args = 2,
-+ .specs = "ds"
- },
-
- { .cmd = "set message",
-@@ -628,7 +645,7 @@
- continue;
-
- for (j = 0; j < known_cmds[i].args; j++) {
-- for (; buf[k] == ' '; buf[k] = 0, k++);
-+ for (; buf[k] == ' '; buf[k] = '\0', k++);
- if (!buf[k]) {
- args[j] = NULL;
- continue;
-diff -ru a/core/src/libfbsplash.c b/core/src/libfbsplash.c
---- a/core/src/libfbsplash.c 2013-01-11 06:35:35.000000000 +0200
-+++ b/core/src/libfbsplash.c 2013-01-11 06:34:08.000000000 +0200
-@@ -588,6 +588,8 @@
- return -1;
- }
-
-+#define EVDV_BUF_LEN 128
-+
- /**
- * Try to set the event device for the splash daemon.
- *
-@@ -595,10 +597,14 @@
- */
- int fbsplash_set_evdev(void)
- {
-- char buf[128];
-+ char buf[EVDV_BUF_LEN];
-+ char evdev_devs[EVDV_BUF_LEN * MAX_KBDS];
- FILE *fp;
- int i, j;
--
-+ int kbd_count;
-+ int max_chars, chars_left, dev_path_len;
-+ char dev_path[] = PATH_DEV "/input/";
-+ dev_path_len = strlen(dev_path);
- char *evdev_cmds[] = {
- "/bin/grep -Hsi keyboard " PATH_SYS "/class/input/input*/name | /bin/sed -e 's#.*input\\([0-9]*\\)/name.*#event\\1#'",
- "/bin/grep -Hsi keyboard " PATH_SYS "/class/input/event*/device/driver/description | /bin/grep -o 'event[0-9]\\+'",
-@@ -608,22 +614,43 @@
-
- /* Try to activate the event device interface so that F2 can
- * be used to switch from verbose to silent. */
-- buf[0] = 0;
-- for (i = 0; i < sizeof(evdev_cmds)/sizeof(char*); i++) {
-+ buf[0] = '\0';
-+ kbd_count = 0;
-+ max_chars = sizeof(evdev_devs) / sizeof(char*);
-+ chars_left = max_chars - 1;
-+ evdev_devs[0] = '\0';
-+ for (i = 0; i < sizeof(evdev_cmds) / sizeof(char*); i++) {
- fp = popen(evdev_cmds[i], "r");
- if (fp) {
-- fgets(buf, 128, fp);
-- if ((j = strlen(buf)) > 0) {
-- if (buf[j-1] == '\n')
-- buf[j-1] = 0;
-- break;
-+ while (fgets(buf, 128, fp) && kbd_count < MAX_KBDS) {
-+ if ((j = strlen(buf)) > 0) {
-+ if (buf[j-1] == '\n')
-+ buf[j-1] = ',';
-+ if (chars_left < (j + dev_path_len)) {
-+ break;
-+ }
-+ kbd_count++;
-+ strncat(evdev_devs, dev_path, chars_left);
-+ chars_left -= dev_path_len;
-+ strncat(evdev_devs, buf, chars_left);
-+ chars_left -= j;
-+ }
-+ }
-+ /* replace the last ',' with '\n' */
-+ if (chars_left > 0 && evdev_devs[0] != '\0') {
-+ j = strlen(evdev_devs);
-+ if (j > 2) {
-+ evdev_devs[j - 1] = '\n';
-+ }
- }
- pclose(fp);
- }
-+ if (kbd_count > 0)
-+ break;
- }
-
-- if (buf[0] != 0) {
-- fbsplash_send("set event dev " PATH_DEV "/input/%s\n", buf);
-+ if (evdev_devs[0] != '\0') {
-+ fbsplash_send("set event dev %d %s", kbd_count, evdev_devs);
- return 0;
- } else {
- return -1;
-@@ -661,6 +688,8 @@
- return 0;
- }
-
-+#define MAX_CMD 2048
-+
- /**
- * Send stuff to the splash daemon using the splash FIFO.
- *
-@@ -668,7 +697,7 @@
- */
- int fbsplash_send(const char *fmt, ...)
- {
-- char cmd[256];
-+ char cmd[MAX_CMD];
- va_list ap;
-
- if (!fp_fifo) {
-@@ -690,7 +719,7 @@
- }
-
- va_start(ap, fmt);
-- vsnprintf(cmd, 256, fmt, ap);
-+ vsnprintf(cmd, MAX_CMD, fmt, ap);
- va_end(ap);
-
- fprintf(fp_fifo, cmd);