[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