[U-Boot] [PATCH 10/10] fs: make the static array to dynamic allocation

Andy Fleming afleming at freescale.com
Thu Oct 30 23:35:39 CET 2008


From: Dave Liu <daveliu at freescale.com>

Current fat.c have three 64KB static array, it makes the BSS section larger.
Change the static to dynamic allocation.

Signed-off-by: Dave Liu <daveliu at freescale.com>
---
 fs/fat/fat.c |   38 +++++++++++++++++++++++++++++++++++---
 1 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 2f0bd8c..e3563aa 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -28,6 +28,7 @@
 #include <common.h>
 #include <config.h>
 #include <fat.h>
+#include <malloc.h>
 #include <asm/byteorder.h>
 #include <part.h>
 
@@ -63,6 +64,37 @@ int disk_read (__u32 startblock, __u32 getsize, __u8 * bufptr)
 	return -1;
 }
 
+__u8 *get_vfatname_block;
+__u8 *get_dentfromdir_block;
+__u8 *do_fat_read_block;
+static int fat_mem_done = 0;
+static int fat_memory_alloc(void)
+{
+	if (fat_mem_done)
+		return 0;
+
+	get_vfatname_block = (__u8 *)malloc(MAX_CLUSTSIZE);
+	if (!get_vfatname_block) {
+		printf("alloc get_vfatname_block failed\n\r");
+		return -1;
+	}
+
+	get_dentfromdir_block = (__u8 *)malloc(MAX_CLUSTSIZE);
+	if (!get_dentfromdir_block) {
+		printf("alloc get_dentfromdir_block failed\n\r");
+		return -1;
+	}
+
+	do_fat_read_block = (__u8 *)malloc(MAX_CLUSTSIZE);
+	if (!do_fat_read_block) {
+		printf("alloc do_fat_read_block failed\n\r");
+		return -1;
+	}
+
+	fat_mem_done = 1;
+
+	return 0;
+}
 
 int
 fat_register_device(block_dev_desc_t *dev_desc, int part_no)
@@ -70,6 +102,9 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)
 	unsigned char buffer[SECTOR_SIZE];
 	disk_partition_t info;
 
+	if (fat_memory_alloc())
+		printf("fat memory alloc failed\n\r");
+
 	if (!dev_desc->block_read)
 		return -1;
 	cur_dev = dev_desc;
@@ -433,7 +468,6 @@ slot2str(dir_slot *slotptr, char *l_name, int *idx)
  * into 'retdent'
  * Return 0 on success, -1 otherwise.
  */
-__u8	 get_vfatname_block[MAX_CLUSTSIZE];
 static int
 get_vfatname(fsdata *mydata, int curclust, __u8 *cluster,
 	     dir_entry *retdent, char *l_name)
@@ -519,7 +553,6 @@ mkcksum(const char *str)
  * Get the directory entry associated with 'filename' from the directory
  * starting at 'startsect'
  */
-__u8 get_dentfromdir_block[MAX_CLUSTSIZE];
 static dir_entry *get_dentfromdir (fsdata * mydata, int startsect,
 				   char *filename, dir_entry * retdent,
 				   int dols)
@@ -725,7 +758,6 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int *fatsize)
 }
 
 
-__u8 do_fat_read_block[MAX_CLUSTSIZE];  /* Block buffer */
 long
 do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
 	     int dols)
-- 
1.5.4.GIT



More information about the U-Boot mailing list