All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Roskin <proski@gnu.org>
To: grub-devel@gnu.org
Subject: [PATCH] Fix warning in fs/xfs.c
Date: Tue, 01 Jul 2008 20:10:46 -0400	[thread overview]
Message-ID: <20080702001046.7554.37059.stgit@dv.roinet.com> (raw)

ChangeLog:
	* fs/xfs.c (struct grub_xfs_dir_header): Use names similar to
	those in Linux XFS code.  Provide a way to access 64-bit parent
	inode.
	(grub_xfs_iterate_dir): Use the new names.  Avoid reading past
	the end of struct grub_xfs_dir_header.
---

 fs/xfs.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/fs/xfs.c b/fs/xfs.c
index 54d8031..7da3e40 100644
--- a/fs/xfs.c
+++ b/fs/xfs.c
@@ -55,9 +55,13 @@ struct grub_xfs_sblock
 
 struct grub_xfs_dir_header
 {
-  grub_uint8_t entries;
-  grub_uint8_t smallino;
-  grub_uint32_t parent;
+  grub_uint8_t count;
+  grub_uint8_t i8count;
+  union
+  {
+    grub_uint32_t i4;
+    grub_uint64_t i8;
+  } parent __attribute__ ((packed));
 } __attribute__ ((packed));
 
 struct grub_xfs_dir_entry
@@ -419,7 +423,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
     case XFS_INODE_FORMAT_INO:
       {
 	struct grub_xfs_dir_entry *de = &diro->inode.data.dir.direntry[0];
-	int smallino = !diro->inode.data.dir.dirhead.smallino;
+	int smallino = !diro->inode.data.dir.dirhead.i8count;
 	int i;
 	grub_uint64_t parent;
 
@@ -427,12 +431,12 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
 	   parent inode number is small too.  */
 	if (smallino)
 	  {
-	    parent = grub_be_to_cpu32 (diro->inode.data.dir.dirhead.parent);
+	    parent = grub_be_to_cpu32 (diro->inode.data.dir.dirhead.parent.i4);
 	    parent = grub_cpu_to_be64 (parent);
 	  }
 	else
 	  {
-	    parent = *(grub_uint64_t *) &diro->inode.data.dir.dirhead.parent;
+	    parent = diro->inode.data.dir.dirhead.parent.i8;
 	    /* The header is a bit bigger than usual.  */
 	    de = (struct grub_xfs_dir_entry *) ((char *) de + 4);
 	  }
@@ -444,7 +448,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
 	if (call_hook (parent, ".."))
 	  return 1;
 
-	for (i = 0; i < diro->inode.data.dir.dirhead.entries; i++)
+	for (i = 0; i < diro->inode.data.dir.dirhead.count; i++)
 	  {
 	    grub_uint64_t ino;
 	    void *inopos = (((char *) de)



             reply	other threads:[~2008-07-02  0:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-02  0:10 Pavel Roskin [this message]
2008-07-03 18:21 ` [PATCH] Fix warning in fs/xfs.c Marco Gerards
2008-07-03 18:48   ` Pavel Roskin
2008-07-20 18:50     ` Marco Gerards
2008-07-20 20:28       ` Pavel Roskin
2008-07-21 21:40       ` Cesare Leonardi

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=20080702001046.7554.37059.stgit@dv.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.