a5bd9f6
From f360e6e4d10c7f304127c50e03fd1c84c226f65e Mon Sep 17 00:00:00 2001
a5bd9f6
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
a5bd9f6
Date: Thu, 28 Feb 2013 10:51:32 +0100
a5bd9f6
Subject: [PATCH 167/364] 	* grub-core/fs/jfs.c: Remove nested functions.
a5bd9f6
a5bd9f6
---
a5bd9f6
 ChangeLog          |   4 ++
a5bd9f6
 grub-core/fs/jfs.c | 113 +++++++++++++++++++++++++++--------------------------
a5bd9f6
 2 files changed, 61 insertions(+), 56 deletions(-)
a5bd9f6
a5bd9f6
diff --git a/ChangeLog b/ChangeLog
a5bd9f6
index 056de9d..6601c42 100644
a5bd9f6
--- a/ChangeLog
a5bd9f6
+++ b/ChangeLog
a5bd9f6
@@ -1,5 +1,9 @@
a5bd9f6
 2013-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
 
a5bd9f6
+	* grub-core/fs/jfs.c: Remove nested functions.
a5bd9f6
+
a5bd9f6
+2013-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
+
a5bd9f6
 	* grub-core/fs/minix.c: Remove nested functions.
a5bd9f6
 
a5bd9f6
 2013-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c
a5bd9f6
index 88b21ad..4122eff 100644
a5bd9f6
--- a/grub-core/fs/jfs.c
a5bd9f6
+++ b/grub-core/fs/jfs.c
a5bd9f6
@@ -255,60 +255,60 @@ static grub_dl_t my_mod;
a5bd9f6
 
a5bd9f6
 static grub_err_t grub_jfs_lookup_symlink (struct grub_jfs_data *data, grub_uint32_t ino);
a5bd9f6
 
a5bd9f6
-/* Get the block number for the block BLK in the node INODE in the
a5bd9f6
-   mounted filesystem DATA.  */
a5bd9f6
 static grub_int64_t
a5bd9f6
-grub_jfs_blkno (struct grub_jfs_data *data, struct grub_jfs_inode *inode,
a5bd9f6
-		grub_uint64_t blk)
a5bd9f6
+getblk (struct grub_jfs_treehead *treehead,
a5bd9f6
+	struct grub_jfs_tree_extent *extents,
a5bd9f6
+	struct grub_jfs_data *data,
a5bd9f6
+	grub_uint64_t blk)
a5bd9f6
 {
a5bd9f6
-  auto grub_int64_t getblk (struct grub_jfs_treehead *treehead,
a5bd9f6
-			    struct grub_jfs_tree_extent *extents);
a5bd9f6
+  int found = -1;
a5bd9f6
+  int i;
a5bd9f6
 
a5bd9f6
-  grub_int64_t getblk (struct grub_jfs_treehead *treehead,
a5bd9f6
-		       struct grub_jfs_tree_extent *extents)
a5bd9f6
+  for (i = 0; i < grub_le_to_cpu16 (treehead->count) - 2; i++)
a5bd9f6
     {
a5bd9f6
-      int found = -1;
a5bd9f6
-      int i;
a5bd9f6
-
a5bd9f6
-      for (i = 0; i < grub_le_to_cpu16 (treehead->count) - 2; i++)
a5bd9f6
+      if (treehead->flags & GRUB_JFS_TREE_LEAF)
a5bd9f6
 	{
a5bd9f6
-	  if (treehead->flags & GRUB_JFS_TREE_LEAF)
a5bd9f6
-	    {
a5bd9f6
-	      /* Read the leafnode.  */
a5bd9f6
-	      if (grub_le_to_cpu32 (extents[i].offset2) <= blk
a5bd9f6
-		  && ((grub_le_to_cpu16 (extents[i].extent.length))
a5bd9f6
-		      + (extents[i].extent.length2 << 16)
a5bd9f6
-		      + grub_le_to_cpu32 (extents[i].offset2)) > blk)
a5bd9f6
-		return (blk - grub_le_to_cpu32 (extents[i].offset2)
a5bd9f6
-			+ grub_le_to_cpu32 (extents[i].extent.blk2));
a5bd9f6
-	    }
a5bd9f6
-	  else
a5bd9f6
-	    if (blk >= grub_le_to_cpu32 (extents[i].offset2))
a5bd9f6
-	      found = i;
a5bd9f6
+	  /* Read the leafnode.  */
a5bd9f6
+	  if (grub_le_to_cpu32 (extents[i].offset2) <= blk
a5bd9f6
+	      && ((grub_le_to_cpu16 (extents[i].extent.length))
a5bd9f6
+		  + (extents[i].extent.length2 << 16)
a5bd9f6
+		  + grub_le_to_cpu32 (extents[i].offset2)) > blk)
a5bd9f6
+	    return (blk - grub_le_to_cpu32 (extents[i].offset2)
a5bd9f6
+		    + grub_le_to_cpu32 (extents[i].extent.blk2));
a5bd9f6
 	}
a5bd9f6
+      else
a5bd9f6
+	if (blk >= grub_le_to_cpu32 (extents[i].offset2))
a5bd9f6
+	  found = i;
a5bd9f6
+    }
a5bd9f6
 
a5bd9f6
-      if (found != -1)
a5bd9f6
-	{
a5bd9f6
-	  struct
a5bd9f6
-	  {
a5bd9f6
-	    struct grub_jfs_treehead treehead;
a5bd9f6
-	    struct grub_jfs_tree_extent extents[254];
a5bd9f6
-	  } tree;
a5bd9f6
-
a5bd9f6
-	  if (grub_disk_read (data->disk,
a5bd9f6
-			      ((grub_disk_addr_t) grub_le_to_cpu32 (extents[found].extent.blk2))
a5bd9f6
-			      << (grub_le_to_cpu16 (data->sblock.log2_blksz)
a5bd9f6
-				  - GRUB_DISK_SECTOR_BITS), 0,
a5bd9f6
-			      sizeof (tree), (char *) &tree))
a5bd9f6
-	    return -1;
a5bd9f6
-
a5bd9f6
-	  return getblk (&tree.treehead, &tree.extents[0]);
a5bd9f6
-	}
a5bd9f6
+  if (found != -1)
a5bd9f6
+    {
a5bd9f6
+      struct
a5bd9f6
+      {
a5bd9f6
+	struct grub_jfs_treehead treehead;
a5bd9f6
+	struct grub_jfs_tree_extent extents[254];
a5bd9f6
+      } tree;
a5bd9f6
+
a5bd9f6
+      if (grub_disk_read (data->disk,
a5bd9f6
+			  ((grub_disk_addr_t) grub_le_to_cpu32 (extents[found].extent.blk2))
a5bd9f6
+			  << (grub_le_to_cpu16 (data->sblock.log2_blksz)
a5bd9f6
+			      - GRUB_DISK_SECTOR_BITS), 0,
a5bd9f6
+			  sizeof (tree), (char *) &tree))
a5bd9f6
+	return -1;
a5bd9f6
 
a5bd9f6
-      return -1;
a5bd9f6
+      return getblk (&tree.treehead, &tree.extents[0], data, blk);
a5bd9f6
     }
a5bd9f6
 
a5bd9f6
-  return getblk (&inode->file.tree, &inode->file.extents[0]);
a5bd9f6
+  return -1;
a5bd9f6
+}
a5bd9f6
+
a5bd9f6
+/* Get the block number for the block BLK in the node INODE in the
a5bd9f6
+   mounted filesystem DATA.  */
a5bd9f6
+static grub_int64_t
a5bd9f6
+grub_jfs_blkno (struct grub_jfs_data *data, struct grub_jfs_inode *inode,
a5bd9f6
+		grub_uint64_t blk)
a5bd9f6
+{
a5bd9f6
+  return getblk (&inode->file.tree, &inode->file.extents[0], data, blk);
a5bd9f6
 }
