Set current working URI equal to script URI during script execution.
authorMichael Brown <mcb30@etherboot.org>
Thu, 2 Aug 2007 19:27:19 +0000 (20:27 +0100)
committerMichael Brown <mcb30@etherboot.org>
Thu, 2 Aug 2007 19:27:19 +0000 (20:27 +0100)
src/image/script.c

index c882152..2f159c9 100644 (file)
@@ -27,6 +27,7 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <gpxe/image.h>
+#include <gpxe/uri.h>
 
 struct image_type script_image_type __image_type ( PROBE_NORMAL );
 
@@ -37,6 +38,7 @@ struct image_type script_image_type __image_type ( PROBE_NORMAL );
  * @ret rc             Return status code
  */
 static int script_exec ( struct image *image ) {
+       struct uri *old_cwuri;
        char cmdbuf[256];
        size_t offset = 0;
        size_t remaining;
@@ -51,6 +53,10 @@ static int script_exec ( struct image *image ) {
        image_get ( image );
        unregister_image ( image );
 
+       /* Switch current working directory to be that of the script itself */
+       old_cwuri = uri_get ( cwuri );
+       churi ( image->uri );
+
        while ( offset < image->len ) {
        
                /* Read up to cmdbuf bytes from script into buffer */
@@ -87,7 +93,9 @@ static int script_exec ( struct image *image ) {
 
        rc = 0;
  done:
-       /* Re-register image and return */
+       /* Reset current working directory, re-register image and return */
+       churi ( old_cwuri );
+       uri_put ( old_cwuri );
        register_image ( image );
        image_put ( image );
        return rc;