commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[1757] 2008-08-01 Bean <address@hidden>


From: Bean
Subject: [1757] 2008-08-01 Bean <address@hidden>
Date: Fri, 01 Aug 2008 04:06:56 +0000

Revision: 1757
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1757
Author:   bean
Date:     2008-08-01 04:06:55 +0000 (Fri, 01 Aug 2008)

Log Message:
-----------
2008-08-01  Bean  <address@hidden>

        * conf/common.rmk (pkglib_MODULES): Add bufio.mod.
        (bufio_mod_SOURCES): New macro.
        (bufio_mod_CFLAGS): Likewise.
        (bufio_mod_LDFLAGS): Likewise.

        * include/grub/bufio.h: New file.

        * io/bufio.c: Likewise.

        * video/png.c: Replace <grub/file.h> with <grub/bufio.h>.
        (grub_video_reader_png): Use grub_buffile_open to open file.

        * video/jpeg.c: Replace <grub/file.h> with <grub/bufio.h>.
        (grub_video_reader_jpeg): Use grub_buffile_open to open file.

        * video/tga.c: Replace <grub/file.h> with <grub/bufio.h>.
        (grub_video_reader_tga): Use grub_buffile_open to open file.

        * font/manager.c: Include <grub/bufio.h>.
        (add_font): Use grub_buffile_open to open file.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/conf/common.mk
    trunk/grub2/conf/common.rmk
    trunk/grub2/font/manager.c
    trunk/grub2/video/readers/jpeg.c
    trunk/grub2/video/readers/png.c
    trunk/grub2/video/readers/tga.c

Added Paths:
-----------
    trunk/grub2/include/grub/bufio.h
    trunk/grub2/io/bufio.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/ChangeLog       2008-08-01 04:06:55 UTC (rev 1757)
@@ -1,3 +1,26 @@
+2008-08-01  Bean  <address@hidden>
+
+       * conf/common.rmk (pkglib_MODULES): Add bufio.mod.
+       (bufio_mod_SOURCES): New macro.
+       (bufio_mod_CFLAGS): Likewise.
+       (bufio_mod_LDFLAGS): Likewise.
+
+       * include/grub/bufio.h: New file.
+
+       * io/bufio.c: Likewise.
+
+       * video/png.c: Replace <grub/file.h> with <grub/bufio.h>.
+       (grub_video_reader_png): Use grub_buffile_open to open file.
+
+       * video/jpeg.c: Replace <grub/file.h> with <grub/bufio.h>.
+       (grub_video_reader_jpeg): Use grub_buffile_open to open file.
+
+       * video/tga.c: Replace <grub/file.h> with <grub/bufio.h>.
+       (grub_video_reader_tga): Use grub_buffile_open to open file.
+
+       * font/manager.c: Include <grub/bufio.h>.
+       (add_font): Use grub_buffile_open to open file.
+
 2008-07-31  Robert Millan  <address@hidden>
 
        * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): When loading

Modified: trunk/grub2/conf/common.mk
===================================================================
--- trunk/grub2/conf/common.mk  2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/conf/common.mk  2008-08-01 04:06:55 UTC (rev 1757)
@@ -3275,7 +3275,7 @@
 crc_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # Misc.
-pkglib_MODULES += gzio.mod elf.mod
+pkglib_MODULES += gzio.mod bufio.mod elf.mod
 
 # For elf.mod.
 elf_mod_SOURCES = kern/elf.c
@@ -3390,3 +3390,60 @@
 
 gzio_mod_CFLAGS = $(COMMON_CFLAGS)
 gzio_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For bufio.mod.
