Dnia czwartek 08 kwiecień 2010 o 23:55:28 Szymon Janc napisał(a):
> Hello,
> 
> New version with various fixes, most noticable : seek support, respect not
> easly seekable flag, BCJ support.

Attached is a small fix for xzio read to act in grub way, not posix like.


-- 
Szymon K. Janc
szy...@janc.net.pl // GG: 1383435
=== modified file 'io/xzio.c'
--- io/xzio.c	2010-04-08 21:44:23 +0000
+++ io/xzio.c	2010-04-10 22:46:52 +0000
@@ -245,8 +245,6 @@
   int offset_lock;
   grub_uint8_t current_offset;
 
-  xzio->buf.out_size = len >= XZBUFSIZ ? XZBUFSIZ : len;
-
   /* If seek backward need to reset decoder and start from beginning of file.
      TODO Possible improvement by jumping blocks.  */
   if (file->offset < xzio->saved_offset)
@@ -259,18 +257,19 @@
       grub_file_seek (xzio->file, 0);
     }
 
-  offset_lock = (file->offset == xzio->saved_offset) ? 1 : 0;
-  current_offset = xzio->saved_offset;
-
-  while (len >= xzio->buf.out_size)
+  while (len > 0)
     {
+      xzio->buf.out_size = len >= XZBUFSIZ ? XZBUFSIZ : len;
+
+      offset_lock = (file->offset == xzio->saved_offset) ? 1 : 0;
+      current_offset = xzio->saved_offset;
+
       /* Feed input.  */
       if (xzio->buf.in_pos == xzio->buf.in_size)
 	{
 	  readret = grub_file_read (xzio->file, xzio->inbuf, XZBUFSIZ);
 	  if (readret < 0)
 	    return -1;
-
 	  xzio->buf.in_size = readret;
 	  xzio->buf.in_pos = 0;
 	}
@@ -317,7 +316,7 @@
 	}
       xzio->buf.out_pos = 0;
 
-      if (xzret == XZ_STREAM_END) /* Stream end, EOF.  */
+      if (xzret == XZ_STREAM_END)	/* Stream end, EOF.  */
 	break;
     }
 

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to