summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/usb-device.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/usb-device.c b/src/usb-device.c
index eab5c92..e281440 100644
--- a/src/usb-device.c
+++ b/src/usb-device.c
@@ -23,6 +23,7 @@
#include <string.h>
#include <errno.h>
#include <ctype.h>
+#include <signal.h>
#include <usb.h>
@@ -234,11 +235,21 @@ static struct usb_device_info * usb_search_device(struct usb_device * dev, int l
}
+static volatile sig_atomic_t signal_quit;
+
+static void signal_handler(int signum) {
+
+ signal_quit = 1;
+ (void)signum;
+
+}
+
struct usb_device_info * usb_open_and_wait_for_device(void) {
struct usb_bus * bus;
struct usb_device_info * ret = NULL;
int i = 0;
+ sighandler_t prev;
static char progress[] = {'/','-','\\', '|'};
usb_init();
@@ -247,7 +258,11 @@ struct usb_device_info * usb_open_and_wait_for_device(void) {
PRINTF_BACK();
printf("\n");
- while ( 1 ) {
+ signal_quit = 0;
+
+ prev = signal(SIGINT, signal_handler);
+
+ while ( ! signal_quit ) {
PRINTF_LINE("Waiting for USB device... %c", progress[++i%sizeof(progress)]);
@@ -278,6 +293,9 @@ struct usb_device_info * usb_open_and_wait_for_device(void) {
}
+ if ( prev != SIG_ERR )
+ signal(SIGINT, prev);
+
PRINTF_BACK();
printf("\n");