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:
18
fs/fat/fat.c
18
fs/fat/fat.c
@@ -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)
|
||||||
|
2
fs/fs.c
2
fs/fs.c
@@ -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,
|
||||||
},
|
},
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user