+2010-12-26 Vladimir Serbinenko <phcoder@gmail.com>
+
+ Handling of files of unknown size is currently limited. They can't be
+ used e.g. for initrd or modules. Moreover gzip handling of not
+ easily seekable files is buggy. Disable unknown file size for now. May
+ be inefficient but works.
+
+ * grub-core/io/gzio.c (test_header): Always retrieve the file size.
+ * grub-core/io/xzio.c (grub_xzio_open): Likewise.
+
2010-12-25 Mirko Parthey <mirko.parthey@informatik.tu-chemnitz.de>
* grub-core/boot/i386/pc/boot.S: Fix %es:%bx pointing to nowhere on
gzio->data_offset = grub_file_tell (gzio->file);
- grub_file_seek (gzio->file, grub_file_size (gzio->file) - 4);
-
- if (grub_file_seekable (gzio->file))
- {
- if (grub_file_read (gzio->file, &orig_len, 4) != 4)
- {
- grub_error (GRUB_ERR_BAD_FILE_TYPE, "unsupported gzip format");
- return 0;
- }
- }
- /* FIXME: this does not handle files whose original size is over 4GB.
- But how can we know the real original size? */
- file->size = grub_le_to_cpu32 (orig_len);
+ /* FIXME: don't do this on not easily seekable files. */
+ {
+ grub_file_seek (gzio->file, grub_file_size (gzio->file) - 4);
+ if (grub_file_read (gzio->file, &orig_len, 4) != 4)
+ {
+ grub_error (GRUB_ERR_BAD_FILE_TYPE, "unsupported gzip format");
+ return 0;
+ }
+ /* FIXME: this does not handle files whose original size is over 4GB.
+ But how can we know the real original size? */
+ file->size = grub_le_to_cpu32 (orig_len);
+ }
initialize_tables (file);
xzio->buf.out_pos = 0;
xzio->buf.out_size = XZBUFSIZ;
- if (!test_header (file) || !(grub_file_seekable (io) && test_footer (file)))
+ /* FIXME: don't test footer on not easily seekable files. */
+ if (!test_header (file) || !test_footer (file))
{
grub_errno = GRUB_ERR_NONE;
grub_file_seek (io, 0);