fs/fat: Big code cleanup.

- reformat
- throw out macros like FAT_DPRINT and FAT_DPRINT
- remove dead code

Signed-off-by: Wolfgang Denk <wd@denx.de>
master
Wolfgang Denk 14 years ago
parent 226fa9bb9e
commit 7385c28e9b
  1. 210
      common/cmd_fat.c
  2. 1165
      fs/fat/fat.c
  3. 14
      fs/fat/file.c
  4. 63
      include/fat.h

@ -45,39 +45,43 @@ int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
char *ep; char *ep;
if (argc < 5) { if (argc < 5) {
printf ("usage: fatload <interface> <dev[:part]> <addr> <filename> [bytes]\n"); printf( "usage: fatload <interface> <dev[:part]> "
"<addr> <filename> [bytes]\n");
return 1; return 1;
} }
dev = (int)simple_strtoul (argv[2], &ep, 16);
dev_desc=get_dev(argv[1],dev); dev = (int)simple_strtoul(argv[2], &ep, 16);
if (dev_desc==NULL) { dev_desc = get_dev(argv[1],dev);
puts ("\n** Invalid boot device **\n"); if (dev_desc == NULL) {
puts("\n** Invalid boot device **\n");
return 1; return 1;
} }
if (*ep) { if (*ep) {
if (*ep != ':') { if (*ep != ':') {
puts ("\n** Invalid boot device, use `dev[:part]' **\n"); puts("\n** Invalid boot device, use `dev[:part]' **\n");
return 1; return 1;
} }
part = (int)simple_strtoul(++ep, NULL, 16); part = (int)simple_strtoul(++ep, NULL, 16);
} }
if (fat_register_device(dev_desc,part)!=0) { if (fat_register_device(dev_desc,part)!=0) {
printf ("\n** Unable to use %s %d:%d for fatload **\n",argv[1],dev,part); printf("\n** Unable to use %s %d:%d for fatload **\n",
argv[1], dev, part);
return 1; return 1;
} }
offset = simple_strtoul (argv[3], NULL, 16); offset = simple_strtoul(argv[3], NULL, 16);
if (argc == 6) if (argc == 6)
count = simple_strtoul (argv[5], NULL, 16); count = simple_strtoul(argv[5], NULL, 16);
else else
count = 0; count = 0;
size = file_fat_read (argv[4], (unsigned char *) offset, count); size = file_fat_read(argv[4], (unsigned char *)offset, count);
if(size==-1) { if(size==-1) {
printf("\n** Unable to read \"%s\" from %s %d:%d **\n",argv[4],argv[1],dev,part); printf("\n** Unable to read \"%s\" from %s %d:%d **\n",
argv[4], argv[1], dev, part);
return 1; return 1;
} }
printf ("\n%ld bytes read\n", size); printf("\n%ld bytes read\n", size);
sprintf(buf, "%lX", size); sprintf(buf, "%lX", size);
setenv("filesize", buf); setenv("filesize", buf);
@ -104,34 +108,35 @@ int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
block_dev_desc_t *dev_desc=NULL; block_dev_desc_t *dev_desc=NULL;
if (argc < 3) { if (argc < 3) {
printf ("usage: fatls <interface> <dev[:part]> [directory]\n"); printf("usage: fatls <interface> <dev[:part]> [directory]\n");
return (0); return 0;
} }
dev = (int)simple_strtoul (argv[2], &ep, 16); dev = (int)simple_strtoul(argv[2], &ep, 16);
dev_desc=get_dev(argv[1],dev); dev_desc = get_dev(argv[1],dev);
if (dev_desc==NULL) { if (dev_desc == NULL) {
puts ("\n** Invalid boot device **\n"); puts("\n** Invalid boot device **\n");
return 1; return 1;
} }
if (*ep) { if (*ep) {
if (*ep != ':') { if (*ep != ':') {
puts ("\n** Invalid boot device, use `dev[:part]' **\n"); puts("\n** Invalid boot device, use `dev[:part]' **\n");
return 1; return 1;
} }
part = (int)simple_strtoul(++ep, NULL, 16); part = (int)simple_strtoul(++ep, NULL, 16);
} }
if (fat_register_device(dev_desc,part)!=0) { if (fat_register_device(dev_desc,part)!=0) {
printf ("\n** Unable to use %s %d:%d for fatls **\n",argv[1],dev,part); printf("\n** Unable to use %s %d:%d for fatls **\n",
argv[1], dev, part);
return 1; return 1;
} }
if (argc == 4) if (argc == 4)
ret = file_fat_ls (argv[3]); ret = file_fat_ls(argv[3]);
else else
ret = file_fat_ls (filename); ret = file_fat_ls(filename);
if(ret!=0) if(ret!=0)
printf("No Fat FS detected\n"); printf("No Fat FS detected\n");
return (ret); return ret;
} }
U_BOOT_CMD( U_BOOT_CMD(
@ -149,27 +154,28 @@ int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
block_dev_desc_t *dev_desc=NULL; block_dev_desc_t *dev_desc=NULL;
if (argc < 2) { if (argc < 2) {
printf ("usage: fatinfo <interface> <dev[:part]>\n"); printf("usage: fatinfo <interface> <dev[:part]>\n");
return (0); return 0;
} }
dev = (int)simple_strtoul (argv[2], &ep, 16); dev = (int)simple_strtoul(argv[2], &ep, 16);
dev_desc=get_dev(argv[1],dev); dev_desc = get_dev(argv[1],dev);
if (dev_desc==NULL) { if (dev_desc == NULL) {
puts ("\n** Invalid boot device **\n"); puts("\n** Invalid boot device **\n");
return 1; return 1;
} }
if (*ep) { if (*ep) {
if (*ep != ':') { if (*ep != ':') {
puts ("\n** Invalid boot device, use `dev[:part]' **\n"); puts("\n** Invalid boot device, use `dev[:part]' **\n");
return 1; return 1;
} }
part = (int)simple_strtoul(++ep, NULL, 16); part = (int)simple_strtoul(++ep, NULL, 16);
} }
if (fat_register_device(dev_desc,part)!=0) { if (fat_register_device(dev_desc,part)!=0) {
printf ("\n** Unable to use %s %d:%d for fatinfo **\n",argv[1],dev,part); printf("\n** Unable to use %s %d:%d for fatinfo **\n",
argv[1], dev, part);
return 1; return 1;
} }
return (file_fat_detectfs ()); return file_fat_detectfs();
} }
U_BOOT_CMD( U_BOOT_CMD(
@ -178,143 +184,3 @@ U_BOOT_CMD(
"<interface> <dev[:part]>\n" "<interface> <dev[:part]>\n"
" - print information about filesystem from 'dev' on 'interface'" " - print information about filesystem from 'dev' on 'interface'"
); );
#ifdef NOT_IMPLEMENTED_YET
/* find first device whose first partition is a DOS filesystem */
int find_fat_partition (void)
{
int i, j;
block_dev_desc_t *dev_desc;
unsigned char *part_table;
unsigned char buffer[ATA_BLOCKSIZE];
for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
dev_desc = ide_get_dev (i);
if (!dev_desc) {
debug ("couldn't get ide device!\n");
return (-1);
}
if (dev_desc->part_type == PART_TYPE_DOS) {
if (dev_desc->
block_read (dev_desc->dev, 0, 1, (ulong *) buffer) != 1) {
debug ("can't perform block_read!\n");
return (-1);
}
part_table = &buffer[0x1be]; /* start with partition #4 */
for (j = 0; j < 4; j++) {
if ((part_table[4] == 1 || /* 12-bit FAT */
part_table[4] == 4 || /* 16-bit FAT */
part_table[4] == 6) && /* > 32Meg part */
part_table[0] == 0x80) { /* bootable? */
curr_dev = i;
part_offset = part_table[11];
part_offset <<= 8;
part_offset |= part_table[10];
part_offset <<= 8;
part_offset |= part_table[9];
part_offset <<= 8;
part_offset |= part_table[8];
debug ("found partition start at %ld\n", part_offset);
return (0);
}
part_table += 16;
}
}
}
debug ("no valid devices found!\n");
return (-1);
}
int
do_fat_dump (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char * const argv[])
{
__u8 block[1024];
int ret;
int bknum;
ret = 0;
if (argc != 2) {
printf ("needs an argument!\n");
return (0);
}
bknum = simple_strtoul (argv[1], NULL, 10);
if (disk_read (0, bknum, block) != 0) {
printf ("Error: reading block\n");
return -1;
}
printf ("FAT dump: %d\n", bknum);
hexdump (512, block);
return (ret);
}
int disk_read (__u32 startblock, __u32 getsize, __u8 *bufptr)
{
ulong tot;
block_dev_desc_t *dev_desc;
if (curr_dev < 0) {
if (find_fat_partition () != 0)
return (-1);
}
dev_desc = ide_get_dev (curr_dev);
if (!dev_desc) {
debug ("couldn't get ide device\n");
return (-1);
}
tot = dev_desc->block_read (0, startblock + part_offset,
getsize, (ulong *) bufptr);
/* should we do this here?
flush_cache ((ulong)buf, cnt*ide_dev_desc[device].blksz);
*/
if (tot == getsize)
return (0);
debug ("unable to read from device!\n");
return (-1);
}
static int isprint (unsigned char ch)
{
if (ch >= 32 && ch < 127)
return (1);
return (0);
}
void hexdump (int cnt, unsigned char *data)
{
int i;
int run;
int offset;
offset = 0;
while (cnt) {
printf ("%04X : ", offset);
if (cnt >= 16)
run = 16;
else
run = cnt;
cnt -= run;
for (i = 0; i < run; i++)
printf ("%02X ", (unsigned int) data[i]);
printf (": ");
for (i = 0; i < run; i++)
printf ("%c", isprint (data[i]) ? data[i] : '.');
printf ("\n");
data = &data[16];
offset += run;
}
}
#endif /* NOT_IMPLEMENTED_YET */