a5bd9f6
 
a5bd9f6
 
a5bd9f6
@@ -489,6 +489,13 @@ grub_jfs_closedir (struct grub_jfs_diropen *diro)
a5bd9f6
   grub_free (diro);
a5bd9f6
 }
a5bd9f6
 
a5bd9f6
+static void
a5bd9f6
+le_to_cpu16_copy (grub_uint16_t *out, grub_uint16_t *in, grub_size_t len)
a5bd9f6
+{
a5bd9f6
+  while (len--)
a5bd9f6
+    *out++ = grub_le_to_cpu16 (*in++);
a5bd9f6
+}
a5bd9f6
+
a5bd9f6
 
a5bd9f6
 /* Read in the next dirent from the directory described by DIRO.  */
a5bd9f6
 static grub_err_t
a5bd9f6
@@ -501,15 +508,6 @@ grub_jfs_getent (struct grub_jfs_diropen *diro)
a5bd9f6
   int nextent;
a5bd9f6
   grub_uint16_t filename[256];
a5bd9f6
 
a5bd9f6
-  auto void addstr (grub_uint16_t *uname, int ulen);
a5bd9f6
-
a5bd9f6
-  /* Add the unicode string to the utf16 filename buffer.  */
a5bd9f6
-  void addstr (grub_uint16_t *name, int ulen)
a5bd9f6
-    {
a5bd9f6
-      while (ulen--)
a5bd9f6
-	filename[strpos++] = grub_le_to_cpu16 (*(name++));
a5bd9f6
-    }
a5bd9f6
-
a5bd9f6
   /* The last node, read in more.  */
a5bd9f6
   if (diro->index == diro->count)
a5bd9f6
     {
a5bd9f6
@@ -547,8 +545,10 @@ grub_jfs_getent (struct grub_jfs_diropen *diro)
a5bd9f6
       return grub_jfs_getent (diro);
a5bd9f6
     }
a5bd9f6
 
a5bd9f6
-  addstr (leaf->namepart, len < diro->data->namecomponentlen ? len
a5bd9f6
-	  : diro->data->namecomponentlen);
a5bd9f6
+  le_to_cpu16_copy (filename + strpos, leaf->namepart, len < diro->data->namecomponentlen ? len
a5bd9f6
+		    : diro->data->namecomponentlen);
a5bd9f6
+  strpos += len < diro->data->namecomponentlen ? len
a5bd9f6
+    : diro->data->namecomponentlen;
a5bd9f6
   diro->ino = grub_le_to_cpu32 (leaf->inode);
a5bd9f6
   len -= diro->data->namecomponentlen;
a5bd9f6
 
a5bd9f6
@@ -558,7 +558,8 @@ grub_jfs_getent (struct grub_jfs_diropen *diro)
a5bd9f6
     do
a5bd9f6
       {
a5bd9f6
  	next_leaf = &diro->next_leaf[nextent];
a5bd9f6
-	addstr (next_leaf->namepart, len < 15 ? len : 15 );
a5bd9f6
+	le_to_cpu16_copy (filename + strpos, next_leaf->namepart, len < 15 ? len : 15);
a5bd9f6
+	strpos += len < 15 ? len : 15;
a5bd9f6
 
a5bd9f6
 	len -= 15;
a5bd9f6
 	nextent = next_leaf->next;
a5bd9f6
-- 
a5bd9f6
1.8.1.4
a5bd9f6