diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index df892e1db..aa7453af1 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -44,6 +44,15 @@ if( WITH_HAL ) endif( ) +# udev (tsak) +if( BUILD_TSAK ) + pkg_search_module( UDEV udev ) + if( NOT UDEV_FOUND ) + tde_message_fatal( "udev is required, but was not found on your system" ) + endif( ) +endif( ) + + ##### check for gcc visibility support ######### # FIXME # This should check for [T]Qt3 visibility support diff --git a/tsak/main.cpp b/tsak/main.cpp index 26aad0041..3cbc3d81a 100644 --- a/tsak/main.cpp +++ b/tsak/main.cpp @@ -282,7 +282,9 @@ void broadcast_sak() // I highly doubt there are more than 255 VTs active at once... int i; for (i=0;i<255;i++) { - write(mPipe_fd_out, "SAK\n\r", 6); + if (write(mPipe_fd_out, "SAK\n\r", 6) < 0) { + fprintf(stderr, "Unable to send SAK signal to clients\n"); + } } } @@ -344,7 +346,7 @@ int main (int argc, char *argv[]) struct input_event ev[64]; struct input_event event; struct input_event revev; - struct uinput_user_dev devinfo={0}; + struct uinput_user_dev devinfo={{0},{0}}; int devout[MAX_KEYBOARDS], rd, i, value, size = sizeof (struct input_event); char name[256] = "Unknown"; bool ctrl_down = false; @@ -451,9 +453,11 @@ int main (int argc, char *argv[]) strncat(devinfo.name, "+tsak", UINPUT_MAX_NAME_SIZE-1); fprintf(stderr, "%s\n", devinfo.name); ioctl(keyboard_fds[current_keyboard], EVIOCGID, &devinfo.id); - + copy_features(keyboard_fds[current_keyboard], devout[current_keyboard]); - write(devout[current_keyboard],&devinfo,sizeof(devinfo)); + if (write(devout[current_keyboard],&devinfo,sizeof(devinfo)) < 0) { + fprintf(stderr, "Unable to write to output device\n"); + } if (ioctl(devout[current_keyboard],UI_DEV_CREATE)<0) { fprintf(stderr, "Unable to create input device with UI_DEV_CREATE\n"); if (established) @@ -463,7 +467,7 @@ int main (int argc, char *argv[]) } else { fprintf(stderr, "Device created.\n"); - + if (established == false) { int i=fork(); if (i<0) return 9; // fork failed @@ -473,13 +477,13 @@ int main (int argc, char *argv[]) } setupLockingPipe(); } - + established = true; - + if (testrun == true) { return 0; } - + while (1) { if ((rd = read (keyboard_fds[current_keyboard], ev, size * 2)) < size) { fprintf(stderr, "Read failed.\n"); @@ -490,12 +494,14 @@ int main (int argc, char *argv[]) int rrd = read(devout[current_keyboard], &revev, size); if (rrd >= size) { if (revev.type == EV_LED) { - write(keyboard_fds[current_keyboard], &revev, sizeof(revev)); + if (write(keyboard_fds[current_keyboard], &revev, sizeof(revev)) < 0) { + fprintf(stderr, "Unable to replicate LED event\n"); + } } } - + value = ev[0].value; - + if (value != ' ' && ev[1].value == 0 && ev[1].type == 1){ // Read the key release event if (keycode[(ev[1].code)]) { if (strcmp(keycode[(ev[1].code)], "") == 0) ctrl_down = false; @@ -508,20 +514,24 @@ int main (int argc, char *argv[]) if (strcmp(keycode[(ev[1].code)], "") == 0) alt_down = true; } } - + hide_event = false; if (keycode[(ev[1].code)]) { if (alt_down && ctrl_down && (strcmp(keycode[(ev[1].code)], "") == 0)) { hide_event = true; } } - + if ((hide_event == false) && (ev[0].type != EV_LED) && (ev[1].type != EV_LED)) { // Pass the event on... event = ev[0]; - write(devout[current_keyboard], &event, sizeof event); + if (write(devout[current_keyboard], &event, sizeof event) < 0) { + fprintf(stderr, "Unable to replicate keyboard event!\n"); + } event = ev[1]; - write(devout[current_keyboard], &event, sizeof event); + if (write(devout[current_keyboard], &event, sizeof event) < 0) { + fprintf(stderr, "Unable to replicate keyboard event!\n"); + } } if (hide_event == true) { // Let anyone listening to our interface know that an SAK keypress was received