diff -u btnx-0.4.11/debian/control btnx-0.4.11/debian/control --- btnx-0.4.11/debian/control +++ btnx-0.4.11/debian/control @@ -1,7 +1,8 @@ Source: btnx Section: utils Priority: optional -Maintainer: Philipp Huebner +Maintainer: Ubuntu MOTU Developers +XSBC-Original-Maintainer: Philipp Huebner Build-Depends: autotools-dev, debhelper (>= 7), libdaemon-dev (>= 0.10), pkg-config (>= 0.21), automake Standards-Version: 3.8.0 Homepage: http://www.ollisalonen.com/btnx/ diff -u btnx-0.4.11/debian/changelog btnx-0.4.11/debian/changelog --- btnx-0.4.11/debian/changelog +++ btnx-0.4.11/debian/changelog @@ -1,3 +1,10 @@ +btnx (0.4.11-1ubuntu1) jaunty; urgency=low + + * Capture the return value of the write(). Fixes FTBFS. + (LP: #300361) + + -- Stefan Lesicnik Mon, 09 Feb 2009 22:10:12 +0200 + btnx (0.4.11-1) unstable; urgency=low * Initial release (Closes: #493122) only in patch2: unchanged: --- btnx-0.4.11.orig/src/btnx.h +++ btnx-0.4.11/src/btnx.h @@ -29,6 +29,7 @@ BTNX_ERROR_BAD_CONFIG, BTNX_ERROR_OPEN_HANDLER, BTNX_ERROR_OPEN_UINPUT, + BTNX_ERROR_WRITE_UINPUT, BTNX_ERROR_CREATE_PID_FILE, BTNX_ERROR_INIT_SIGNALS, }; only in patch2: unchanged: --- btnx-0.4.11.orig/src/uinput.c +++ btnx-0.4.11/src/uinput.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "uinput.h" @@ -34,7 +35,8 @@ int uinput_init(void) { struct uinput_user_dev dev_mouse, dev_kbd; - int i; + int i, rem, written; + unsigned char *buf; uinput_mouse_fd = open_handler("uinput", O_WRONLY | O_NDELAY); if (uinput_mouse_fd < 0) @@ -56,7 +58,22 @@ dev_mouse.id.product = BTNX_PRODUCT_MOUSE; dev_mouse.id.version = 0; strcpy(dev_mouse.name, UMOUSE_NAME); - write(uinput_mouse_fd, &dev_mouse, sizeof(dev_mouse)); + + rem = sizeof(dev_mouse); + buf = (unsigned char *)&dev_mouse; + do { + written = write(uinput_mouse_fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } memset(&dev_kbd, 0, sizeof(dev_kbd)); dev_kbd.id.bustype = 0; @@ -64,7 +81,22 @@ dev_kbd.id.product = BTNX_PRODUCT_KBD; dev_kbd.id.version = 0; strcpy(dev_kbd.name, UKBD_NAME); - write(uinput_kbd_fd, &dev_kbd, sizeof(dev_kbd)); + + rem = sizeof(dev_kbd); + buf = (unsigned char *)&dev_kbd; + do { + written = write(uinput_kbd_fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } ioctl(uinput_mouse_fd, UI_SET_EVBIT, EV_REL); ioctl(uinput_mouse_fd, UI_SET_RELBIT, REL_X); @@ -103,7 +135,8 @@ /* Send any necessary modifier keys */ static void uinput_send_mods(struct btnx_event *bev, struct input_event event) { - int i; + int i, rem, written; + unsigned char *buf; int mod_pressed=0; for (i=0; imod[i]; event.value = bev->pressed; - write(uinput_kbd_fd, &event, sizeof(event)); - + + rem = sizeof(event); + buf = (unsigned char *)&event; + do { + written = write(uinput_kbd_fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } + event.type = EV_SYN; - event.code = SYN_REPORT; - event.value = 0; - write(uinput_kbd_fd, &event, sizeof(event)); - - mod_pressed = 1; + event.code = SYN_REPORT; + event.value = 0; + + rem = sizeof(event); + buf = (unsigned char *)&event; + do { + written = write(uinput_kbd_fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } + mod_pressed = 1; } if (mod_pressed) @@ -130,6 +192,8 @@ /* Send the main key or button press/release */ static void uinput_send_key(struct btnx_event *bev, struct input_event event, int fd) { + int rem, written; + unsigned char *buf;; if (bev->keycode > BTNX_EXTRA_EVENTS) { event.type = EV_REL; @@ -141,20 +205,69 @@ event.value = 1; else if (bev->keycode == REL_WHEELBACK) event.value = -1; - write(fd, &event, sizeof(event)); + + rem = sizeof(event); + buf = (unsigned char *)&event; + do { + written = write(fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } + } else { event.type = EV_KEY; event.code = bev->keycode; event.value = bev->pressed; - write(fd, &event, sizeof(event)); + + rem = sizeof(event); + buf = (unsigned char *)&event; + do { + written = write(fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } + } event.type = EV_SYN; event.code = SYN_REPORT; - event.value = 0; - write(fd, &event, sizeof(event)); + event.value = 0; + + + rem = sizeof(event); + buf = (unsigned char *)&event; + do { + written = write(fd, buf, rem); + if (written == rem) + break; + if (written > 0) { + buf += written; + rem -= written; + } + } while (written >= 0 || errno == EINTR); + if (written < 0) { + perror(OUT_PRE "Error writing to uinput device"); + exit(BTNX_ERROR_WRITE_UINPUT); + } + } /* Send a key combo event, either press or release */