mirror of https://github.com/ARMmbed/mbed-os.git
parent
7514476e2f
commit
9299a88e8f
|
@ -100,7 +100,15 @@ public:
|
|||
*/
|
||||
virtual int mkdir(const char *name, mode_t mode) { (void) name, (void) mode; return -1; }
|
||||
|
||||
// TODO other filesystem functions (mkdir, rm, rn, ls etc)
|
||||
/** Store information about file in stat structure
|
||||
*
|
||||
* @param name The name of the file to find information about
|
||||
* @param st The stat buffer to write to
|
||||
* @returns
|
||||
* 0 on success or un-needed,
|
||||
* -1 on error
|
||||
*/
|
||||
virtual int stat(const char *name, struct stat *st) = 0;
|
||||
};
|
||||
|
||||
} // namespace mbed
|
||||
|
|
|
@ -182,6 +182,28 @@ int FATFileSystem::mkdir(const char *name, mode_t mode) {
|
|||
return res == 0 ? 0 : -1;
|
||||
}
|
||||
|
||||
int FATFileSystem::stat(const char *name, struct stat *st) {
|
||||
lock();
|
||||
FILINFO f;
|
||||
memset(&f, 0, sizeof(f));
|
||||
|
||||
FRESULT res = f_stat(name, &f);
|
||||
if (res != 0) {
|
||||
unlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
st->st_size = f.fsize;
|
||||
st->st_mode = 0;
|
||||
st->st_mode |= (f.fattrib & AM_DIR) ? S_IFDIR : S_IFREG;
|
||||
st->st_mode |= (f.fattrib & AM_RDO) ?
|
||||
(S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) :
|
||||
(S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
|
||||
unlock();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FATFileSystem::mount() {
|
||||
lock();
|
||||
FRESULT res = f_mount(&_fs, _fsid, 1);
|
||||
|
|
|
@ -72,6 +72,11 @@ public:
|
|||
* Creates a directory path
|
||||
*/
|
||||
virtual int mkdir(const char *name, mode_t mode);
|
||||
|
||||
/**
|
||||
* Store information about file in stat structure
|
||||
*/
|
||||
virtual int stat(const char *name, struct stat *st);
|
||||
|
||||
/**
|
||||
* Mounts the filesystem
|
||||
|
|
|
@ -472,6 +472,14 @@ extern "C" int mkdir(const char *path, mode_t mode) {
|
|||
return fs->mkdir(fp.fileName(), mode);
|
||||
}
|
||||
|
||||
extern "C" int stat(const char *path, struct stat *st) {
|
||||
FilePath fp(path);
|
||||
FileSystemLike *fs = fp.fileSystem();
|
||||
if (fs == NULL) return -1;
|
||||
|
||||
return fs->stat(fp.fileName(), st);
|
||||
}
|
||||
|
||||
#if defined(TOOLCHAIN_GCC)
|
||||
/* prevents the exception handling name demangling code getting pulled in */
|
||||
#include "mbed_error.h"
|
||||
|
|
Loading…
Reference in New Issue