hattori&ide

Dependencies:   mbed

Committer:
hattori_atsushi
Date:
Sun Dec 18 08:16:01 2022 +0000
Revision:
0:f77369cabd75
hattori

Who changed what in which revision?

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