[1782] 2008-08-06 Bean <[email protected]>

Bean <[email protected]>
Newsgroups gmane.comp.boot-loaders.grub.cvs
Message-ID <[email protected]>
Revision: 1782
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1782
Author:   bean
Date:     2008-08-06 04:05:12 +0000 (Wed, 06 Aug 2008)

Log Message:
-----------
2008-08-06  Bean  <[email protected]>

	* fs/i386/pc/pxe.c (curr_file): new variable.
	(grub_pxefs_open): Simply the handling of pxe file system. Don't
	require the dummy internal file system anymore.
	(grub_pxefs_read): Removed.
	(grub_pxefs_close): Likewise.
	(grub_pxefs_fs_int): Likewise.
	(grub_pxefs_read_int): Renamed to grub_pxefs_read. Reinitialize tftp
	connection when we switch file.
	(grub_pxefs_close_int): Renamed to grub_pxefs_close.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/fs/i386/pc/pxe.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog	2008-08-06 00:20:04 UTC (rev 1781)
+++ trunk/grub2/ChangeLog	2008-08-06 04:05:12 UTC (rev 1782)
@@ -1,3 +1,15 @@
+2008-08-06  Bean  <[email protected]>
+
+	* fs/i386/pc/pxe.c (curr_file): new variable.
+	(grub_pxefs_open): Simply the handling of pxe file system. Don't
+	require the dummy internal file system anymore.
+	(grub_pxefs_read): Removed.
+	(grub_pxefs_close): Likewise.
+	(grub_pxefs_fs_int): Likewise.
+	(grub_pxefs_read_int): Renamed to grub_pxefs_read. Reinitialize tftp
+	connection when we switch file.
+	(grub_pxefs_close_int): Renamed to grub_pxefs_close.
+
 2008-08-06  Robert Millan  <[email protected]>
 
 	* conf/i386-coreboot.rmk (pkglib_MODULES): Add `reboot.mod' and
@@ -63,7 +75,7 @@
 
 	* commands/i386/pc/pxecmd.c: New file.
 
-	* disk/i386/pc/pxe.c: Likewise.
+	* fs/i386/pc/pxe.c: Likewise.
 
 	* include/grub/i386/pc/pxe.h: Likewise.
 

Modified: trunk/grub2/fs/i386/pc/pxe.c
===================================================================
--- trunk/grub2/fs/i386/pc/pxe.c	2008-08-06 00:20:04 UTC (rev 1781)
+++ trunk/grub2/fs/i386/pc/pxe.c	2008-08-06 04:05:12 UTC (rev 1782)
@@ -39,6 +39,8 @@
 grub_uint32_t grub_pxe_gateway_ip;
 int grub_pxe_blksize = GRUB_PXE_MIN_BLKSIZE;
 
+static grub_file_t curr_file = 0;
+
 struct grub_pxe_data
 {
   grub_uint32_t packet_number;
@@ -153,12 +155,9 @@
       return grub_errno;
     }
 
-  file_int->data = data;
-  file_int->offset = 0;
-  file_int->device = 0;
-  file_int->size = file->size;
-  file_int->read_hook = 0;
-  file_int->fs = &grub_pxefs_fs_int;
+  file->data = data;
+  grub_memcpy (file_int, file, sizeof (struct grub_file));
+  curr_file = file_int;
 
   bufio = grub_bufio_open (file_int, grub_pxe_blksize);
   if (! bufio)
@@ -168,7 +167,7 @@
       return grub_errno;
     }
 
-  file->data = bufio;
+  grub_memcpy (file, bufio, sizeof (struct grub_file));
 
   return GRUB_ERR_NONE;
 }
@@ -176,25 +175,6 @@
 static grub_ssize_t
 grub_pxefs_read (grub_file_t file, char *buf, grub_size_t len)
 {
-  grub_file_t bufio;
-
-  bufio = file->data;
-  bufio->offset = file->offset;
-
-  return bufio->fs->read (bufio, buf, len);
-}
-
-static grub_ssize_t
-grub_pxefs_close (grub_file_t file)
-{
-  grub_file_close ((grub_file_t) file->data);
-
-  return grub_errno;
-}
-
-static grub_ssize_t
-grub_pxefs_read_int (grub_file_t file, char *buf, grub_size_t len)
-{
   struct grub_pxenv_tftp_read c;
   struct grub_pxe_data *data;
   grub_uint32_t pn, r;
@@ -206,7 +186,7 @@
     return grub_error (GRUB_ERR_BAD_FS,
                        "read access must be aligned to packet size");
 
-  if (data->packet_number > pn)
+  if ((curr_file != file) || (data->packet_number > pn))
     {
       struct grub_pxenv_tftp_open o;
 
@@ -221,6 +201,7 @@
       if (o.status)
         return grub_error (GRUB_ERR_BAD_FS, "open fails");
       data->packet_number = 0;
+      curr_file = file;
     }
 
   c.buffer = SEGOFS (GRUB_MEMORY_MACHINE_SCRATCH_ADDR);
@@ -242,7 +223,7 @@
 }
 
 static grub_err_t
-grub_pxefs_close_int (grub_file_t file)
+grub_pxefs_close (grub_file_t file)
 {
   struct grub_pxenv_tftp_close c;
 
@@ -271,13 +252,6 @@
     .next = 0
   };
 
-static struct grub_fs grub_pxefs_fs_int =
-  {
-    .name = "pxefs",
-    .read = grub_pxefs_read_int,
-    .close = grub_pxefs_close_int,
-  };
-
 static void
 grub_pxe_detect (void)
 {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.