aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown <mcb30@etherboot.org>2007-08-03 12:49:21 +0100
committerMichael Brown <mcb30@etherboot.org>2007-08-03 12:49:21 +0100
commit218651e1259da924a19db66e7cb9ae885075892f (patch)
treede255dec650ac21b552c04d9ce83578ef7cd4cdc
parent6e46dddc2c7521a076a4d274e4a89a69e9c1981d (diff)
downloadipxe-218651e1259da924a19db66e7cb9ae885075892f.tar.gz
Display name and status of each file as it is downloaded.
-rw-r--r--src/core/monojob.c21
-rw-r--r--src/include/gpxe/monojob.h2
-rw-r--r--src/usr/autoboot.c13
-rw-r--r--src/usr/dhcpmgmt.c10
-rw-r--r--src/usr/imgmgmt.c2
5 files changed, 30 insertions, 18 deletions
diff --git a/src/core/monojob.c b/src/core/monojob.c
index b4042a3d..ea9bc834 100644
--- a/src/core/monojob.c
+++ b/src/core/monojob.c
@@ -16,6 +16,8 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include <string.h>
+#include <stdio.h>
#include <errno.h>
#include <gpxe/process.h>
#include <console.h>
@@ -54,11 +56,14 @@ struct job_interface monojob = {
/**
* Wait for single foreground job to complete
*
+ * @v string Job description to display
* @ret rc Job final status code
*/
-int monojob_wait ( void ) {
+int monojob_wait ( const char *string ) {
int key;
+ int rc;
+ printf ( "%s... ", string );
monojob_rc = -EINPROGRESS;
while ( monojob_rc == -EINPROGRESS ) {
step();
@@ -67,12 +72,20 @@ int monojob_wait ( void ) {
switch ( key ) {
case CTRL_C:
job_kill ( &monojob );
- return -ECANCELED;
- break;
+ rc = -ECANCELED;
+ goto done;
default:
break;
}
}
}
- return monojob_rc;
+ rc = monojob_rc;
+
+done:
+ if ( rc ) {
+ printf ( "%s\n", strerror ( rc ) );
+ } else {
+ printf ( "ok\n" );
+ }
+ return rc;
}
diff --git a/src/include/gpxe/monojob.h b/src/include/gpxe/monojob.h
index f6cebb6b..aaa38d03 100644
--- a/src/include/gpxe/monojob.h
+++ b/src/include/gpxe/monojob.h
@@ -10,6 +10,6 @@
struct job_interface;
extern struct job_interface monojob;
-extern int monojob_wait ( void );
+extern int monojob_wait ( const char *string );
#endif /* _GPXE_MONOJOB_H */
diff --git a/src/usr/autoboot.c b/src/usr/autoboot.c
index 2afe596e..91836978 100644
--- a/src/usr/autoboot.c
+++ b/src/usr/autoboot.c
@@ -61,15 +61,20 @@ static int boot_filename ( const char *filename ) {
return -ENOMEM;
}
if ( ( rc = imgfetch ( image, filename,
- register_and_autoexec_image ) ) != 0 ) {
+ register_and_autoload_image ) ) != 0 ) {
+ printf ( "Could not load %s: %s\n",
+ filename, strerror ( rc ) );
+ goto done;
+ }
+ if ( ( rc = imgexec ( image ) ) != 0 ) {
printf ( "Could not boot %s: %s\n",
filename, strerror ( rc ) );
- image_put ( image );
- return rc;
+ goto done;
}
+ done:
image_put ( image );
- return 0;
+ return rc;
}
/**
diff --git a/src/usr/dhcpmgmt.c b/src/usr/dhcpmgmt.c
index f1eb2d63..bd05c5ee 100644
--- a/src/usr/dhcpmgmt.c
+++ b/src/usr/dhcpmgmt.c
@@ -56,15 +56,9 @@ int dhcp ( struct net_device *netdev ) {
}
/* Perform DHCP */
- printf ( "DHCP (%s %s)...", netdev->name, netdev_hwaddr ( netdev ) );
+ printf ( "DHCP (%s %s)", netdev->name, netdev_hwaddr ( netdev ) );
if ( ( rc = start_dhcp ( &monojob, netdev, dhcp_success ) ) == 0 )
- rc = monojob_wait();
-
- if ( rc == 0 ) {
- printf ( "done\n" );
- } else {
- printf ( "failed (%s)\n", strerror ( rc ) );
- }
+ rc = monojob_wait ( "" );
return rc;
}
diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c
index 0a77469a..bead4867 100644
--- a/src/usr/imgmgmt.c
+++ b/src/usr/imgmgmt.c
@@ -53,7 +53,7 @@ int imgfetch ( struct image *image, const char *uri_string,
if ( ( rc = create_downloader ( &monojob, image, image_register,
LOCATION_URI, uri ) ) == 0 )
- rc = monojob_wait();
+ rc = monojob_wait ( uri_string );
uri_put ( uri );
return rc;