Display name and status of each file as it is downloaded.

pull/1/head
Michael Brown 2007-08-03 12:49:21 +01:00
parent 6e46dddc2c
commit 218651e125
5 changed files with 30 additions and 18 deletions

View File

@ -16,6 +16,8 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <string.h>
#include <stdio.h>
#include <errno.h> #include <errno.h>
#include <gpxe/process.h> #include <gpxe/process.h>
#include <console.h> #include <console.h>
@ -54,11 +56,14 @@ struct job_interface monojob = {
/** /**
* Wait for single foreground job to complete * Wait for single foreground job to complete
* *
* @v string Job description to display
* @ret rc Job final status code * @ret rc Job final status code
*/ */
int monojob_wait ( void ) { int monojob_wait ( const char *string ) {
int key; int key;
int rc;
printf ( "%s... ", string );
monojob_rc = -EINPROGRESS; monojob_rc = -EINPROGRESS;
while ( monojob_rc == -EINPROGRESS ) { while ( monojob_rc == -EINPROGRESS ) {
step(); step();
@ -67,12 +72,20 @@ int monojob_wait ( void ) {
switch ( key ) { switch ( key ) {
case CTRL_C: case CTRL_C:
job_kill ( &monojob ); job_kill ( &monojob );
return -ECANCELED; rc = -ECANCELED;
break; goto done;
default: default:
break; break;
} }
} }
} }
return monojob_rc; rc = monojob_rc;
done:
if ( rc ) {
printf ( "%s\n", strerror ( rc ) );
} else {
printf ( "ok\n" );
}
return rc;
} }

View File

@ -10,6 +10,6 @@
struct job_interface; struct job_interface;
extern struct job_interface monojob; extern struct job_interface monojob;
extern int monojob_wait ( void ); extern int monojob_wait ( const char *string );
#endif /* _GPXE_MONOJOB_H */ #endif /* _GPXE_MONOJOB_H */

View File

@ -61,15 +61,20 @@ static int boot_filename ( const char *filename ) {
return -ENOMEM; return -ENOMEM;
} }
if ( ( rc = imgfetch ( image, filename, 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", printf ( "Could not boot %s: %s\n",
filename, strerror ( rc ) ); filename, strerror ( rc ) );
image_put ( image ); goto done;
return rc;
} }
done:
image_put ( image ); image_put ( image );
return 0; return rc;
} }
/** /**

View File

@ -56,15 +56,9 @@ int dhcp ( struct net_device *netdev ) {
} }
/* Perform DHCP */ /* 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 ) if ( ( rc = start_dhcp ( &monojob, netdev, dhcp_success ) ) == 0 )
rc = monojob_wait(); rc = monojob_wait ( "" );
if ( rc == 0 ) {
printf ( "done\n" );
} else {
printf ( "failed (%s)\n", strerror ( rc ) );
}
return rc; return rc;
} }

View File

@ -53,7 +53,7 @@ int imgfetch ( struct image *image, const char *uri_string,
if ( ( rc = create_downloader ( &monojob, image, image_register, if ( ( rc = create_downloader ( &monojob, image, image_register,
LOCATION_URI, uri ) ) == 0 ) LOCATION_URI, uri ) ) == 0 )
rc = monojob_wait(); rc = monojob_wait ( uri_string );
uri_put ( uri ); uri_put ( uri );
return rc; return rc;