From 55bfee79a2c2f946a9e7f757670fae08fd8d4810 Mon Sep 17 00:00:00 2001 From: Pali Rohár Date: Sat, 7 Sep 2013 22:49:08 +0200 Subject: usb-device: Handle Ctrl+C SIGINT and quit wait loop --- src/usb-device.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/usb-device.c') 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 #include #include +#include #include @@ -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"); -- cgit v1.2.3