void-packages/srcpkgs/mouseemu/patches/007-syslog.patch
q66 b004d06c23 New package: mouseemu-0.15
This is a daemon which allows you to emulate middle and right
click as well as a mouse wheel. It was originally written for
Apple PowerPC laptops with a single button, but can be used on
any hardware.
2020-02-09 03:10:27 +01:00

216 lines
5.9 KiB
Diff

Author: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
Description: log to syslog instead of stderr
--- a/mouseemu.8
+++ b/mouseemu.8
@@ -56,6 +56,9 @@
Automatically scan every 5s for new devices. This is normally not need, as udev should
inform mouseemu about new devices.
.TP
+.B -debug
+print debugging messages about device scans
+.TP
.B -help
show usage message
.PP
--- a/mouseemu.c
+++ b/mouseemu.c
@@ -18,12 +18,14 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stdarg.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <signal.h>
#include <wait.h>
+#include <syslog.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -61,6 +63,17 @@
static int debug = 0;
static int autorescan = 0;
+/* print debug messages to syslog or stderr */
+void debugf(const char *format, ...) {
+ va_list ap;
+
+ if (debug) {
+ va_start(ap, format);
+ vsyslog(LOG_DEBUG, format, ap);
+ va_end(ap);
+ }
+}
+
static void send_event(int fd, int type, int code, int value)
{
struct input_event event;
@@ -238,7 +251,7 @@
unregister_inputhandler(eventdevs[m].handle);
close(eventdevs[m].handle);
}
- if (debug) fprintf(stderr, "keyboard: fd %d event%d, vendor %4x product %4x\n", fd, n, id[ID_VENDOR], id[ID_PRODUCT]);
+ debugf("keyboard: fd %d event%d, vendor %4x product %4x\n", fd, n, id[ID_VENDOR], id[ID_PRODUCT]);
eventdevs[m].handle= fd;
eventdevs[m].product = id[ID_PRODUCT];
eventdevs[m].vendor = id[ID_VENDOR];
@@ -258,7 +271,7 @@
unregister_inputhandler(eventdevs[m].handle);
close(eventdevs[m].handle);
}
- if (debug) fprintf(stderr, "mouse : fd %d event%d, vendor %4x product %4x\n", fd, n, id[ID_VENDOR], id[ID_PRODUCT]);
+ debugf("mouse : fd %d event%d, vendor %4x product %4x\n", fd, n, id[ID_VENDOR], id[ID_PRODUCT]);
eventdevs[m].handle= fd;
eventdevs[m].product = id[ID_PRODUCT];
eventdevs[m].vendor = id[ID_VENDOR];
@@ -373,27 +386,27 @@
{
int fd = -1;
- printf("Trying to open %s...", uinputdev);
+ syslog(LOG_NOTICE, "Trying to open %s...", uinputdev);
fd = open (uinputdev, O_RDWR);
- printf(" %s.\n", (fd > 0)?"ok":"error");
+ syslog(LOG_NOTICE, " %s.\n", (fd > 0)?"ok":"error");
if (fd > 0)
return fd;
- printf("Trying to open /dev/uinput...");
+ syslog(LOG_NOTICE, "Trying to open /dev/uinput...");
fd = open("/dev/uinput", O_RDWR);
- printf(" %s.\n", (fd > 0)?"ok":"error");
+ syslog(LOG_NOTICE, " %s.\n", (fd > 0)?"ok":"error");
if (fd > 0)
return fd;
- printf("Trying to open /dev/input/uinput...");
+ syslog(LOG_NOTICE, "Trying to open /dev/input/uinput...");
fd = open("/dev/input/uinput", O_RDWR);
- printf(" %s.\n", (fd > 0)?"ok":"error");
+ syslog(LOG_NOTICE, " %s.\n", (fd > 0)?"ok":"error");
if (fd > 0)
return fd;
- printf("Trying to open /dev/misc/uinput...");
+ syslog(LOG_NOTICE, "Trying to open /dev/misc/uinput...");
fd = open("/dev/misc/uinput", O_RDWR);
- printf(" %s.\n", (fd > 0)?"ok":"error");
+ syslog(LOG_NOTICE, " %s.\n", (fd > 0)?"ok":"error");
if (fd > 0)
return fd;
@@ -499,7 +512,7 @@
{
int i, cfd;
- printf("mouseemu: cleaning...\n");
+ syslog(LOG_NOTICE, "mouseemu: cleaning...\n");
uinput_close(ui_keyb_fd);
uinput_close(ui_mouse_fd);
@@ -575,7 +588,8 @@
"\t[-typing-block DELAY]\n"
"\t[-device UINPUT_DEVICE]\n"
"\t[-nofork]\n"
- "\t[-autorescan]\n",
+ "\t[-autorescan]\n"
+ "\t[-debug]\n",
argv[0]);
fprintf(stream, "All modifier and button key arguments are\n"
"key scancodes. They can be found in \n"
@@ -608,8 +622,6 @@
int nofork = 0;
//int argv0size = strlen(argv[0]);
- printf("mouseemu " VERSION " (C) Colin Leroy <colin@colino.net>\n");
-
install_sighandler();
#ifdef __powerpc__
@@ -694,23 +706,33 @@
autorescan=1;
i += 1;
continue;
+ }
+ else if (!strcmp(argv[i], "-debug")) {
+ debug=1;
+ i += 1;
+ continue;
} else {
usage(stderr, argv);
}
}
}
}
- printf("using (%d+%d) as middle button, (%d+%d) as right button, (%d) as scroll.\n",
+
+ if (nofork)
+ openlog("mouseemu", LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_DAEMON);
+ else
+ openlog("mouseemu", LOG_NDELAY | LOG_PID, LOG_DAEMON);
+
+ syslog(LOG_NOTICE, "mouseemu " VERSION " (C) Colin Leroy <colin@colino.net>\n");
+ syslog(LOG_NOTICE, "using (%d+%d) as middle button, (%d+%d) as right button, (%d) as scroll.\n",
b2_mod, b2_key, b3_mod, b3_key, scroll_mod);
- printf("using %s.\n", uinputdev);
-
if (nofork)
goto startops;
fpid = fork();
if (fpid == -1) {
- printf("can't fork\n");
+ syslog(LOG_NOTICE, "can't fork\n");
goto startops;
}
if (fpid != 0) {
@@ -720,7 +742,7 @@
setsid();
pid = fork();
if (pid == -1) {
- printf("can't fork\n");
+ syslog(LOG_NOTICE, "can't fork\n");
goto startops;
}
@@ -761,7 +783,7 @@
}
}
- printf("terminating, %i\n",answer);
+ syslog(LOG_NOTICE, "terminating, %i\n",answer);
if (kill(pid, SIGTERM)<0)
perror("mouseemu: termination of uinput handlers failed\n");
@@ -773,8 +795,6 @@
//strncpy(argv[0],"mouseemu",argv0size);
startops:
- if (nofork)
- debug = 1;
for (i=0; i<EVENT_DEVS; i++) {
eventdevs[i].handle = -1;
@@ -791,8 +811,8 @@
running = uinput_setup();
if (running < 0) {
- printf("mouseemu: Make sure uinput module is loaded or available "
- "in the kernel.\n");
+ syslog(LOG_NOTICE, "Make sure uinput module is loaded or available "
+ "in the kernel.\n");
}
@@ -818,7 +838,7 @@
usleep(10);
else {
if (errno == ENODEV) {
- if (debug) fprintf(stderr, "select returned %d, errno %d, rescanning devices\n", val, errno);
+ debugf("device disconnect detected (select %d, errno %d), rescanning devices\n", val, errno);
errno = 0;
rescan_devs();
usleep(500);