summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-04-27 20:03:05 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-04-27 20:03:05 +0000
commit0ea9f3772ae6d398225bd17ce115a9452e888773 (patch)
tree5695d71d1d3aaaaf55ae0636689eedbd0006294d
parent9a3c16dea87f6f46f15ff732998e61310908dc7e (diff)
downloadrockbox-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.c28
-rw-r--r--firmware/drivers/fat.h3
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,