mirror of https://github.com/ARMmbed/mbed-os.git
LocalFileSystem: Moved away from deprecated open functions
The old open/opendir functions did not provide a route for errors and relied on implementations manually setting errno. Updated to return errors directly.pull/4087/head
parent
eed1cec5d8
commit
0fc5ce2b5e
|
@ -123,6 +123,7 @@ size_t FileSystem::dir_size(fs_dir_t dir)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Internally used file wrapper that manages memory on close
|
||||||
template <typename F>
|
template <typename F>
|
||||||
class Managed : public F {
|
class Managed : public F {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -237,8 +237,6 @@ protected:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Hooks for FileSystemHandle
|
// Hooks for FileSystemHandle
|
||||||
virtual int open(File *file, const char *path, int flags);
|
|
||||||
virtual int open(Dir *dir, const char *path);
|
|
||||||
virtual int open(FileHandle **file, const char *path, int flags);
|
virtual int open(FileHandle **file, const char *path, int flags);
|
||||||
virtual int open(DirHandle **dir, const char *path);
|
virtual int open(DirHandle **dir, const char *path);
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include "platform/FileSystemHandle.h"
|
#include "platform/FileSystemHandle.h"
|
||||||
#include "platform/FileHandle.h"
|
#include "platform/FileHandle.h"
|
||||||
#include "platform/DirHandle.h"
|
#include "platform/DirHandle.h"
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
namespace mbed {
|
namespace mbed {
|
||||||
/** \addtogroup platform */
|
/** \addtogroup platform */
|
||||||
|
@ -43,26 +42,9 @@ public:
|
||||||
FileSystemLike(const char *name = NULL) : FileBase(name, FileSystemPathType) {}
|
FileSystemLike(const char *name = NULL) : FileBase(name, FileSystemPathType) {}
|
||||||
virtual ~FileSystemLike() {}
|
virtual ~FileSystemLike() {}
|
||||||
|
|
||||||
/** Open a file on the filesystem
|
// Inherited functions with name conflicts
|
||||||
*
|
using FileSystemHandle::open;
|
||||||
* @param file Destination for the handle to a newly created file
|
using FileSystemHandle::open;
|
||||||
* @param path The name of the file to open
|
|
||||||
* @param flags The flags to open the file in, one of O_RDONLY, O_WRONLY, O_RDWR,
|
|
||||||
* bitwise or'd with one of O_CREAT, O_TRUNC, O_APPEND
|
|
||||||
* @return 0 on success, negative error code on failure
|
|
||||||
*/
|
|
||||||
virtual int open(FileHandle **file, const char *filename, int flags) = 0;
|
|
||||||
|
|
||||||
/** Open a directory on the filesystem
|
|
||||||
*
|
|
||||||
* @param dir Destination for the handle to the directory
|
|
||||||
* @param path Name of the directory to open
|
|
||||||
* @return 0 on success, negative error code on failure
|
|
||||||
*/
|
|
||||||
virtual int open(DirHandle **dir, const char *path)
|
|
||||||
{
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Open a file on the filesystem
|
/** Open a file on the filesystem
|
||||||
*
|
*
|
||||||
|
@ -74,7 +56,7 @@ public:
|
||||||
*/
|
*/
|
||||||
MBED_DEPRECATED_SINCE("mbed-os-5.5",
|
MBED_DEPRECATED_SINCE("mbed-os-5.5",
|
||||||
"Replaced by `int open(FileHandle **, ...)` for propagating error codes")
|
"Replaced by `int open(FileHandle **, ...)` for propagating error codes")
|
||||||
virtual FileHandle *open(const char *path, int flags)
|
FileHandle *open(const char *path, int flags)
|
||||||
{
|
{
|
||||||
FileHandle *file;
|
FileHandle *file;
|
||||||
int err = open(&file, path, flags);
|
int err = open(&file, path, flags);
|
||||||
|
@ -89,7 +71,7 @@ public:
|
||||||
*/
|
*/
|
||||||
MBED_DEPRECATED_SINCE("mbed-os-5.5",
|
MBED_DEPRECATED_SINCE("mbed-os-5.5",
|
||||||
"Replaced by `int open(DirHandle **, ...)` for propagating error codes")
|
"Replaced by `int open(DirHandle **, ...)` for propagating error codes")
|
||||||
virtual DirHandle *opendir(const char *path)
|
DirHandle *opendir(const char *path)
|
||||||
{
|
{
|
||||||
DirHandle *dir;
|
DirHandle *dir;
|
||||||
int err = open(&dir, path);
|
int err = open(&dir, path);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "platform/mbed_semihost_api.h"
|
#include "platform/mbed_semihost_api.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
namespace mbed {
|
namespace mbed {
|
||||||
|
|
||||||
|
@ -235,26 +236,28 @@ protected:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
FileHandle *LocalFileSystem::open(const char* name, int flags) {
|
int LocalFileSystem::open(FileHandle **file, const char* name, int flags) {
|
||||||
// No global state modified so function is thread safe
|
// No global state modified so function is thread safe
|
||||||
|
|
||||||
/* reject filenames with / in them */
|
/* reject filenames with / in them */
|
||||||
for (const char *tmp = name; *tmp; tmp++) {
|
for (const char *tmp = name; *tmp; tmp++) {
|
||||||
if (*tmp == '/') {
|
if (*tmp == '/') {
|
||||||
return NULL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int openmode = posix_to_semihost_open_flags(flags);
|
int openmode = posix_to_semihost_open_flags(flags);
|
||||||
if (openmode == OPEN_INVALID) {
|
if (openmode == OPEN_INVALID) {
|
||||||
return NULL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
FILEHANDLE fh = semihost_open(name, openmode);
|
FILEHANDLE fh = semihost_open(name, openmode);
|
||||||
if (fh == -1) {
|
if (fh == -1) {
|
||||||
return NULL;
|
return -EIO;
|
||||||
}
|
}
|
||||||
return new LocalFileHandle(fh);
|
|
||||||
|
*file = new LocalFileHandle(fh);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LocalFileSystem::remove(const char *filename) {
|
int LocalFileSystem::remove(const char *filename) {
|
||||||
|
@ -263,10 +266,11 @@ int LocalFileSystem::remove(const char *filename) {
|
||||||
return semihost_remove(filename);
|
return semihost_remove(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
DirHandle *LocalFileSystem::opendir(const char *name) {
|
int LocalFileSystem::open(DirHandle **dir, const char *name) {
|
||||||
// No global state modified so function is thread safe
|
// No global state modified so function is thread safe
|
||||||
|
|
||||||
return new LocalDirHandle();
|
*dir = new LocalDirHandle();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace mbed
|
} // namespace mbed
|
||||||
|
|
|
@ -106,9 +106,9 @@ public:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual FileHandle *open(const char* name, int flags);
|
virtual int open(FileHandle **file, const char *path, int flags);
|
||||||
|
virtual int open(DirHandle **dir, const char *name);
|
||||||
virtual int remove(const char *filename);
|
virtual int remove(const char *filename);
|
||||||
virtual DirHandle *opendir(const char *name);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mbed
|
} // namespace mbed
|
||||||
|
|
Loading…
Reference in New Issue