All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Roskin <proski@gnu.org>
To: grub-devel@gnu.org
Subject: [PATCH 3/4] Change grub_file_seek() to return grub_err_t
Date: Tue, 21 Jul 2009 23:16:53 -0400	[thread overview]
Message-ID: <20090722031653.6348.21972.stgit@mj.roinet.com> (raw)
In-Reply-To: <20090722031638.6348.79007.stgit@mj.roinet.com>

No callers need the previous offset.  Returning -1 with implicit cast to
grub_off_t required a cast just to check for errors.  This also makes
grub_file_seek() more similar to fseek().

ChangeLog:

	* kern/file.c (grub_file_seek): Return grub_err_t.  Adjust all
	callers that check the return value.
---
 commands/minicmd.c            |    4 ++--
 font/font.c                   |    2 +-
 include/grub/file.h           |    2 +-
 kern/elf.c                    |   10 +++++-----
 kern/file.c                   |   12 ++++--------
 loader/aout.c                 |    2 +-
 loader/i386/bsd.c             |    2 +-
 loader/i386/bsdXX.c           |   10 +++++-----
 loader/i386/multiboot.c       |    2 +-
 loader/i386/multiboot_elfxx.c |    4 ++--
 loader/macho.c                |   14 +++++++-------
 loader/xnu_resume.c           |    2 +-
 12 files changed, 31 insertions(+), 35 deletions(-)

diff --git a/commands/minicmd.c b/commands/minicmd.c
index 1f5abae..bc6458d 100644
--- a/commands/minicmd.c
+++ b/commands/minicmd.c
@@ -188,7 +188,7 @@ grub_rescue_cmd_testload (int argc, char *argv[])
 
   /* Read sequentially again.  */
   grub_printf ("Reading %s sequentially again", argv[0]);
-  if (grub_file_seek (file, 0) < 0)
+  if (grub_file_seek (file, 0) != GRUB_ERR_NONE)
     goto fail;
 
   for (pos = 0; pos < size; pos += GRUB_DISK_SECTOR_SIZE)
@@ -216,7 +216,7 @@ grub_rescue_cmd_testload (int argc, char *argv[])
 
       pos -= GRUB_DISK_SECTOR_SIZE;
 
-      if (grub_file_seek (file, pos) < 0)
+      if (grub_file_seek (file, pos) != GRUB_ERR_NONE)
 	goto fail;
 
       if (grub_file_read (file, sector, GRUB_DISK_SECTOR_SIZE)
diff --git a/font/font.c b/font/font.c
index a812919..67b97d2 100644
--- a/font/font.c
+++ b/font/font.c
@@ -530,7 +530,7 @@ grub_font_load (const char *filename)
           grub_printf("Unhandled section type, skipping.\n");
 #endif
           grub_off_t section_end = grub_file_tell (file) + section.length;
-          if ((int) grub_file_seek (file, section_end) == -1)
+          if (grub_file_seek (file, section_end) != GRUB_ERR_NONE)
             goto fail;
         }
     }
diff --git a/include/grub/file.h b/include/grub/file.h
index 2aacf93..88fa088 100644
--- a/include/grub/file.h
+++ b/include/grub/file.h
@@ -54,7 +54,7 @@ char *EXPORT_FUNC(grub_file_get_device_name) (const char *name);
 grub_file_t EXPORT_FUNC(grub_file_open) (const char *name);
 grub_ssize_t EXPORT_FUNC(grub_file_read) (grub_file_t file, void *buf,
 					  grub_size_t len);
-grub_off_t EXPORT_FUNC(grub_file_seek) (grub_file_t file, grub_off_t offset);
+grub_err_t EXPORT_FUNC(grub_file_seek) (grub_file_t file, grub_off_t offset);
 grub_err_t EXPORT_FUNC(grub_file_close) (grub_file_t file);
 
 static inline grub_off_t
diff --git a/kern/elf.c b/kern/elf.c
index f141610..fdb7d94 100644
--- a/kern/elf.c
+++ b/kern/elf.c
@@ -67,7 +67,7 @@ grub_elf_file (grub_file_t file)
 
   elf->file = file;
 
