diff --git a/os/vfs/drivers/sfs/drvsfs.c b/os/vfs/drivers/sfs/drvsfs.c index 6b7d72678..c65368ab4 100644 --- a/os/vfs/drivers/sfs/drvsfs.c +++ b/os/vfs/drivers/sfs/drvsfs.c @@ -45,6 +45,8 @@ /* Module local variables. */ /*===========================================================================*/ +static msg_t drv_set_cwd(void *instance, const char *path); +static msg_t drv_get_cwd(void *instance, char *buf, size_t size); static msg_t drv_open_dir(void *instance, const char *path, vfs_directory_node_c **vdnpp); @@ -54,6 +56,8 @@ static msg_t drv_open_file(void *instance, vfs_file_node_c **vfnpp); static const struct vfs_sfs_driver_vmt driver_vmt = { + .set_cwd = drv_set_cwd, + .get_cwd = drv_get_cwd, .open_dir = drv_open_dir, .open_file = drv_open_file }; @@ -133,6 +137,31 @@ static struct { /* Module local functions. */ /*===========================================================================*/ +static msg_t drv_set_cwd(void *instance, const char *path) { + + (void)instance; + + if (strcmp(path, "/") != 0) { + return VFS_RET_ENOENT; + } + + return VFS_RET_SUCCESS; +} + +static msg_t drv_get_cwd(void *instance, char *buf, size_t size) { + + (void)instance; + + if (size < 2) { + return VFS_RET_ERANGE; + } + + buf[0] = '/'; + buf[1] = '\0'; + + return VFS_RET_SUCCESS; +} + static msg_t drv_open_dir(void *instance, const char *path, vfs_directory_node_c **vdnpp) { @@ -362,11 +391,9 @@ void __drv_sfs_init(void) { * * @api */ -vfs_driver_c *drvSFSObjectInit(vfs_sfs_driver_c *drvp, - const char *rootname) { +vfs_driver_c *drvSFSObjectInit(vfs_sfs_driver_c *drvp) { __base_object_objinit_impl(drvp, &driver_vmt); - drvp->rootname = rootname; return (vfs_driver_c *)drvp; } diff --git a/os/vfs/drivers/sfs/drvsfs.h b/os/vfs/drivers/sfs/drvsfs.h index 9f1c9d2d7..c9b76e67b 100644 --- a/os/vfs/drivers/sfs/drvsfs.h +++ b/os/vfs/drivers/sfs/drvsfs.h @@ -166,8 +166,7 @@ typedef struct vfs_sfs_driver { extern "C" { #endif void __drv_sfs_init(void); - vfs_driver_c *drvSFSObjectInit(vfs_sfs_driver_c *drvp, - const char *rootname); + vfs_driver_c *drvSFSObjectInit(vfs_sfs_driver_c *drvp); #ifdef __cplusplus } #endif diff --git a/os/vfs/drivers/streams/drvstreams.c b/os/vfs/drivers/streams/drvstreams.c index 0e1b8a387..9c3d703c8 100644 --- a/os/vfs/drivers/streams/drvstreams.c +++ b/os/vfs/drivers/streams/drvstreams.c @@ -45,6 +45,8 @@ /* Module local variables. */ /*===========================================================================*/ +static msg_t drv_set_cwd(void *instance, const char *path); +static msg_t drv_get_cwd(void *instance, char *buf, size_t size); static msg_t drv_open_dir(void *instance, const char *path, vfs_directory_node_c **vdnpp); @@ -54,6 +56,8 @@ static msg_t drv_open_file(void *instance, vfs_file_node_c **vfnpp); static const struct vfs_streams_driver_vmt driver_vmt = { + .set_cwd = drv_set_cwd, + .get_cwd = drv_get_cwd, .open_dir = drv_open_dir, .open_file = drv_open_file }; @@ -112,6 +116,31 @@ static struct { /* Module local functions. */ /*===========================================================================*/ +static msg_t drv_set_cwd(void *instance, const char *path) { + + (void)instance; + + if (strcmp(path, "/") != 0) { + return VFS_RET_ENOENT; + } + + return VFS_RET_SUCCESS; +} + +static msg_t drv_get_cwd(void *instance, char *buf, size_t size) { + + (void)instance; + + if (size < 2) { + return VFS_RET_ERANGE; + } + + buf[0] = '/'; + buf[1] = '\0'; + + return VFS_RET_SUCCESS; +} + static msg_t drv_open_dir(void *instance, const char *path, vfs_directory_node_c **vdnpp) { diff --git a/os/vfs/drivers/template/drvtemplate.c b/os/vfs/drivers/template/drvtemplate.c index 2467db6de..7e1e48785 100644 --- a/os/vfs/drivers/template/drvtemplate.c +++ b/os/vfs/drivers/template/drvtemplate.c @@ -45,6 +45,8 @@ /* Module local variables. */ /*===========================================================================*/ +static msg_t drv_set_cwd(void *instance, const char *path); +static msg_t drv_get_cwd(void *instance, char *buf, size_t size); static msg_t drv_open_dir(void *instance, const char *path, vfs_directory_node_c **vdnpp); @@ -54,6 +56,8 @@ static msg_t drv_open_file(void *instance, vfs_file_node_c **vfnpp); static const struct vfs_template_driver_vmt driver_vmt = { + .set_cwd = drv_set_cwd, + .get_cwd = drv_get_cwd, .open_dir = drv_open_dir, .open_file = drv_open_file }; @@ -133,6 +137,31 @@ static struct { /* Module local functions. */ /*===========================================================================*/ +static msg_t drv_set_cwd(void *instance, const char *path) { + + (void)instance; + + if (strcmp(path, "/") != 0) { + return VFS_RET_ENOENT; + } + + return VFS_RET_SUCCESS; +} + +static msg_t drv_get_cwd(void *instance, char *buf, size_t size) { + + (void)instance; + + if (size < 2) { + return VFS_RET_ERANGE; + } + + buf[0] = '/'; + buf[1] = '\0'; + + return VFS_RET_SUCCESS; +} + static msg_t drv_open_dir(void *instance, const char *path, vfs_directory_node_c **vdnpp) { @@ -362,11 +391,9 @@ void __drv_template_init(void) { * * @api */ -vfs_driver_c *drvTEMPLATEObjectInit(vfs_template_driver_c *drvp, - const char *rootname) { +vfs_driver_c *drvTEMPLATEObjectInit(vfs_template_driver_c *drvp) { __base_object_objinit_impl(drvp, &driver_vmt); - drvp->rootname = rootname; return (vfs_driver_c *)drvp; } diff --git a/os/vfs/drivers/template/drvtemplate.h b/os/vfs/drivers/template/drvtemplate.h index 7f2cd2497..05fe6ec7d 100644 --- a/os/vfs/drivers/template/drvtemplate.h +++ b/os/vfs/drivers/template/drvtemplate.h @@ -166,8 +166,7 @@ typedef struct vfs_template_driver { extern "C" { #endif void __drv_template_init(void); - vfs_driver_c *drvTEMPLATEObjectInit(vfs_template_driver_c *drvp, - const char *rootname); + vfs_driver_c *drvTEMPLATEObjectInit(vfs_template_driver_c *drvp); #ifdef __cplusplus } #endif