+bufio_mod_SOURCES = io/bufio.c
+CLEANFILES += bufio.mod mod-bufio.o mod-bufio.c pre-bufio.o 
bufio_mod-io_bufio.o und-bufio.lst
+ifneq ($(bufio_mod_EXPORTS),no)
+CLEANFILES += def-bufio.lst
+DEFSYMFILES += def-bufio.lst
+endif
+MOSTLYCLEANFILES += bufio_mod-io_bufio.d
+UNDSYMFILES += und-bufio.lst
+
+bufio.mod: pre-bufio.o mod-bufio.o $(TARGET_OBJ2ELF)
+       -rm -f $@
+       $(TARGET_CC) $(bufio_mod_LDFLAGS) $(TARGET_LDFLAGS) $(MODULE_LDFLAGS) 
-Wl,-r,-d -o $@ pre-bufio.o mod-bufio.o
+       if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f 
$@; exit 1); fi
+       $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K 
_grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
+
+pre-bufio.o: $(bufio_mod_DEPENDENCIES) bufio_mod-io_bufio.o
+       -rm -f $@
+       $(TARGET_CC) $(bufio_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ 
bufio_mod-io_bufio.o
+
+mod-bufio.o: mod-bufio.c
+       $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(bufio_mod_CFLAGS) -c 
-o $@ $<
+
+mod-bufio.c: moddep.lst genmodsrc.sh
+       sh $(srcdir)/genmodsrc.sh 'bufio' $< > $@ || (rm -f $@; exit 1)
+
+ifneq ($(bufio_mod_EXPORTS),no)
+def-bufio.lst: pre-bufio.o
+       $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 bufio/' > $@
+endif
+
+und-bufio.lst: pre-bufio.o
+       echo 'bufio' > $@
+       $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+bufio_mod-io_bufio.o: io/bufio.c $(io/bufio.c_DEPENDENCIES)
+       $(TARGET_CC) -Iio -I$(srcdir)/io $(TARGET_CPPFLAGS)  $(TARGET_CFLAGS) 
$(bufio_mod_CFLAGS) -MD -c -o $@ $<
+-include bufio_mod-io_bufio.d
+
+CLEANFILES += cmd-bufio_mod-io_bufio.lst fs-bufio_mod-io_bufio.lst 
partmap-bufio_mod-io_bufio.lst
+COMMANDFILES += cmd-bufio_mod-io_bufio.lst
+FSFILES += fs-bufio_mod-io_bufio.lst
+PARTMAPFILES += partmap-bufio_mod-io_bufio.lst
+
+cmd-bufio_mod-io_bufio.lst: io/bufio.c $(io/bufio.c_DEPENDENCIES) gencmdlist.sh
+       set -e;           $(TARGET_CC) -Iio -I$(srcdir)/io $(TARGET_CPPFLAGS) 
$(TARGET_CFLAGS) $(bufio_mod_CFLAGS) -E $<          | sh 
$(srcdir)/gencmdlist.sh bufio > $@ || (rm -f $@; exit 1)
+
+fs-bufio_mod-io_bufio.lst: io/bufio.c $(io/bufio.c_DEPENDENCIES) genfslist.sh
+       set -e;           $(TARGET_CC) -Iio -I$(srcdir)/io $(TARGET_CPPFLAGS) 
$(TARGET_CFLAGS) $(bufio_mod_CFLAGS) -E $<          | sh $(srcdir)/genfslist.sh 
bufio > $@ || (rm -f $@; exit 1)
+
+partmap-bufio_mod-io_bufio.lst: io/bufio.c $(io/bufio.c_DEPENDENCIES) 
genpartmaplist.sh
+       set -e;           $(TARGET_CC) -Iio -I$(srcdir)/io $(TARGET_CPPFLAGS) 
$(TARGET_CFLAGS) $(bufio_mod_CFLAGS) -E $<          | sh 
$(srcdir)/genpartmaplist.sh bufio > $@ || (rm -f $@; exit 1)
+
+
+bufio_mod_CFLAGS = $(COMMON_CFLAGS)
+bufio_mod_LDFLAGS = $(COMMON_LDFLAGS)

Modified: trunk/grub2/conf/common.rmk
===================================================================
--- trunk/grub2/conf/common.rmk 2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/conf/common.rmk 2008-08-01 04:06:55 UTC (rev 1757)
@@ -382,7 +382,7 @@
 crc_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # Misc.
-pkglib_MODULES += gzio.mod elf.mod
+pkglib_MODULES += gzio.mod bufio.mod elf.mod
 
 # For elf.mod.
 elf_mod_SOURCES = kern/elf.c
@@ -393,3 +393,8 @@
 gzio_mod_SOURCES = io/gzio.c
 gzio_mod_CFLAGS = $(COMMON_CFLAGS)
 gzio_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For bufio.mod.
+bufio_mod_SOURCES = io/bufio.c
+bufio_mod_CFLAGS = $(COMMON_CFLAGS)
+bufio_mod_LDFLAGS = $(COMMON_LDFLAGS)

Modified: trunk/grub2/font/manager.c
===================================================================
--- trunk/grub2/font/manager.c  2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/font/manager.c  2008-08-01 04:06:55 UTC (rev 1757)
@@ -23,6 +23,7 @@
 #include <grub/types.h>
 #include <grub/mm.h>
 #include <grub/font.h>
+#include <grub/bufio.h>
 
 struct entry
 {
@@ -69,7 +70,7 @@
   grub_uint32_t num, i;
   struct font *font = 0;
 
-  file = grub_file_open (filename);
+  file = grub_buffile_open (filename, 0);
   if (! file)
     goto fail;
 

Added: trunk/grub2/include/grub/bufio.h
===================================================================
--- trunk/grub2/include/grub/bufio.h                            (rev 0)
+++ trunk/grub2/include/grub/bufio.h    2008-08-01 04:06:55 UTC (rev 1757)
@@ -0,0 +1,28 @@
+/* bufio.h - prototypes for bufio */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2008  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_BUFIO_H
+#define GRUB_BUFIO_H   1
+
+#include <grub/file.h>
+
+grub_file_t grub_bufio_open (grub_file_t io, int size);
+grub_file_t grub_buffile_open (const char *name, int size);
+
+#endif /* ! GRUB_BUFIO_H */

Added: trunk/grub2/io/bufio.c
===================================================================
--- trunk/grub2/io/bufio.c                              (rev 0)
+++ trunk/grub2/io/bufio.c      2008-08-01 04:06:55 UTC (rev 1757)
@@ -0,0 +1,205 @@
+/* bufio.c - buffered io access */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2008  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/err.h>
+#include <grub/types.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/fs.h>
+#include <grub/bufio.h>
+
+#define GRUB_BUFIO_DEF_SIZE    8192
+#define GRUB_BUFIO_MAX_SIZE    1048576
+
+struct grub_bufio
+{
+  grub_file_t file;
+  grub_size_t block_size;
+  grub_size_t buffer_len;
+  char buffer[0];
+};
+typedef struct grub_bufio *grub_bufio_t;
+
+static struct grub_fs grub_bufio_fs;
+
+grub_file_t
+grub_bufio_open (grub_file_t io, int size)
+{
+  grub_file_t file;
+  grub_bufio_t bufio = 0;
+
+  file = (grub_file_t) grub_malloc (sizeof (*file));
+  if (! file)
+    return 0;
+
+  if (size == 0)
+    size = GRUB_BUFIO_DEF_SIZE;
+  else if (size > GRUB_BUFIO_MAX_SIZE)
+    size = GRUB_BUFIO_MAX_SIZE;
+
+  if ((size < 0) || ((unsigned) size > io->size))
+    size = ((io->size > GRUB_BUFIO_MAX_SIZE) ? GRUB_BUFIO_MAX_SIZE :
+            io->size);
+
+  bufio = grub_malloc (sizeof (struct grub_bufio) + size);
+  if (! bufio)
+    {
+      grub_free (file);
+      return 0;
+    }
+
+  bufio->file = io;
+  bufio->block_size = size;
+  bufio->buffer_len = 0;
+
+  file->device = io->device;
+  file->offset = 0;
+  file->size = io->size;
+  file->data = bufio;
+  file->read_hook = 0;
+  file->fs = &grub_bufio_fs;
+
+  return file;
+}
+
+grub_file_t
+grub_buffile_open (const char *name, int size)
+{
+  grub_file_t io, file;
+
+  io = grub_file_open (name);
+  if (! io)
+    return 0;
+
+  file = grub_bufio_open (io, size);
+  if (! file)
+    {
+      grub_file_close (io);
+      return 0;
+    }
+
+  return file;
+}
+
+static grub_ssize_t
+grub_bufio_read (grub_file_t file, char *buf, grub_size_t len)
+{
+  grub_size_t res = len;
+  grub_bufio_t bufio = file->data;
+  grub_uint32_t pos;
+
+  if ((file->offset >= bufio->file->offset) &&
+      (file->offset < bufio->file->offset + bufio->buffer_len))
+    {
+      grub_size_t n;
+
+      pos = file->offset - bufio->file->offset;
+      n = bufio->buffer_len - pos;
+      if (n > len)
+        n = len;
+
+      grub_memcpy (buf, &bufio->buffer[pos], n);
+      len -= n;
+      if (! len)
+        return res;
+
+      buf += n;
+      bufio->file->offset += bufio->buffer_len;
+      pos = 0;
+    }
+  else
+    {
+      bufio->file->offset = grub_divmod64 (file->offset, bufio->block_size,
+                                           &pos);
+      bufio->file->offset *= bufio->block_size;
+    }
+
+  if (pos + len >= bufio->block_size)
+    {
+      if (pos)
+        {
+          grub_size_t n;
+
+          bufio->file->fs->read (bufio->file, bufio->buffer,
+                                 bufio->block_size);
+          if (grub_errno)
+            return -1;
+
+          n = bufio->block_size - pos;
+          grub_memcpy (buf, &bufio->buffer[pos], n);
+          len -= n;
+          buf += n;
+          bufio->file->offset += bufio->block_size;
+          pos = 0;
+        }
+
+      while (len >= bufio->block_size)
+        {
+          bufio->file->fs->read (bufio->file, buf, bufio->block_size);
+          if (grub_errno)
+            return -1;
+
+          len -= bufio->block_size;
+          buf += bufio->block_size;
+          bufio->file->offset += bufio->block_size;
+        }
+
+      if (! len)
+        {
+          bufio->buffer_len = 0;
+          return res;
+        }
+    }
+
+  bufio->buffer_len = bufio->file->size - bufio->file->offset;
+  if (bufio->buffer_len > bufio->block_size)
+    bufio->buffer_len = bufio->block_size;
+
+  bufio->file->fs->read (bufio->file, bufio->buffer, bufio->buffer_len);
+  if (grub_errno)
+    return -1;
+
+  grub_memcpy (buf, &bufio->buffer[pos], len);
+
+  return res;
+}
+
+static grub_err_t
+grub_bufio_close (grub_file_t file)
+{
+  grub_bufio_t bufio = file->data;
+
+  grub_file_close (bufio->file);
+  grub_free (bufio);
+
+  file->device = 0;
+
+  return grub_errno;
+}
+
+static struct grub_fs grub_bufio_fs =
+  {
+    .name = "bufio",
+    .dir = 0,
+    .open = 0,
+    .read = grub_bufio_read,
+    .close = grub_bufio_close,
+    .label = 0,
+    .next = 0
+  };

Modified: trunk/grub2/video/readers/jpeg.c
===================================================================
--- trunk/grub2/video/readers/jpeg.c    2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/video/readers/jpeg.c    2008-08-01 04:06:55 UTC (rev 1757)
@@ -23,7 +23,7 @@
 #include <grub/mm.h>
 #include <grub/misc.h>
 #include <grub/arg.h>
-#include <grub/file.h>
+#include <grub/bufio.h>
 
 /* Uncomment following define to enable JPEG debug.  */
 //#define JPEG_DEBUG
@@ -664,7 +664,7 @@
   grub_file_t file;
   struct grub_jpeg_data *data;
 
-  file = grub_file_open (filename);
+  file = grub_buffile_open (filename, 0);
   if (!file)
     return grub_errno;
 

Modified: trunk/grub2/video/readers/png.c
===================================================================
--- trunk/grub2/video/readers/png.c     2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/video/readers/png.c     2008-08-01 04:06:55 UTC (rev 1757)
@@ -23,7 +23,7 @@
 #include <grub/mm.h>
 #include <grub/misc.h>
 #include <grub/arg.h>
-#include <grub/file.h>
+#include <grub/bufio.h>
 
 /* Uncomment following define to enable PNG debug.  */
 //#define PNG_DEBUG
@@ -840,7 +840,7 @@
   grub_file_t file;
   struct grub_png_data *data;
 
-  file = grub_file_open (filename);
+  file = grub_buffile_open (filename, 0);
   if (!file)
     return grub_errno;
 

Modified: trunk/grub2/video/readers/tga.c
===================================================================
--- trunk/grub2/video/readers/tga.c     2008-07-31 20:48:40 UTC (rev 1756)
+++ trunk/grub2/video/readers/tga.c     2008-08-01 04:06:55 UTC (rev 1757)
@@ -23,7 +23,7 @@
 #include <grub/mm.h>
 #include <grub/misc.h>
 #include <grub/arg.h>
-#include <grub/file.h>
+#include <grub/bufio.h>
 
 /* Uncomment following define to enable TGA debug.  */
 //#define TGA_DEBUG
@@ -319,7 +319,7 @@
   struct grub_tga_header header;
   int has_alpha;
 
-  file = grub_file_open (filename);
+  file = grub_buffile_open (filename, 0);
   if (! file)
     return grub_errno;
 






reply via email to

[Prev in Thread] Current Thread [Next in Thread]