-  if (grub_file_seek (elf->file, 0) == (grub_off_t) -1)
+  if (grub_file_seek (elf->file, 0) != GRUB_ERR_NONE)
     goto fail;
 
   if (grub_file_read (elf->file, &elf->ehdr, sizeof (elf->ehdr))
@@ -130,7 +130,7 @@ grub_elf32_load_phdrs (grub_elf_t elf)
   if (! elf->phdrs)
     return grub_errno;
 
-  if ((grub_file_seek (elf->file, elf->ehdr.ehdr32.e_phoff) == (grub_off_t) -1)
+  if ((grub_file_seek (elf->file, elf->ehdr.ehdr32.e_phoff) != GRUB_ERR_NONE)
       || (grub_file_read (elf->file, elf->phdrs, phdrs_size) != phdrs_size))
     {
       grub_error_push ();
@@ -243,7 +243,7 @@ grub_elf32_load (grub_elf_t _elf, grub_elf32_load_hook_t _load_hook,
 		  (unsigned long long) load_addr,
 		  (unsigned long long) phdr->p_memsz);
 
-    if (grub_file_seek (elf->file, phdr->p_offset) == (grub_off_t) -1)
+    if (grub_file_seek (elf->file, phdr->p_offset) != GRUB_ERR_NONE)
       {
 	grub_error_push ();
 	return grub_error (GRUB_ERR_BAD_OS,
@@ -309,7 +309,7 @@ grub_elf64_load_phdrs (grub_elf_t elf)
   if (! elf->phdrs)
     return grub_errno;
 
-  if ((grub_file_seek (elf->file, elf->ehdr.ehdr64.e_phoff) == (grub_off_t) -1)
+  if ((grub_file_seek (elf->file, elf->ehdr.ehdr64.e_phoff) != GRUB_ERR_NONE)
       || (grub_file_read (elf->file, elf->phdrs, phdrs_size) != phdrs_size))
     {
       grub_error_push ();
@@ -423,7 +423,7 @@ grub_elf64_load (grub_elf_t _elf, grub_elf64_load_hook_t _load_hook,
 		  (unsigned long long) load_addr,
 		  (unsigned long long) phdr->p_memsz);
 
-    if (grub_file_seek (elf->file, phdr->p_offset) == (grub_off_t) -1)
+    if (grub_file_seek (elf->file, phdr->p_offset) != GRUB_ERR_NONE)
       {
 	grub_error_push ();
 	return grub_error (GRUB_ERR_BAD_OS,
diff --git a/kern/file.c b/kern/file.c
index 9b56b88..647fb8c 100644
--- a/kern/file.c
+++ b/kern/file.c
@@ -141,19 +141,15 @@ grub_file_close (grub_file_t file)
   return grub_errno;
 }
 
-grub_off_t
+grub_err_t
 grub_file_seek (grub_file_t file, grub_off_t offset)
 {
-  grub_off_t old;
-
   if (offset > file->size)
     {
-      grub_error (GRUB_ERR_OUT_OF_RANGE,
-		  "attempt to seek outside of the file");
-      return -1;
+      return grub_error (GRUB_ERR_OUT_OF_RANGE,
+			 "attempt to seek outside of the file");
     }
 
-  old = file->offset;
   file->offset = offset;
-  return old;
+  return GRUB_ERR_NONE;
 }
diff --git a/loader/aout.c b/loader/aout.c
index 0254b6a..a700771 100644
--- a/loader/aout.c
+++ b/loader/aout.c
@@ -43,7 +43,7 @@ grub_aout_load (grub_file_t file, int offset,
 		int load_size,
                 grub_addr_t bss_end_addr)
 {
-  if ((grub_file_seek (file, offset)) == (grub_off_t) - 1)
+  if (grub_file_seek (file, offset) != GRUB_ERR_NONE)
     return grub_errno;
 
   if (!load_size)
diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c
index 468e6d0..f592f81 100644
--- a/loader/i386/bsd.c
+++ b/loader/i386/bsd.c
@@ -610,7 +610,7 @@ grub_bsd_load_aout (grub_file_t file)
   int ofs, align_page;
   union grub_aout_header ah;
 
-  if ((grub_file_seek (file, 0)) == (grub_off_t) - 1)
+  if ((grub_file_seek (file, 0)) != GRUB_ERR_NONE)
     return grub_errno;
 
   if (grub_file_read (file, &ah, sizeof (ah)) != sizeof (ah))
diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c
index 3f15579..2ae542e 100644
--- a/loader/i386/bsdXX.c
+++ b/loader/i386/bsdXX.c
@@ -13,7 +13,7 @@ load (grub_file_t file, void *where, grub_off_t off, grub_size_t size)
   if (PTR_TO_UINT32 (where) + size > grub_os_area_addr + grub_os_area_size)
     return grub_error (GRUB_ERR_OUT_OF_RANGE,
 		       "Not enough memory for the module");
-  if (grub_file_seek (file, off) == (grub_off_t) -1)
+  if (grub_file_seek (file, off) != GRUB_ERR_NONE)
     return grub_errno;
   if (grub_file_read (file, where, size)
       != (grub_ssize_t) size)
@@ -29,7 +29,7 @@ load (grub_file_t file, void *where, grub_off_t off, grub_size_t size)
 static inline grub_err_t
 read_headers (grub_file_t file, Elf_Ehdr *e, char **shdr)
 {
- if (grub_file_seek (file, 0) == (grub_off_t) -1)
+ if (grub_file_seek (file, 0) != GRUB_ERR_NONE)
     return grub_errno;
 
   if (grub_file_read (file, (char *) e, sizeof (*e)) != sizeof (*e))
@@ -55,7 +55,7 @@ read_headers (grub_file_t file, Elf_Ehdr *e, char **shdr)
   if (! *shdr)
     return grub_errno;
 
-  if (grub_file_seek (file, e->e_shoff) == (grub_off_t) -1)
+  if (grub_file_seek (file, e->e_shoff) != GRUB_ERR_NONE)
     return grub_errno;
 
   if (grub_file_read (file, *shdr, e->e_shnum * e->e_shentsize)
@@ -264,7 +264,7 @@ SUFFIX (grub_freebsd_load_elf_meta) (grub_file_t file, grub_addr_t *kern_end)
   symstart = curload = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t));
   *((grub_freebsd_addr_t *) UINT_TO_PTR (curload)) = symsize;
   curload += sizeof (grub_freebsd_addr_t);
-  if (grub_file_seek (file, symoff) == (grub_off_t) -1)
+  if (grub_file_seek (file, symoff) != GRUB_ERR_NONE)
     return grub_errno;
   sym = (Elf_Sym *) UINT_TO_PTR (curload);
   if (grub_file_read (file, UINT_TO_PTR (curload), symsize) !=
@@ -278,7 +278,7 @@ SUFFIX (grub_freebsd_load_elf_meta) (grub_file_t file, grub_addr_t *kern_end)
 
   *((grub_freebsd_addr_t *) UINT_TO_PTR (curload)) = strsize;
   curload += sizeof (grub_freebsd_addr_t);
-  if (grub_file_seek (file, stroff) == (grub_off_t) -1)
+  if (grub_file_seek (file, stroff) != GRUB_ERR_NONE)
     return grub_errno;
   str = (char *) UINT_TO_PTR (curload);
   if (grub_file_read (file, UINT_TO_PTR (curload), strsize)
diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c
index 87ffcae..fc42cb1 100644
--- a/loader/i386/multiboot.c
+++ b/loader/i386/multiboot.c
@@ -293,7 +293,7 @@ grub_multiboot (int argc, char *argv[])
 
       grub_multiboot_payload_orig = (long) playground + RELOCATOR_SIZEOF(forward);
 
-      if ((grub_file_seek (file, offset)) == (grub_off_t) - 1)
+      if ((grub_file_seek (file, offset)) != GRUB_ERR_NONE)
 	goto fail;
 
       grub_file_read (file, (void *) grub_multiboot_payload_orig, load_size);
diff --git a/loader/i386/multiboot_elfxx.c b/loader/i386/multiboot_elfxx.c
index 77c4711..f1b7233 100644
--- a/loader/i386/multiboot_elfxx.c
+++ b/loader/i386/multiboot_elfxx.c
@@ -115,8 +115,8 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer)
 	  grub_dprintf ("multiboot_loader", "segment %d: paddr=0x%lx, memsz=0x%lx, vaddr=0x%lx\n",
 			i, (long) phdr(i)->p_paddr, (long) phdr(i)->p_memsz, (long) phdr(i)->p_vaddr);
 
-	  if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset)
-	      == (grub_off_t) -1)
+	  if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset) !=
+	      GRUB_ERR_NONE)
 	    return grub_error (GRUB_ERR_BAD_OS,
 			       "invalid offset in program header");
 
diff --git a/loader/macho.c b/loader/macho.c
index bd460b8..7fddaf0 100644
--- a/loader/macho.c
+++ b/loader/macho.c
@@ -50,7 +50,7 @@ grub_macho_parse32 (grub_macho_t macho)
     return;
 
   /* Read header and check magic*/
-  if (grub_file_seek (macho->file, macho->offset32) == (grub_off_t) -1
+  if (grub_file_seek (macho->file, macho->offset32) != GRUB_ERR_NONE
       || grub_file_read (macho->file, &head, sizeof (head))
       != sizeof(head))
     {
@@ -123,7 +123,7 @@ grub_macho32_readfile (grub_macho_t macho, void *dest)
     return grub_error (GRUB_ERR_BAD_OS,
 		       "Couldn't read architecture-specific part");
 
-  if (grub_file_seek (macho->file, macho->offset32) == (grub_off_t) -1)
+  if (grub_file_seek (macho->file, macho->offset32) != GRUB_ERR_NONE)
     {
       grub_error_push ();
       return grub_error (GRUB_ERR_BAD_OS,
@@ -206,8 +206,8 @@ grub_macho32_load (grub_macho_t macho, char *offset, int flags)
     if (! hdr->vmsize)
       return 0;
 
-    if (grub_file_seek (_macho->file, hdr->fileoff
-			+ _macho->offset32) == (grub_off_t) -1)
+    if (grub_file_seek (_macho->file, hdr->fileoff + _macho->offset32) !=
+	GRUB_ERR_NONE)
       {
 	grub_error_push ();
 	grub_error (GRUB_ERR_BAD_OS,
@@ -297,7 +297,7 @@ grub_macho_file (grub_file_t file)
   macho->cmds32 = 0;
   macho->cmds64 = 0;
 
-  if (grub_file_seek (macho->file, 0) == (grub_off_t) -1)
+  if (grub_file_seek (macho->file, 0) != GRUB_ERR_NONE)
     goto fail;
 
   if (grub_file_read (macho->file, &filestart, sizeof (filestart))
@@ -316,8 +316,8 @@ grub_macho_file (grub_file_t file)
 
       /* Load architecture description. */
       narchs = grub_be_to_cpu32 (filestart.fat.nfat_arch);
-      if (grub_file_seek (macho->file, sizeof (struct grub_macho_fat_header))
-	  == (grub_off_t) -1)
+      if (grub_file_seek (macho->file, sizeof (struct grub_macho_fat_header)) !=
+	  GRUB_ERR_NONE)
 	goto fail;
       archs = grub_malloc (sizeof (struct grub_macho_fat_arch) * narchs);
       if (!archs)
diff --git a/loader/xnu_resume.c b/loader/xnu_resume.c
index 77f6887..998e61e 100644
--- a/loader/xnu_resume.c
+++ b/loader/xnu_resume.c
@@ -103,7 +103,7 @@ grub_xnu_resume (char *imagename)
     }
 
   /* Read image. */
-  if (grub_file_seek (file, 0) == (grub_off_t)-1
+  if (grub_file_seek (file, 0) != GRUB_ERR_NONE
       || grub_file_read (file, buf, hibhead.image_size)
       != (grub_ssize_t) hibhead.image_size)
     {



  parent reply	other threads:[~2009-07-22  3:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-22  3:16 [PATCH 1/4] Handle errors in rmmod Pavel Roskin
2009-07-22  3:16 ` [PATCH 2/4] Fix insmod not to increase refcount above 1 Pavel Roskin
2009-07-22  3:16 ` Pavel Roskin [this message]
2009-07-23  8:23   ` [PATCH 3/4] Change grub_file_seek() to return grub_err_t Vladimir 'phcoder' Serbinenko
2009-07-23 19:14     ` Pavel Roskin
2009-07-22  3:16 ` [PATCH 4/4] Fix ALIGN_UP cutting upper bits Pavel Roskin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090722031653.6348.21972.stgit@mj.roinet.com \
    --to=proski@gnu.org \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.