diff options
Diffstat (limited to 'firmware/drivers/fat.c')
-rw-r--r-- | firmware/drivers/fat.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/firmware/drivers/fat.c b/firmware/drivers/fat.c index fe5cef878d..3eab47e8b3 100644 --- a/firmware/drivers/fat.c +++ b/firmware/drivers/fat.c | |||
@@ -860,6 +860,34 @@ int fat_read(struct bpb *bpb, | |||
860 | return sectorcount; | 860 | return sectorcount; |
861 | } | 861 | } |
862 | 862 | ||
863 | int fat_seek(struct bpb *bpb, | ||
864 | struct fat_fileent *ent, | ||
865 | int seeksector ) | ||
866 | { | ||
867 | int cluster = ent->firstcluster; | ||
868 | int sector; | ||
869 | int numsec = 0; | ||
870 | int i; | ||
871 | |||
872 | for (i=0; i<seeksector; i++) { | ||
873 | numsec++; | ||
874 | if ( numsec >= bpb->bpb_secperclus ) { | ||
875 | cluster = get_next_cluster(bpb,cluster); | ||
876 | if (!cluster) | ||
877 | /* end of file */ | ||
878 | return -1; | ||
879 | |||
880 | sector = cluster2sec(bpb,cluster); | ||
881 | if (sector<0) | ||
882 | return -2; | ||
883 | numsec=0; | ||
884 | } | ||
885 | } | ||
886 | ent->nextcluster = cluster; | ||
887 | ent->nextsector = sector; | ||
888 | ent->sectornum = numsec; | ||
889 | return 0; | ||
890 | } | ||
863 | 891 | ||
864 | int fat_opendir(struct bpb *bpb, | 892 | int fat_opendir(struct bpb *bpb, |
865 | struct fat_dirent *ent, | 893 | struct fat_dirent *ent, |