Index: yaboot.git_head/include/file.h
===================================================================
--- yaboot.git_head.orig/include/file.h
+++ yaboot.git_head/include/file.h
@@ -63,7 +63,7 @@ struct boot_file_t {
 };
 
 extern int
-open_file(const struct boot_fspec_t*	spec,
+open_file(struct boot_fspec_t*	spec,
 	  struct boot_file_t*		file);
 
 extern int
Index: yaboot.git_head/include/fs.h
===================================================================
--- yaboot.git_head.orig/include/fs.h
+++ yaboot.git_head/include/fs.h
@@ -27,14 +27,14 @@
 #include "file.h"
 
 int fserrorno;
+struct boot_fspec_t;
 
 struct fs_t {
 	const char* name;
 
 	int (*open)(	struct boot_file_t*	file,
-			const char*		dev_name,
 			struct partition_t*	part,
-			const char*		file_name);
+			struct boot_fspec_t*	fspec);
 
 	int (*read)(	struct boot_file_t*	file,
 			unsigned int		size,
@@ -49,7 +49,7 @@ struct fs_t {
 extern const struct fs_t *fs_of;
 extern const struct fs_t *fs_of_netboot;
 
-const struct fs_t *fs_open(struct boot_file_t *file, const char *dev_name,
-			  struct partition_t *part, const char *file_name);
+const struct fs_t *fs_open(struct boot_file_t *file,
+			  struct partition_t *part, struct boot_fspec_t *fspec);
 
 #endif
Index: yaboot.git_head/second/fs_reiserfs.c
===================================================================
--- yaboot.git_head.orig/second/fs_reiserfs.c
+++ yaboot.git_head/second/fs_reiserfs.c
@@ -33,8 +33,8 @@
 #include "reiserfs/reiserfs.h"
 
 /* Exported in struct fs_t */
-static int reiserfs_open( struct boot_file_t *file, const char *dev_name,
-			  struct partition_t *part, const char *file_name );
+static int reiserfs_open( struct boot_file_t *file, struct partition_t *part,
+			  struct boot_fspec_t *fspec);
 static int reiserfs_read( struct boot_file_t *file, unsigned int size,
 
 			  void *buffer );
@@ -63,10 +63,12 @@ int errnum;
 
 
 static int
-reiserfs_open( struct boot_file_t *file, const char *dev_name,
-               struct partition_t *part, const char *file_name )
+reiserfs_open( struct boot_file_t *file, struct partition_t *part,
+		struct boot_fspec_t *fspec)
 {
      static char buffer[1024];
+     char *dev_name = fspec->dev;
+     char *file_name = fspec->file;
 
      DEBUG_ENTER;
      DEBUG_OPEN;
@@ -74,7 +76,7 @@ reiserfs_open( struct boot_file_t *file,
      memset( INFO, 0, sizeof(struct reiserfs_state) );
      INFO->file = file;
 
-     if (part)
+     if (fspec->part)
      {
 	  DEBUG_F( "Determining offset for partition %d\n", part->part_number );
 	  INFO->partition_offset = ((uint64_t)part->part_start) * part->blocksize;
Index: yaboot.git_head/second/fs_ext2.c
===================================================================
--- yaboot.git_head.orig/second/fs_ext2.c
+++ yaboot.git_head/second/fs_ext2.c
@@ -46,9 +46,8 @@ typedef int FILE;
 #include "ext2fs/ext2fs.h"
 
 static int ext2_open(	struct boot_file_t*	file,
-			const char*		dev_name,
 			struct partition_t*	part,
-			const char*		file_name);
+			struct boot_fspec_t*	fspec);
 static int ext2_read(	struct boot_file_t*	file,
 			unsigned int		size,
 			void*			buffer);
@@ -123,14 +122,15 @@ void com_err (const char *a, long i, con
 
 static int
 ext2_open(	struct boot_file_t*	file,
-		const char*		dev_name,
 		struct partition_t*	part,
-		const char*		file_name)
+		struct boot_fspec_t*	fspec)
 {
      int result = 0;
      int error = FILE_ERR_NOTFOUND;
      static char buffer[1024];
      int ofopened = 0;
+     char *dev_name = fspec->dev;
+     char *file_name = fspec->file;
 
      DEBUG_ENTER;
      DEBUG_OPEN;
Index: yaboot.git_head/second/fs_iso.c
===================================================================
--- yaboot.git_head.orig/second/fs_iso.c
+++ yaboot.git_head/second/fs_iso.c
@@ -29,9 +29,8 @@
 #include "errors.h"
 
 static int iso_open(	struct boot_file_t*	file,
-			const char*		dev_name,
 			struct partition_t*	part,
-			const char*		file_name);
+			struct boot_fspec_t*	fspec);
 static int iso_read(	struct boot_file_t*	file,
 			unsigned int		size,
 			void*			buffer);
@@ -50,9 +49,8 @@ struct fs_t iso_filesystem =
 
 static int
 iso_open(	struct boot_file_t*	file,
-		const char*		dev_name,
 		struct partition_t*	part,
-		const char*		file_name)
+		struct boot_fspec_t*	fspec)
 {
      return FILE_ERR_BAD_FSYS;
 }
Index: yaboot.git_head/second/fs_of.c
===================================================================
--- yaboot.git_head.orig/second/fs_of.c
+++ yaboot.git_head/second/fs_of.c
@@ -47,15 +47,15 @@
 #define LOAD_BUFFER_POS		0x00000000
 #define LOAD_BUFFER_SIZE	0x01000000
 
-static int of_open(struct boot_file_t* file, const char* dev_name,
-		   struct partition_t* part, const char* file_name);
+static int of_open(struct boot_file_t* file,
+		   struct partition_t* part, struct boot_fspec_t* fspec);
 static int of_read(struct boot_file_t* file, unsigned int size, void* buffer);
 static int of_seek(struct boot_file_t* file, unsigned int newpos);
 static int of_close(struct boot_file_t* file);
 
 
-static int of_net_open(struct boot_file_t* file, const char* dev_name,
-		       struct partition_t* part, const char* file_name);
+static int of_net_open(struct boot_file_t* file,
+		       struct partition_t* part, struct boot_fspec_t* fspec);
 static int of_net_read(struct boot_file_t* file, unsigned int size, void* buffer);
 static int of_net_seek(struct boot_file_t* file, unsigned int newpos);
 
@@ -79,8 +79,8 @@ struct fs_t of_net_filesystem =
 };
 
 static int
-of_open(struct boot_file_t* file, const char* dev_name,
-	struct partition_t* part, const char* file_name)
+of_open(struct boot_file_t* file,
+	struct partition_t* part, struct boot_fspec_t* fspec)
 {
      static char	buffer[1024];
      char               *filename;
@@ -89,7 +89,7 @@ of_open(struct boot_file_t* file, const 
      DEBUG_ENTER;
      DEBUG_OPEN;
 
-     strncpy(buffer, dev_name, 768);
+     strncpy(buffer, fspec->dev, 768);
      strcat(buffer, ":");
      if (part) {
           if (part->sys_ind == LINUX_RAID) {
@@ -101,10 +101,10 @@ of_open(struct boot_file_t* file, const 
 	  sprintf(pn, "%02d", part->part_number);
 	  strcat(buffer, pn);
      }
-     if (file_name && strlen(file_name)) {
+     if (fspec->file && strlen(fspec->file)) {
 	  if (part)
 	       strcat(buffer, ",");
-	  filename = strdup(file_name);
+	  filename = strdup(fspec->file);
 	  for (p = filename; *p; p++)
 	       if (*p == '/')
 		    *p = '\\';
@@ -131,8 +131,8 @@ of_open(struct boot_file_t* file, const 
 }
 
 static int
-of_net_open(struct boot_file_t* file, const char* dev_name,
-	    struct partition_t* part, const char* file_name)
+of_net_open(struct boot_file_t* file,
+	    struct partition_t* part, struct boot_fspec_t* fspec)
 {
      static char	buffer[1024];
      char               *filename;
@@ -141,10 +141,10 @@ of_net_open(struct boot_file_t* file, co
      DEBUG_ENTER;
      DEBUG_OPEN;
 
-     strncpy(buffer, dev_name, 768);
-     if (file_name && strlen(file_name)) {
+     strncpy(buffer, fspec->dev, 768);
+     if (fspec->file && strlen(fspec->file)) {
 	  strcat(buffer, ",");
-	  filename = strdup(file_name);
+	  filename = strdup(fspec->file);
 	  for (p = filename; *p; p++)
 	       if (*p == '/')
 		    *p = '\\';
Index: yaboot.git_head/second/fs_xfs.c
===================================================================
--- yaboot.git_head.orig/second/fs_xfs.c
+++ yaboot.git_head/second/fs_xfs.c
@@ -39,8 +39,8 @@ int xfs_read_data (char *buf, int len);
 int xfs_dir (char *dirname);
 
 /* Exported in struct fs_t */
-static int xfs_open(struct boot_file_t *file, const char *dev_name,
-		    struct partition_t *part, const char *file_name);
+static int xfs_open(struct boot_file_t *file,
+		    struct partition_t *part, struct boot_fspec_t *fspec);
 static int xfs_read(struct boot_file_t *file, unsigned int size, void *buffer);
 static int xfs_seek(struct boot_file_t *file, unsigned int newpos);
 static int xfs_close(struct boot_file_t *file);
@@ -59,8 +59,8 @@ uint64_t partition_offset;
 int errnum;
 
 static int
-xfs_open(struct boot_file_t *file, const char *dev_name,
-	 struct partition_t *part, const char *file_name)
+xfs_open(struct boot_file_t *file,
+	 struct partition_t *part, struct boot_fspec_t *fspec)
 {
 	static char buffer[1024];
 
@@ -78,11 +78,11 @@ xfs_open(struct boot_file_t *file, const
 	else
 		partition_offset = 0;
 
-	strncpy(buffer, dev_name, 1020);
+	strncpy(buffer, fspec->dev, 1020);
 	if (_machine != _MACH_bplan)
 		strcat(buffer, ":0");  /* 0 is full disk in (non-buggy) OF */
 	DEBUG_F("Trying to open dev_name=%s; filename=%s; partition offset=%Lu\n",
-		buffer, file_name, partition_offset);
+		buffer, fspec->file, partition_offset);
 	file->of_device = prom_open(buffer);
 
 	if (file->of_device == PROM_INVALID_HANDLE || file->of_device == NULL)
@@ -105,8 +105,8 @@ xfs_open(struct boot_file_t *file, const
 		return FILE_ERR_BAD_FSYS;
 	}
 
-	DEBUG_F("Attempting to open %s\n", file_name);
-	strcpy(buffer, file_name); /* xfs_dir modifies argument */
+	DEBUG_F("Attempting to open %s\n", fspec->file);
+	strcpy(buffer, fspec->file); /* xfs_dir modifies argument */
 	if(!xfs_dir(buffer))
 	{
 		DEBUG_F("xfs_dir() failed. errnum = %d\n", errnum);
@@ -116,7 +116,7 @@ xfs_open(struct boot_file_t *file, const
 		return errnum;
 	}
 
-	DEBUG_F("Successfully opened %s\n", file_name);
+	DEBUG_F("Successfully opened %s\n", fspec->file);
 
 	DEBUG_LEAVE(FILE_ERR_OK);
 	return FILE_ERR_OK;
Index: yaboot.git_head/include/debug.h
===================================================================
--- yaboot.git_head.orig/include/debug.h
+++ yaboot.git_head/include/debug.h
@@ -32,8 +32,8 @@
     prom_printf( fmt, ## args );\
 }
 # define DEBUG_OPEN DEBUG_F( "dev=%s, part=0x%p (%d), file_name=%s\n",\
-                             dev_name, part, part ? part->part_number : -1,\
-                             file_name)
+                             fspec->dev, part, part ? part->part_number : -1,\
+                             fspec->file)
 # define DEBUG_SLEEP prom_sleep(3)
 #else
 #define DEBUG_ENTER
Index: yaboot.git_head/second/file.c
===================================================================
--- yaboot.git_head.orig/second/file.c
+++ yaboot.git_head/second/file.c
@@ -287,15 +287,14 @@ parse_device_path(char *imagepath, char 
 
 static int
 file_block_open(	struct boot_file_t*	file,
-			const char*		dev_name,
-			const char*		file_name,
+			struct boot_fspec_t*	fspec,
 			int			partition)
 {
      struct partition_t*	parts;
      struct partition_t*	p;
      struct partition_t*	found;
 
-     parts = partitions_lookup(dev_name);
+     parts = partitions_lookup(fspec->dev);
      found = NULL;
 
 #if DEBUG
@@ -308,7 +307,7 @@ file_block_open(	struct boot_file_t*	fil
 	  DEBUG_F("number: %02d, start: 0x%08lx, length: 0x%08lx\n",
 		  p->part_number, p->part_start, p->part_size );
 	  if (partition == -1) {
-	       file->fs = fs_open( file, dev_name, p, file_name );
+	       file->fs = fs_open( file, p, fspec );
 	       if (file->fs == NULL || fserrorno != FILE_ERR_OK)
 		    continue;
 	       else {
@@ -328,7 +327,7 @@ file_block_open(	struct boot_file_t*	fil
       * cases, let OF figure out a default partition.
       */
      DEBUG_F( "Using OF defaults.. (found = %p)\n", found );
-     file->fs = fs_open( file, dev_name, found, file_name );
+     file->fs = fs_open( file, found, fspec );
 
 done:
      if (parts)
@@ -338,12 +337,10 @@ done:
 }
 
 static int
-file_net_open(	struct boot_file_t*	file,
-		const char*		dev_name,
-		const char*		file_name)
+file_net_open(struct boot_file_t* file, struct boot_fspec_t *fspec)
 {
      file->fs = fs_of_netboot;
-     return fs_of_netboot->open(file, dev_name, NULL, file_name);
+     return fs_of_netboot->open(file, NULL, fspec);
 }
 
 static int
@@ -380,7 +377,7 @@ static struct fs_t fs_default =
 };
 
 
-int open_file(const struct boot_fspec_t* spec, struct boot_file_t* file)
+int open_file(struct boot_fspec_t* spec, struct boot_file_t* file)
 {
      int result;
 
@@ -399,10 +396,10 @@ int open_file(const struct boot_fspec_t*
      switch(file->device_kind) {
      case FILE_DEVICE_BLOCK:
 	  DEBUG_F("device is a block device\n");
-	  return file_block_open(file, spec->dev, spec->file, spec->part);
+	  return file_block_open(file, spec, spec->part);
      case FILE_DEVICE_NET:
 	  DEBUG_F("device is a network device\n");
-	  return file_net_open(file, spec->dev, spec->file);
+	  return file_net_open(file, spec);
      }
      return 0;
 }
Index: yaboot.git_head/second/fs.c
===================================================================
--- yaboot.git_head.orig/second/fs.c
+++ yaboot.git_head/second/fs.c
@@ -56,12 +56,12 @@ const struct fs_t *fs_of = &of_filesyste
 const struct fs_t *fs_of_netboot = &of_net_filesystem;  /* needed by file.c */
 
 const struct fs_t *
-fs_open(struct boot_file_t *file, const char *dev_name,
-	struct partition_t *part, const char *file_name)
+fs_open(struct boot_file_t *file,
+	struct partition_t *part, struct boot_fspec_t *fspec)
 {
      const struct fs_t **fs;
      for (fs = block_filesystems; *fs; fs++)
-	  if ((fserrorno = (*fs)->open(file, dev_name, part, file_name)) != FILE_ERR_BAD_FSYS)
+	  if ((fserrorno = (*fs)->open(file, part, fspec)) != FILE_ERR_BAD_FSYS)
 	       break;
 
      return *fs;