File diff suppressed because it is too large Load Diff

@ -48,12 +48,12 @@ char file_cwd[CWD_LEN+1] = "/";
const char * const char *
file_getfsname(int idx) file_getfsname(int idx)
{ {
if (idx < 0 || idx >= NUM_FILESYS) return NULL; if (idx < 0 || idx >= NUM_FILESYS)
return NULL;
return filesystems[idx].name; return filesystems[idx].name;
} }
static void static void
pathcpy(char *dest, const char *src) pathcpy(char *dest, const char *src)
{ {
@ -72,15 +72,14 @@ pathcpy(char *dest, const char *src)
return; return;
} }
++dest; ++dest;
if (ISDIRDELIM(*src)) {
if (ISDIRDELIM(*src))
while (ISDIRDELIM(*src)) src++; while (ISDIRDELIM(*src)) src++;
} else { else
src++; src++;
}
} while (1); } while (1);
} }
int int
file_cd(const char *path) file_cd(const char *path)
{ {
@ -141,7 +140,6 @@ file_cd(const char *path)
return 0; return 0;
} }
int int
file_detectfs(void) file_detectfs(void)
{ {
@ -160,7 +158,6 @@ file_detectfs(void)
return current_filesystem; return current_filesystem;
} }
int int
file_ls(const char *dir) file_ls(const char *dir)
{ {
@ -181,7 +178,6 @@ file_ls(const char *dir)
return filesystems[current_filesystem].ls(arg); return filesystems[current_filesystem].ls(arg);
} }
long long
file_read(const char *filename, void *buffer, unsigned long maxsize) file_read(const char *filename, void *buffer, unsigned long maxsize)
{ {

@ -33,7 +33,7 @@
#define SECTOR_SIZE FS_BLOCK_SIZE #define SECTOR_SIZE FS_BLOCK_SIZE
#define FS_BLOCK_SIZE 512 #define FS_BLOCK_SIZE 512
#if FS_BLOCK_SIZE != SECTOR_SIZE #if FS_BLOCK_SIZE != SECTOR_SIZE
#error FS_BLOCK_SIZE != SECTOR_SIZE - This code needs to be fixed! #error FS_BLOCK_SIZE != SECTOR_SIZE - This code needs to be fixed!
@ -57,37 +57,31 @@
#define SIGNLEN 8 #define SIGNLEN 8
/* File attributes */ /* File attributes */
#define ATTR_RO 1 #define ATTR_RO 1
#define ATTR_HIDDEN 2 #define ATTR_HIDDEN 2
#define ATTR_SYS 4 #define ATTR_SYS 4
#define ATTR_VOLUME 8 #define ATTR_VOLUME 8
#define ATTR_DIR 16 #define ATTR_DIR 16
#define ATTR_ARCH 32 #define ATTR_ARCH 32
#define ATTR_VFAT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) #define ATTR_VFAT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME)
#define DELETED_FLAG ((char)0xe5) /* Marks deleted files when in name[0] */ #define DELETED_FLAG ((char)0xe5) /* Marks deleted files when in name[0] */
#define aRING 0x05 /* Used as special character in name[0] */ #define aRING 0x05 /* Used as special character in name[0] */
/* Indicates that the entry is the last long entry in a set of long /*
* Indicates that the entry is the last long entry in a set of long
* dir entries * dir entries
*/ */
#define LAST_LONG_ENTRY_MASK 0x40 #define LAST_LONG_ENTRY_MASK 0x40
/* Flags telling whether we should read a file or list a directory */ /* Flags telling whether we should read a file or list a directory */
#define LS_NO 0 #define LS_NO 0
#define LS_YES 1 #define LS_YES 1
#define LS_DIR 1 #define LS_DIR 1
#define LS_ROOT 2 #define LS_ROOT 2
#ifdef DEBUG #define ISDIRDELIM(c) ((c) == '/' || (c) == '\\')
#define FAT_DPRINT(args...) printf(args)
#else
#define FAT_DPRINT(args...)
#endif
#define FAT_ERROR(arg) printf(arg)
#define ISDIRDELIM(c) ((c) == '/' || (c) == '\\')
#define FSTYPE_NONE (-1) #define FSTYPE_NONE (-1)
@ -166,17 +160,18 @@ typedef struct dir_entry {
} dir_entry; } dir_entry;
typedef struct dir_slot { typedef struct dir_slot {
__u8 id; /* Sequence number for slot */ __u8 id; /* Sequence number for slot */
__u8 name0_4[10]; /* First 5 characters in name */ __u8 name0_4[10]; /* First 5 characters in name */
__u8 attr; /* Attribute byte */ __u8 attr; /* Attribute byte */
__u8 reserved; /* Unused */ __u8 reserved; /* Unused */
__u8 alias_checksum;/* Checksum for 8.3 alias */ __u8 alias_checksum;/* Checksum for 8.3 alias */
__u8 name5_10[12]; /* 6 more characters in name */ __u8 name5_10[12]; /* 6 more characters in name */
__u16 start; /* Unused */ __u16 start; /* Unused */
__u8 name11_12[4]; /* Last 2 characters in name */ __u8 name11_12[4]; /* Last 2 characters in name */
} dir_slot; } dir_slot;
/* Private filesystem parameters /*
* Private filesystem parameters
* *
* Note: FAT buffer has to be 32 bit aligned * Note: FAT buffer has to be 32 bit aligned
* (see FAT32 accesses) * (see FAT32 accesses)
@ -198,10 +193,10 @@ typedef long (file_read_func)(const char *filename, void *buffer,
unsigned long maxsize); unsigned long maxsize);
struct filesystem { struct filesystem {
file_detectfs_func *detect; file_detectfs_func *detect;
file_ls_func *ls; file_ls_func *ls;
file_read_func *read; file_read_func *read;
const char name[12]; const char name[12];
}; };
/* FAT tables */ /* FAT tables */

Loading…
Cancel
Save