[ui] Allow Ctrl-C to cancel wait for net device link-up
authorMichael Brown <mcb30@etherboot.org>
Tue, 27 Jan 2009 20:09:50 +0000 (20:09 +0000)
committerMichael Brown <mcb30@etherboot.org>
Tue, 27 Jan 2009 20:09:50 +0000 (20:09 +0000)
This really ought to be handled via monojob.c and the usual Ctrl-C
mechanism that handles cancelling DHCP or file downloads.

src/usr/ifmgmt.c

index 72d8613..0ebf561 100644 (file)
 #include <stdio.h>
 #include <unistd.h>
 #include <errno.h>
+#include <console.h>
 #include <gpxe/netdevice.h>
 #include <gpxe/device.h>
 #include <gpxe/process.h>
+#include <gpxe/keys.h>
 #include <usr/ifmgmt.h>
 
 /** @file
@@ -101,12 +103,19 @@ void ifstat ( struct net_device *netdev ) {
  * @v max_wait_ms      Maximum time to wait, in ms
  */
 int iflinkwait ( struct net_device *netdev, unsigned int max_wait_ms ) {
+       int key;
+
        while ( 1 ) {
                if ( netdev_link_ok ( netdev ) )
                        return 0;
                if ( max_wait_ms-- == 0 )
                        return -ETIMEDOUT;
                step();
+               if ( iskey() ) {
+                       key = getchar();
+                       if ( key == CTRL_C )
+                               return -ECANCELED;
+               }
                mdelay ( 1 );
        }
 }