Local copy of the FatFileSystem.

Dependents:   SimpleWaveRecorderPlayer y_CameraC1098_ES_01 _test_SDHCFileSystem Application-SimpleWaveRecorderPlayerGenerator ... more

Committer:
shintamainjp
Date:
Sat Apr 14 02:24:08 2012 +0000
Revision:
0:8c55801ce311
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:8c55801ce311 1 /* mbed Microcontroller Library - FATDirHandle
shintamainjp 0:8c55801ce311 2 * Copyright (c) 2008, sford
shintamainjp 0:8c55801ce311 3 */
shintamainjp 0:8c55801ce311 4
shintamainjp 0:8c55801ce311 5 #include <stdio.h>
shintamainjp 0:8c55801ce311 6 #include <stdlib.h>
shintamainjp 0:8c55801ce311 7 #include <string.h>
shintamainjp 0:8c55801ce311 8 #include "ff.h"
shintamainjp 0:8c55801ce311 9 #include "FATDirHandle.h"
shintamainjp 0:8c55801ce311 10 #include "FATFileSystem.h"
shintamainjp 0:8c55801ce311 11
shintamainjp 0:8c55801ce311 12 namespace mbed {
shintamainjp 0:8c55801ce311 13
shintamainjp 0:8c55801ce311 14 FATDirHandle::FATDirHandle(const FATFS_DIR &the_dir) {
shintamainjp 0:8c55801ce311 15 dir = the_dir;
shintamainjp 0:8c55801ce311 16 }
shintamainjp 0:8c55801ce311 17
shintamainjp 0:8c55801ce311 18 int FATDirHandle::closedir() {
shintamainjp 0:8c55801ce311 19 delete this;
shintamainjp 0:8c55801ce311 20 return 0;
shintamainjp 0:8c55801ce311 21 }
shintamainjp 0:8c55801ce311 22
shintamainjp 0:8c55801ce311 23 struct dirent *FATDirHandle::readdir() {
shintamainjp 0:8c55801ce311 24 FILINFO finfo;
shintamainjp 0:8c55801ce311 25
shintamainjp 0:8c55801ce311 26 #if _USE_LFN
shintamainjp 0:8c55801ce311 27 finfo.lfname = cur_entry.d_name;
shintamainjp 0:8c55801ce311 28 finfo.lfsize = sizeof(cur_entry.d_name);
shintamainjp 0:8c55801ce311 29 #endif // _USE_LFN
shintamainjp 0:8c55801ce311 30
shintamainjp 0:8c55801ce311 31 FRESULT res = f_readdir(&dir, &finfo);
shintamainjp 0:8c55801ce311 32
shintamainjp 0:8c55801ce311 33 #if _USE_LFN
shintamainjp 0:8c55801ce311 34 if(res != 0 || finfo.fname[0]==0) {
shintamainjp 0:8c55801ce311 35 return NULL;
shintamainjp 0:8c55801ce311 36 } else {
shintamainjp 0:8c55801ce311 37 if(cur_entry.d_name[0]==0) {
shintamainjp 0:8c55801ce311 38 // No long filename so use short filename.
shintamainjp 0:8c55801ce311 39 memcpy(cur_entry.d_name, finfo.fname, sizeof(finfo.fname));
shintamainjp 0:8c55801ce311 40 }
shintamainjp 0:8c55801ce311 41 return &cur_entry;
shintamainjp 0:8c55801ce311 42 }
shintamainjp 0:8c55801ce311 43 #else
shintamainjp 0:8c55801ce311 44 if(res != 0 || finfo.fname[0]==0) {
shintamainjp 0:8c55801ce311 45 return NULL;
shintamainjp 0:8c55801ce311 46 } else {
shintamainjp 0:8c55801ce311 47 memcpy(cur_entry.d_name, finfo.fname, sizeof(finfo.fname));
shintamainjp 0:8c55801ce311 48 return &cur_entry;
shintamainjp 0:8c55801ce311 49 }
shintamainjp 0:8c55801ce311 50 #endif /* _USE_LFN */
shintamainjp 0:8c55801ce311 51 }
shintamainjp 0:8c55801ce311 52
shintamainjp 0:8c55801ce311 53 void FATDirHandle::rewinddir() {
shintamainjp 0:8c55801ce311 54 dir.index = 0;
shintamainjp 0:8c55801ce311 55 }
shintamainjp 0:8c55801ce311 56
shintamainjp 0:8c55801ce311 57 off_t FATDirHandle::telldir() {
shintamainjp 0:8c55801ce311 58 return dir.index;
shintamainjp 0:8c55801ce311 59 }
shintamainjp 0:8c55801ce311 60
shintamainjp 0:8c55801ce311 61 void FATDirHandle::seekdir(off_t location) {
shintamainjp 0:8c55801ce311 62 dir.index = location;
shintamainjp 0:8c55801ce311 63 }
shintamainjp 0:8c55801ce311 64
shintamainjp 0:8c55801ce311 65 }
shintamainjp 0:8c55801ce311 66