1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 08:42:12 +02:00

fat: implement exists() for FAT fs

This hooks into the generic "file exists" support added in an earlier
patch, and provides an implementation for the FAT filesystem.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Stephen Warren
2014-02-03 13:21:10 -07:00
committed by Tom Rini
parent 55af5c9313
commit b7b5f3195f
3 changed files with 16 additions and 5 deletions

View File

@@ -808,7 +808,7 @@ __u8 do_fat_read_at_block[MAX_CLUSTSIZE]
long long
do_fat_read_at(const char *filename, unsigned long pos, void *buffer, do_fat_read_at(const char *filename, unsigned long pos, void *buffer,
unsigned long maxsize, int dols) unsigned long maxsize, int dols, int dogetsize)
{ {
char fnamecopy[2048]; char fnamecopy[2048];
boot_sector bs; boot_sector bs;
@@ -1152,7 +1152,10 @@ rootdir_done:
subname = nextname; subname = nextname;
} }
ret = get_contents(mydata, dentptr, pos, buffer, maxsize); if (dogetsize)
ret = FAT2CPU32(dentptr->size);
else
ret = get_contents(mydata, dentptr, pos, buffer, maxsize);
debug("Size: %d, got: %ld\n", FAT2CPU32(dentptr->size), ret); debug("Size: %d, got: %ld\n", FAT2CPU32(dentptr->size), ret);
exit: exit:
@@ -1163,7 +1166,7 @@ exit:
long long
do_fat_read(const char *filename, void *buffer, unsigned long maxsize, int dols) do_fat_read(const char *filename, void *buffer, unsigned long maxsize, int dols)
{ {
return do_fat_read_at(filename, 0, buffer, maxsize, dols); return do_fat_read_at(filename, 0, buffer, maxsize, dols, 0);
} }
int file_fat_detectfs(void) int file_fat_detectfs(void)
@@ -1233,11 +1236,18 @@ int file_fat_ls(const char *dir)
return do_fat_read(dir, NULL, 0, LS_YES); return do_fat_read(dir, NULL, 0, LS_YES);
} }
int fat_exists(const char *filename)
{
int sz;
sz = do_fat_read_at(filename, 0, NULL, 0, LS_NO, 1);
return sz >= 0;
}
long file_fat_read_at(const char *filename, unsigned long pos, void *buffer, long file_fat_read_at(const char *filename, unsigned long pos, void *buffer,
unsigned long maxsize) unsigned long maxsize)
{ {
printf("reading %s\n", filename); printf("reading %s\n", filename);
return do_fat_read_at(filename, pos, buffer, maxsize, LS_NO); return do_fat_read_at(filename, pos, buffer, maxsize, LS_NO, 0);
} }
long file_fat_read(const char *filename, void *buffer, unsigned long maxsize) long file_fat_read(const char *filename, void *buffer, unsigned long maxsize)

View File

@@ -90,7 +90,7 @@ static struct fstype_info fstypes[] = {
.probe = fat_set_blk_dev, .probe = fat_set_blk_dev,
.close = fat_close, .close = fat_close,
.ls = file_fat_ls, .ls = file_fat_ls,
.exists = fs_exists_unsupported, .exists = fat_exists,
.read = fat_read_file, .read = fat_read_file,
.write = fs_write_unsupported, .write = fs_write_unsupported,
}, },

View File

@@ -188,6 +188,7 @@ file_read_func file_fat_read;
int file_cd(const char *path); int file_cd(const char *path);
int file_fat_detectfs(void); int file_fat_detectfs(void);
int file_fat_ls(const char *dir); int file_fat_ls(const char *dir);
int fat_exists(const char *filename);
long file_fat_read_at(const char *filename, unsigned long pos, void *buffer, long file_fat_read_at(const char *filename, unsigned long pos, void *buffer,
unsigned long maxsize); unsigned long maxsize);
long file_fat_read(const char *filename, void *buffer, unsigned long maxsize); long file_fat_read(const char *filename, void *buffer, unsigned long maxsize);