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