diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2002-04-27 20:03:05 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2002-04-27 20:03:05 +0000 |
| commit | 0ea9f3772ae6d398225bd17ce115a9452e888773 (patch) | |
| tree | 5695d71d1d3aaaaf55ae0636689eedbd0006294d | |
| parent | 9a3c16dea87f6f46f15ff732998e61310908dc7e (diff) | |
| download | rockbox-0ea9f3772ae6d398225bd17ce115a9452e888773.zip rockbox-0ea9f3772ae6d398225bd17ce115a9452e888773.tar.gz rockbox-0ea9f3772ae6d398225bd17ce115a9452e888773.tar.bz2 rockbox-0ea9f3772ae6d398225bd17ce115a9452e888773.tar.xz | |
Added fat_seek()
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@271 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/drivers/fat.c | 28 | ||||
| -rw-r--r-- | firmware/drivers/fat.h | 3 |
2 files changed, 31 insertions, 0 deletions
diff --git a/firmware/drivers/fat.c b/firmware/drivers/fat.c index fe5cef8..3eab47e 100644 --- a/firmware/drivers/fat.c +++ b/firmware/drivers/fat.c @@ -860,6 +860,34 @@ int fat_read(struct bpb *bpb, return sectorcount; } +int fat_seek(struct bpb *bpb, + struct fat_fileent *ent, + int seeksector ) +{ + int cluster = ent->firstcluster; + int sector; + int numsec = 0; + int i; + + for (i=0; i<seeksector; i++) { + numsec++; + if ( numsec >= bpb->bpb_secperclus ) { + cluster = get_next_cluster(bpb,cluster); + if (!cluster) + /* end of file */ + return -1; + + sector = cluster2sec(bpb,cluster); + if (sector<0) + return -2; + numsec=0; + } + } + ent->nextcluster = cluster; + ent->nextsector = sector; + ent->sectornum = numsec; + return 0; +} int fat_opendir(struct bpb *bpb, struct fat_dirent *ent, diff --git a/firmware/drivers/fat.h b/firmware/drivers/fat.h index a7c73c5..e259255 100644 --- a/firmware/drivers/fat.h +++ b/firmware/drivers/fat.h @@ -115,6 +115,9 @@ extern int fat_read(struct bpb *bpb, struct fat_fileent *ent, int sectorcount, void* buf ); +extern int fat_seek(struct bpb *bpb, + struct fat_fileent *ent, + int sector ); extern int fat_opendir(struct bpb *bpb, struct fat_dirent *ent, |