Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
fdb96f51
Commit
fdb96f51
authored
Nov 04, 2018
by
devsaurus
Browse files
update file and vfs to master
parent
30ada6f0
Changes
6
Hide whitespace changes
Inline
Side-by-side
components/fatfs/myfatfs.c
View file @
fdb96f51
...
@@ -3,13 +3,13 @@
...
@@ -3,13 +3,13 @@
#include <stdbool.h>
#include <stdbool.h>
#include <stddef.h>
#include <stddef.h>
#include "sdkconfig.h"
#include "vfs_int.h"
#include "vfs_int.h"
#include "fatfs_prefix_lib.h"
#include "fatfs_prefix_lib.h"
#include "ff.h"
#include "ff.h"
#include "fatfs_config.h"
#include "fatfs_config.h"
static
FRESULT
last_result
=
FR_OK
;
static
FRESULT
last_result
=
FR_OK
;
static
const
char
*
const
volstr
[
_VOLUMES
]
=
{
_VOLUME_STRS
};
static
const
char
*
const
volstr
[
_VOLUMES
]
=
{
_VOLUME_STRS
};
...
@@ -29,22 +29,12 @@ static uint32_t myfatfs_fsize( const struct vfs_file *fd );
...
@@ -29,22 +29,12 @@ static uint32_t myfatfs_fsize( const struct vfs_file *fd );
static
int32_t
myfatfs_ferrno
(
const
struct
vfs_file
*
fd
);
static
int32_t
myfatfs_ferrno
(
const
struct
vfs_file
*
fd
);
static
int32_t
myfatfs_closedir
(
const
struct
vfs_dir
*
dd
);
static
int32_t
myfatfs_closedir
(
const
struct
vfs_dir
*
dd
);
static
vfs_item
*
myfatfs_readdir
(
const
struct
vfs_dir
*
dd
);
static
int32_t
myfatfs_readdir
(
const
struct
vfs_dir
*
dd
,
struct
vfs_stat
*
buf
);
static
void
myfatfs_iclose
(
const
struct
vfs_item
*
di
);
static
uint32_t
myfatfs_isize
(
const
struct
vfs_item
*
di
);
static
int32_t
myfatfs_time
(
const
struct
vfs_item
*
di
,
struct
vfs_time
*
tm
);
static
const
char
*
myfatfs_name
(
const
struct
vfs_item
*
di
);
static
int32_t
myfatfs_is_dir
(
const
struct
vfs_item
*
di
);
static
int32_t
myfatfs_is_rdonly
(
const
struct
vfs_item
*
di
);
static
int32_t
myfatfs_is_hidden
(
const
struct
vfs_item
*
di
);
static
int32_t
myfatfs_is_sys
(
const
struct
vfs_item
*
di
);
static
int32_t
myfatfs_is_arch
(
const
struct
vfs_item
*
di
);
static
vfs_vol
*
myfatfs_mount
(
const
char
*
name
,
int
num
);
static
vfs_vol
*
myfatfs_mount
(
const
char
*
name
,
int
num
);
static
vfs_file
*
myfatfs_open
(
const
char
*
name
,
const
char
*
mode
);
static
vfs_file
*
myfatfs_open
(
const
char
*
name
,
const
char
*
mode
);
static
vfs_dir
*
myfatfs_opendir
(
const
char
*
name
);
static
vfs_dir
*
myfatfs_opendir
(
const
char
*
name
);
static
vfs_item
*
myfatfs_stat
(
const
char
*
name
);
static
int32_t
myfatfs_stat
(
const
char
*
name
,
struct
vfs_stat
*
buf
);
static
int32_t
myfatfs_remove
(
const
char
*
name
);
static
int32_t
myfatfs_remove
(
const
char
*
name
);
static
int32_t
myfatfs_rename
(
const
char
*
oldname
,
const
char
*
newname
);
static
int32_t
myfatfs_rename
(
const
char
*
oldname
,
const
char
*
newname
);
static
int32_t
myfatfs_mkdir
(
const
char
*
name
);
static
int32_t
myfatfs_mkdir
(
const
char
*
name
);
...
@@ -89,18 +79,6 @@ static vfs_file_fns myfatfs_file_fns = {
...
@@ -89,18 +79,6 @@ static vfs_file_fns myfatfs_file_fns = {
.
ferrno
=
myfatfs_ferrno
.
ferrno
=
myfatfs_ferrno
};
};
static
vfs_item_fns
myfatfs_item_fns
=
{
.
close
=
myfatfs_iclose
,
.
size
=
myfatfs_isize
,
.
time
=
myfatfs_time
,
.
name
=
myfatfs_name
,
.
is_dir
=
myfatfs_is_dir
,
.
is_rdonly
=
myfatfs_is_rdonly
,
.
is_hidden
=
myfatfs_is_hidden
,
.
is_sys
=
myfatfs_is_sys
,
.
is_arch
=
myfatfs_is_arch
};
static
vfs_dir_fns
myfatfs_dir_fns
=
{
static
vfs_dir_fns
myfatfs_dir_fns
=
{
.
close
=
myfatfs_closedir
,
.
close
=
myfatfs_closedir
,
.
readdir
=
myfatfs_readdir
.
readdir
=
myfatfs_readdir
...
@@ -130,11 +108,6 @@ struct myvfs_dir {
...
@@ -130,11 +108,6 @@ struct myvfs_dir {
DIR
dp
;
DIR
dp
;
};
};
struct
myvfs_item
{
struct
vfs_item
vfs_item
;
FILINFO
fno
;
};
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// exported helper functions for FatFS
// exported helper functions for FatFS
...
@@ -322,56 +295,21 @@ static int32_t myfatfs_closedir( const struct vfs_dir *dd )
...
@@ -322,56 +295,21 @@ static int32_t myfatfs_closedir( const struct vfs_dir *dd )
return
last_result
==
FR_OK
?
VFS_RES_OK
:
VFS_RES_ERR
;
return
last_result
==
FR_OK
?
VFS_RES_OK
:
VFS_RES_ERR
;
}
}
static
v
fs_item
*
myfatfs_readdir
(
const
struct
vfs_
dir
*
dd
)
static
v
oid
myfatfs_fill_stat
(
const
FILINFO
*
fno
,
struct
vfs_
stat
*
buf
)
{
{
GET_DIR_DP
(
dd
);
memset
(
buf
,
0
,
sizeof
(
struct
vfs_stat
)
);
struct
myvfs_item
*
di
;
if
((
di
=
malloc
(
sizeof
(
struct
myvfs_item
)
)))
{
FILINFO
*
fno
=
&
(
di
->
fno
);
if
(
FR_OK
==
(
last_result
=
f_readdir
(
dp
,
fno
)))
{
// condition "no further item" is signalled with empty name
if
(
fno
->
fname
[
0
]
!=
'\0'
)
{
di
->
vfs_item
.
fs_type
=
VFS_FS_FATFS
;
di
->
vfs_item
.
fns
=
&
myfatfs_item_fns
;
return
(
vfs_item
*
)
di
;
}
}
free
(
di
);
}
return
NULL
;
}
// fill in supported stat entries
strncpy
(
buf
->
name
,
fno
->
fname
,
CONFIG_FS_OBJ_NAME_LEN
+
1
);
buf
->
name
[
CONFIG_FS_OBJ_NAME_LEN
]
=
'\0'
;
buf
->
size
=
fno
->
fsize
;
buf
->
is_dir
=
fno
->
fattrib
&
AM_DIR
?
1
:
0
;
buf
->
is_rdonly
=
fno
->
fattrib
&
AM_RDO
?
1
:
0
;
buf
->
is_hidden
=
fno
->
fattrib
&
AM_HID
?
1
:
0
;
buf
->
is_sys
=
fno
->
fattrib
&
AM_SYS
?
1
:
0
;
buf
->
is_arch
=
fno
->
fattrib
&
AM_ARC
?
1
:
0
;
// ---------------------------------------------------------------------------
struct
vfs_time
*
tm
=
&
(
buf
->
tm
);
// dir info functions
//
#define GET_FILINFO_FNO(descr) \
const struct myvfs_item *mydi = (const struct myvfs_item *)descr; \
FILINFO *fno = (FILINFO *)&(mydi->fno);
static
void
myfatfs_iclose
(
const
struct
vfs_item
*
di
)
{
GET_FILINFO_FNO
(
di
);
(
void
)
fno
;
// free descriptor memory
free
(
(
void
*
)
di
);
}
static
uint32_t
myfatfs_isize
(
const
struct
vfs_item
*
di
)
{
GET_FILINFO_FNO
(
di
);
return
fno
->
fsize
;
}
static
int32_t
myfatfs_time
(
const
struct
vfs_item
*
di
,
struct
vfs_time
*
tm
)
{
GET_FILINFO_FNO
(
di
);
tm
->
year
=
(
fno
->
fdate
>>
9
)
+
1980
;
tm
->
year
=
(
fno
->
fdate
>>
9
)
+
1980
;
tm
->
mon
=
(
fno
->
fdate
>>
5
)
&
0x0f
;
tm
->
mon
=
(
fno
->
fdate
>>
5
)
&
0x0f
;
tm
->
day
=
fno
->
fdate
&
0x1f
;
tm
->
day
=
fno
->
fdate
&
0x1f
;
...
@@ -379,49 +317,24 @@ static int32_t myfatfs_time( const struct vfs_item *di, struct vfs_time *tm )
...
@@ -379,49 +317,24 @@ static int32_t myfatfs_time( const struct vfs_item *di, struct vfs_time *tm )
tm
->
min
=
(
fno
->
ftime
>>
5
)
&
0x3f
;
tm
->
min
=
(
fno
->
ftime
>>
5
)
&
0x3f
;
tm
->
sec
=
fno
->
ftime
&
0x3f
;
tm
->
sec
=
fno
->
ftime
&
0x3f
;
return
VFS_RES_OK
;
buf
->
tm_valid
=
1
;
}
}
static
const
char
*
myfatfs_
name
(
const
struct
vfs_
item
*
di
)
static
int32_t
myfatfs_
readdir
(
const
struct
vfs_
dir
*
dd
,
struct
vfs_stat
*
buf
)
{
{
GET_FILINFO_FNO
(
di
);
GET_DIR_DP
(
dd
);
FILINFO
fno
;
return
fno
->
fname
;
}
static
int32_t
myfatfs_is_dir
(
const
struct
vfs_item
*
di
)
{
GET_FILINFO_FNO
(
di
);
return
fno
->
fattrib
&
AM_DIR
?
1
:
0
;
}
static
int32_t
myfatfs_is_rdonly
(
const
struct
vfs_item
*
di
)
{
GET_FILINFO_FNO
(
di
);
return
fno
->
fattrib
&
AM_RDO
?
1
:
0
;
}
static
int32_t
myfatfs_is_hidden
(
const
struct
vfs_item
*
di
)
{
GET_FILINFO_FNO
(
di
);
return
fno
->
fattrib
&
AM_HID
?
1
:
0
;
}
static
int32_t
myfatfs_is_sys
(
const
struct
vfs_item
*
di
)
{
GET_FILINFO_FNO
(
di
);
return
fno
->
fattrib
&
AM_SYS
?
1
:
0
;
if
(
FR_OK
==
(
last_result
=
f_readdir
(
dp
,
&
fno
)))
{
}
// condition "no further item" is signalled with empty name
if
(
fno
.
fname
[
0
]
!=
'\0'
)
{
myfatfs_fill_stat
(
&
fno
,
buf
);
static
int32_t
myfatfs_is_arch
(
const
struct
vfs_item
*
di
)
return
VFS_RES_OK
;
{
}
GET_FILINFO_FNO
(
di
);
}
return
fno
->
fattrib
&
AM_ARC
?
1
:
0
;
return
VFS_RES_ERR
;
}
}
...
@@ -522,21 +435,17 @@ static vfs_dir *myfatfs_opendir( const char *name )
...
@@ -522,21 +435,17 @@ static vfs_dir *myfatfs_opendir( const char *name )
return
NULL
;
return
NULL
;
}
}
static
vfs_item
*
myfatfs_stat
(
const
char
*
name
)
static
int32_t
myfatfs_stat
(
const
char
*
name
,
struct
vfs_stat
*
buf
)
{
{
struct
myvfs_item
*
di
;
FILINFO
fno
;
if
((
di
=
malloc
(
sizeof
(
struct
myvfs_item
)
)))
{
if
(
FR_OK
==
(
last_result
=
f_stat
(
name
,
&
fno
)))
{
if
(
FR_OK
==
(
last_result
=
f_stat
(
name
,
&
(
di
->
fno
)
)))
{
myfatfs_fill_stat
(
&
fno
,
buf
);
di
->
vfs_item
.
fs_type
=
VFS_FS_FATFS
;
di
->
vfs_item
.
fns
=
&
myfatfs_item_fns
;
return
(
vfs_item
*
)
di
;
}
else
{
free
(
di
);
}
}
return
NULL
;
return
VFS_RES_OK
;
}
else
{
return
VFS_RES_ERR
;
}
}
}
static
int32_t
myfatfs_remove
(
const
char
*
name
)
static
int32_t
myfatfs_remove
(
const
char
*
name
)
...
...
components/modules/file.c
View file @
fdb96f51
...
@@ -211,14 +211,13 @@ static int file_open( lua_State* L )
...
@@ -211,14 +211,13 @@ static int file_open( lua_State* L )
static
int
file_list
(
lua_State
*
L
)
static
int
file_list
(
lua_State
*
L
)
{
{
vfs_dir
*
dir
;
vfs_dir
*
dir
;
vfs_item
*
item
;
if
((
dir
=
vfs_opendir
(
""
)))
{
if
((
dir
=
vfs_opendir
(
""
)))
{
lua_newtable
(
L
);
lua_newtable
(
L
);
while
((
item
=
vfs_readdir
(
dir
)))
{
struct
vfs_stat
stat
;
lua_pushinteger
(
L
,
vfs_item_size
(
item
));
while
(
vfs_readdir
(
dir
,
&
stat
)
==
VFS_RES_OK
)
{
lua_
setfield
(
L
,
-
2
,
vfs_item_name
(
item
)
);
lua_
pushinteger
(
L
,
stat
.
size
);
vfs_closeitem
(
item
);
lua_setfield
(
L
,
-
2
,
stat
.
name
);
}
}
vfs_closedir
(
dir
);
vfs_closedir
(
dir
);
return
1
;
return
1
;
...
@@ -267,11 +266,8 @@ static int file_exists( lua_State* L )
...
@@ -267,11 +266,8 @@ static int file_exists( lua_State* L )
const
char
*
basename
=
vfs_basename
(
fname
);
const
char
*
basename
=
vfs_basename
(
fname
);
luaL_argcheck
(
L
,
strlen
(
basename
)
<=
CONFIG_FS_OBJ_NAME_LEN
&&
strlen
(
fname
)
==
len
,
1
,
"filename invalid"
);
luaL_argcheck
(
L
,
strlen
(
basename
)
<=
CONFIG_FS_OBJ_NAME_LEN
&&
strlen
(
fname
)
==
len
,
1
,
"filename invalid"
);
vfs_item
*
stat
=
vfs_stat
((
char
*
)
fname
);
struct
vfs_stat
stat
;
lua_pushboolean
(
L
,
vfs_stat
((
char
*
)
fname
,
&
stat
)
==
VFS_RES_OK
?
1
:
0
);
lua_pushboolean
(
L
,
stat
?
1
:
0
);
if
(
stat
)
vfs_closeitem
(
stat
);
return
1
;
return
1
;
}
}
...
@@ -322,6 +318,68 @@ static int file_rename( lua_State* L )
...
@@ -322,6 +318,68 @@ static int file_rename( lua_State* L )
return
1
;
return
1
;
}
}
// Lua: stat(filename)
static
int
file_stat
(
lua_State
*
L
)
{
size_t
len
;
const
char
*
fname
=
luaL_checklstring
(
L
,
1
,
&
len
);
luaL_argcheck
(
L
,
strlen
(
fname
)
<=
CONFIG_FS_OBJ_NAME_LEN
&&
strlen
(
fname
)
==
len
,
1
,
"filename invalid"
);
struct
vfs_stat
stat
;
if
(
vfs_stat
(
(
char
*
)
fname
,
&
stat
)
!=
VFS_RES_OK
)
{
lua_pushnil
(
L
);
return
1
;
}
lua_createtable
(
L
,
0
,
7
);
lua_pushinteger
(
L
,
stat
.
size
);
lua_setfield
(
L
,
-
2
,
"size"
);
lua_pushstring
(
L
,
stat
.
name
);
lua_setfield
(
L
,
-
2
,
"name"
);
lua_pushboolean
(
L
,
stat
.
is_dir
);
lua_setfield
(
L
,
-
2
,
"is_dir"
);
lua_pushboolean
(
L
,
stat
.
is_rdonly
);
lua_setfield
(
L
,
-
2
,
"is_rdonly"
);
lua_pushboolean
(
L
,
stat
.
is_hidden
);
lua_setfield
(
L
,
-
2
,
"is_hidden"
);
lua_pushboolean
(
L
,
stat
.
is_sys
);
lua_setfield
(
L
,
-
2
,
"is_sys"
);
lua_pushboolean
(
L
,
stat
.
is_arch
);
lua_setfield
(
L
,
-
2
,
"is_arch"
);
// time stamp as sub-table
lua_createtable
(
L
,
0
,
6
);
lua_pushinteger
(
L
,
stat
.
tm_valid
?
stat
.
tm
.
year
:
FILE_TIMEDEF_YEAR
);
lua_setfield
(
L
,
-
2
,
"year"
);
lua_pushinteger
(
L
,
stat
.
tm_valid
?
stat
.
tm
.
mon
:
FILE_TIMEDEF_MON
);
lua_setfield
(
L
,
-
2
,
"mon"
);
lua_pushinteger
(
L
,
stat
.
tm_valid
?
stat
.
tm
.
day
:
FILE_TIMEDEF_DAY
);
lua_setfield
(
L
,
-
2
,
"day"
);
lua_pushinteger
(
L
,
stat
.
tm_valid
?
stat
.
tm
.
hour
:
FILE_TIMEDEF_HOUR
);
lua_setfield
(
L
,
-
2
,
"hour"
);
lua_pushinteger
(
L
,
stat
.
tm_valid
?
stat
.
tm
.
min
:
FILE_TIMEDEF_MIN
);
lua_setfield
(
L
,
-
2
,
"min"
);
lua_pushinteger
(
L
,
stat
.
tm_valid
?
stat
.
tm
.
sec
:
FILE_TIMEDEF_SEC
);
lua_setfield
(
L
,
-
2
,
"sec"
);
lua_setfield
(
L
,
-
2
,
"time"
);
return
1
;
}
// g_read()
// g_read()
static
int
file_g_read
(
lua_State
*
L
,
int
n
,
int16_t
end_char
,
int
fd
)
static
int
file_g_read
(
lua_State
*
L
,
int
n
,
int16_t
end_char
,
int
fd
)
{
{
...
@@ -527,6 +585,7 @@ static const LUA_REG_TYPE file_map[] = {
...
@@ -527,6 +585,7 @@ static const LUA_REG_TYPE file_map[] = {
{
LSTRKEY
(
"exists"
),
LFUNCVAL
(
file_exists
)
},
{
LSTRKEY
(
"exists"
),
LFUNCVAL
(
file_exists
)
},
{
LSTRKEY
(
"fsinfo"
),
LFUNCVAL
(
file_fsinfo
)
},
{
LSTRKEY
(
"fsinfo"
),
LFUNCVAL
(
file_fsinfo
)
},
{
LSTRKEY
(
"on"
),
LFUNCVAL
(
file_on
)
},
{
LSTRKEY
(
"on"
),
LFUNCVAL
(
file_on
)
},
{
LSTRKEY
(
"stat"
),
LFUNCVAL
(
file_stat
)
},
#ifdef CONFIG_BUILD_FATFS
#ifdef CONFIG_BUILD_FATFS
{
LSTRKEY
(
"chdir"
),
LFUNCVAL
(
file_chdir
)
},
{
LSTRKEY
(
"chdir"
),
LFUNCVAL
(
file_chdir
)
},
#endif
#endif
...
...
components/platform/include/vfs.h
View file @
fdb96f51
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
#include <stdint.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdbool.h>
#include "sdkconfig.h"
#include "vfs_int.h"
#include "vfs_int.h"
// DEPRECATED, DON'T USE
// DEPRECATED, DON'T USE
...
@@ -106,57 +107,9 @@ inline int32_t vfs_closedir( vfs_dir *dd ) { return dd->fns->close( dd ); }
...
@@ -106,57 +107,9 @@ inline int32_t vfs_closedir( vfs_dir *dd ) { return dd->fns->close( dd ); }
// vfs_readdir - read next directory item
// vfs_readdir - read next directory item
// dd: dir descriptor
// dd: dir descriptor
// Returns: item object, or NULL in case of error
// buf: pre-allocated stat structure to be filled in
inline
vfs_item
*
vfs_readdir
(
vfs_dir
*
dd
)
{
return
dd
->
fns
->
readdir
(
dd
);
}
// Returns: VFS_RES_OK if next item found, otherwise VFS_RES_ERR
inline
int32_t
vfs_readdir
(
vfs_dir
*
dd
,
struct
vfs_stat
*
buf
)
{
return
dd
->
fns
->
readdir
(
dd
,
buf
);
}
// ---------------------------------------------------------------------------
// dir item functions
//
// vfs_closeitem - close directory item and free memory
// di: item descriptor
// Returns: nothing
inline
void
vfs_closeitem
(
vfs_item
*
di
)
{
return
di
->
fns
->
close
(
di
);
}
// vfs_item_size - get item's size
// di: item descriptor
// Returns: Item size
inline
uint32_t
vfs_item_size
(
vfs_item
*
di
)
{
return
di
->
fns
->
size
(
di
);
}
// vfs_item_time - get item's modification time
// di: item descriptor
// Returns: Item modification time
inline
int32_t
vfs_item_time
(
vfs_item
*
di
,
struct
vfs_time
*
tm
)
{
return
di
->
fns
->
time
?
di
->
fns
->
time
(
di
,
tm
)
:
VFS_RES_ERR
;
}
// vfs_item_name - get item's name
// di: item descriptor
// Returns: Item name
inline
const
char
*
vfs_item_name
(
vfs_item
*
di
)
{
return
di
->
fns
->
name
(
di
);
}
// vfs_item_is_dir - check for directory
// di: item descriptor
// Returns: >0 if item is a directory, 0 if not
inline
int32_t
vfs_item_is_dir
(
vfs_item
*
di
)
{
return
di
->
fns
->
is_dir
?
di
->
fns
->
is_dir
(
di
)
:
0
;
}
// vfs_item_is_rdonly - check for read-only
// di: item descriptor
// Returns: >0 if item is read only, 0 if not
inline
int32_t
vfs_item_is_rdonly
(
vfs_item
*
di
)
{
return
di
->
fns
->
is_rdonly
?
di
->
fns
->
is_rdonly
(
di
)
:
0
;
}
// vfs_item_is_hidden - check for hidden attribute
// di: item descriptor
// Returns: >0 if item is hidden, 0 if not
inline
int32_t
vfs_item_is_hidden
(
vfs_item
*
di
)
{
return
di
->
fns
->
is_hidden
?
di
->
fns
->
is_hidden
(
di
)
:
0
;
}
// vfs_item_is_sys - check for sys attribute
// di: item descriptor
// Returns: >0 if item is sys, 0 if not
inline
int32_t
vfs_item_is_sys
(
vfs_item
*
di
)
{
return
di
->
fns
->
is_sys
?
di
->
fns
->
is_sys
(
di
)
:
0
;
}
// vfs_item_is_arch - check for archive attribute
// di: item descriptor
// Returns: >0 if item is archive, 0 if not
inline
int32_t
vfs_item_is_arch
(
vfs_item
*
di
)
{
return
di
->
fns
->
is_arch
?
di
->
fns
->
is_arch
(
di
)
:
0
;
}
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// volume functions
// volume functions
...
@@ -190,8 +143,9 @@ vfs_dir *vfs_opendir( const char *name );
...
@@ -190,8 +143,9 @@ vfs_dir *vfs_opendir( const char *name );
// vfs_stat - stat file or directory
// vfs_stat - stat file or directory
// name: file or directory name
// name: file or directory name
// Returns: Item object, or NULL in case of error
// buf: pre-allocated structure to be filled in
vfs_item
*
vfs_stat
(
const
char
*
name
);
// Returns: VFS_RES_OK, or VFS_RES_ERR in case of error
int32_t
vfs_stat
(
const
char
*
name
,
struct
vfs_stat
*
buf
);
// vfs_remove - remove file or directory
// vfs_remove - remove file or directory
// name: file or directory name
// name: file or directory name
...
...
components/platform/include/vfs_int.h
View file @
fdb96f51
...
@@ -47,6 +47,19 @@ struct vfs_file {
...
@@ -47,6 +47,19 @@ struct vfs_file {
};
};
typedef
const
struct
vfs_file
vfs_file
;
typedef
const
struct
vfs_file
vfs_file
;
// stat data
struct
vfs_stat
{
uint32_t
size
;
char
name
[
CONFIG_FS_OBJ_NAME_LEN
+
1
];
struct
vfs_time
tm
;
uint8_t
tm_valid
;
uint8_t
is_dir
;
uint8_t
is_rdonly
;
uint8_t
is_hidden
;
uint8_t
is_sys
;
uint8_t
is_arch
;
};
// file descriptor functions
// file descriptor functions
struct
vfs_file_fns
{
struct
vfs_file_fns
{
int32_t
(
*
close
)(
const
struct
vfs_file
*
fd
);
int32_t
(
*
close
)(
const
struct
vfs_file
*
fd
);
...
@@ -61,27 +74,6 @@ struct vfs_file_fns {
...
@@ -61,27 +74,6 @@ struct vfs_file_fns {
};
};
typedef
const
struct
vfs_file_fns
vfs_file_fns
;
typedef
const
struct
vfs_file_fns
vfs_file_fns
;
// generic dir item descriptor
struct
vfs_item
{
int
fs_type
;
const
struct
vfs_item_fns
*
fns
;
};
typedef
const
struct
vfs_item
vfs_item
;
// directory item functions
struct
vfs_item_fns
{
void
(
*
close
)(
const
struct
vfs_item
*
di
);
uint32_t
(
*
size
)(
const
struct
vfs_item
*
di
);
int32_t
(
*
time
)(
const
struct
vfs_item
*
di
,
struct
vfs_time
*
tm
);
const
char
*
(
*
name
)(
const
struct
vfs_item
*
di
);
int32_t
(
*
is_dir
)(
const
struct
vfs_item
*
di
);
int32_t
(
*
is_rdonly
)(
const
struct
vfs_item
*
di
);
int32_t
(
*
is_hidden
)(
const
struct
vfs_item
*
di
);
int32_t
(
*
is_sys
)(
const
struct
vfs_item
*
di
);
int32_t
(
*
is_arch
)(
const
struct
vfs_item
*
di
);
};
typedef
const
struct
vfs_item_fns
vfs_item_fns
;
// generic dir descriptor
// generic dir descriptor
struct
vfs_dir
{
struct
vfs_dir
{
int
fs_type
;
int
fs_type
;
...
@@ -92,7 +84,7 @@ typedef const struct vfs_dir vfs_dir;
...
@@ -92,7 +84,7 @@ typedef const struct vfs_dir vfs_dir;
// dir descriptor functions
// dir descriptor functions
struct
vfs_dir_fns
{
struct
vfs_dir_fns
{
int32_t
(
*
close
)(
const
struct
vfs_dir
*
dd
);
int32_t
(
*
close
)(
const
struct
vfs_dir
*
dd
);
vfs_item
*
(
*
readdir
)(
const
struct
vfs_dir
*
dd
);
int32_t
(
*
readdir
)(
const
struct
vfs_dir
*
dd
,
struct
vfs_stat
*
buf
);
};
};
typedef
const
struct
vfs_dir_fns
vfs_dir_fns
;
typedef
const
struct
vfs_dir_fns
vfs_dir_fns
;
...
@@ -113,7 +105,7 @@ struct vfs_fs_fns {
...
@@ -113,7 +105,7 @@ struct vfs_fs_fns {
vfs_vol
*
(
*
mount
)(
const
char
*
name
,
int
num
);
vfs_vol
*
(
*
mount
)(
const
char
*
name
,
int
num
);
vfs_file
*
(
*
open
)(
const
char
*
name
,
const
char
*
mode
);
vfs_file
*
(
*
open
)(
const
char
*
name
,
const
char
*
mode
);
vfs_dir
*
(
*
opendir
)(
const
char
*
name
);
vfs_dir
*
(
*
opendir
)(
const
char
*
name
);
vfs_item
*
(
*
stat
)(
const
char
*
name
);
int32_t
(
*
stat
)(
const
char
*
name
,
struct
vfs_stat
*
buf
);
int32_t
(
*
remove
)(
const
char
*
name
);
int32_t
(
*
remove
)(
const
char
*
name
);
int32_t
(
*
rename
)(
const
char
*
oldname
,
const
char
*
newname
);
int32_t
(
*
rename
)(
const
char
*
oldname
,
const
char
*
newname
);
int32_t
(
*
mkdir
)(
const
char
*
name
);
int32_t
(
*
mkdir
)(
const
char
*
name
);
...
...
components/platform/vfs.c
View file @
fdb96f51
...
@@ -139,7 +139,7 @@ vfs_dir *vfs_opendir( const char *name )
...
@@ -139,7 +139,7 @@ vfs_dir *vfs_opendir( const char *name )
return
NULL
;
return
NULL
;
}
}
vfs_item
*
vfs_stat
(
const
char
*
name
)
int32_t
vfs_stat
(
const
char
*
name
,
struct
vfs_stat
*
buf
)
{
{
vfs_fs_fns
*
fs_fns
;
vfs_fs_fns
*
fs_fns
;
const
char
*
normname
=
normalize_path
(
name
);
const
char
*
normname
=
normalize_path
(
name
);
...
@@ -147,19 +147,19 @@ vfs_item *vfs_stat( const char *name )
...
@@ -147,19 +147,19 @@ vfs_item *vfs_stat( const char *name )
#ifdef CONFIG_BUILD_SPIFFS
#ifdef CONFIG_BUILD_SPIFFS
if
((
fs_fns
=
myspiffs_realm
(
normname
,
&
outname
,
false
)))
{
if
((
fs_fns
=
myspiffs_realm
(
normname
,
&
outname
,
false
)))
{
return
fs_fns
->
stat
(
outname
);
return
fs_fns
->
stat
(
outname
,
buf
);
}
}
#endif
#endif
#ifdef CONFIG_BUILD_FATFS
#ifdef CONFIG_BUILD_FATFS
if
((
fs_fns
=
myfatfs_realm
(
normname
,
&
outname
,
false
)))
{
if
((
fs_fns
=
myfatfs_realm
(
normname
,
&
outname
,
false
)))
{
vfs_item
*
r
=
fs_fns
->
stat
(
outname
);
vfs_item
*
r
=
fs_fns
->
stat
(
outname
,
buf
);
free
(
outname
);
free
(
outname
);
return
r
;
return
r
;
}
}
#endif
#endif
return
NULL
;
return
VFS_RES_ERR
;
}
}
int32_t
vfs_remove
(
const
char
*
name
)
int32_t
vfs_remove
(
const
char
*
name
)
...
...
components/spiffs/spiffs.c
View file @
fdb96f51
...
@@ -195,17 +195,12 @@ static int32_t myspiffs_vfs_flush( const struct vfs_file *fd );
...
@@ -195,17 +195,12 @@ static int32_t myspiffs_vfs_flush( const struct vfs_file *fd );
static
int32_t
myspiffs_vfs_ferrno
(
const
struct
vfs_file
*
fd
);
static
int32_t
myspiffs_vfs_ferrno
(
const
struct
vfs_file
*
fd
);
static
int32_t
myspiffs_vfs_closedir
(
const
struct
vfs_dir
*
dd
);
static
int32_t
myspiffs_vfs_closedir
(
const
struct
vfs_dir
*
dd
);
static
vfs_item
*
myspiffs_vfs_readdir
(
const
struct
vfs_dir
*
dd
);
static
int32_t
myspiffs_vfs_readdir
(
const
struct
vfs_dir
*
dd
,
struct
vfs_stat
*
buf
);
static
void
myspiffs_vfs_iclose
(
const
struct
vfs_item
*
di
);
static
uint32_t
myspiffs_vfs_isize
(
const
struct
vfs_item
*
di
);
//static const struct tm *myspiffs_vfs_time( const struct vfs_item *di );
static
const
char
*
myspiffs_vfs_name
(
const
struct
vfs_item
*
di
);
static
vfs_vol
*
myspiffs_vfs_mount
(
const
char
*
name
,
int
num
);
static
vfs_vol
*
myspiffs_vfs_mount
(
const
char
*
name
,
int
num
);
static
vfs_file
*
myspiffs_vfs_open
(
const
char
*
name
,
const
char
*
mode
);
static
vfs_file
*
myspiffs_vfs_open
(
const
char
*
name
,
const
char
*
mode
);
static
vfs_dir
*
myspiffs_vfs_opendir
(
const
char
*
name
);
static
vfs_dir
*
myspiffs_vfs_opendir
(
const
char
*
name
);
static
vfs_item
*
myspiffs_vfs_stat
(
const
char
*
name
);
static
int32_t
myspiffs_vfs_stat
(
const
char
*
name
,
struct
vfs_stat
*
buf
);
static
int32_t
myspiffs_vfs_remove
(
const
char
*
name
);
static
int32_t
myspiffs_vfs_remove
(
const
char
*
name
);
static
int32_t
myspiffs_vfs_rename
(
const
char
*
oldname
,
const
char
*
newname
);
static
int32_t
myspiffs_vfs_rename
(
const
char
*
oldname
,
const
char
*
newname
);
static
int32_t
myspiffs_vfs_fsinfo
(
uint32_t
*
total
,
uint32_t
*
used
);
static
int32_t
myspiffs_vfs_fsinfo
(
uint32_t
*
total
,
uint32_t
*
used
);
...
@@ -246,18 +241,6 @@ static vfs_file_fns myspiffs_file_fns = {
...
@@ -246,18 +241,6 @@ static vfs_file_fns myspiffs_file_fns = {
.
ferrno
=
myspiffs_vfs_ferrno
.
ferrno
=
myspiffs_vfs_ferrno
};
};
static
vfs_item_fns
myspiffs_item_fns
=
{
.
close
=
myspiffs_vfs_iclose
,
.
size
=
myspiffs_vfs_isize
,
.
time
=
NULL
,
.
name
=
myspiffs_vfs_name
,
.
is_dir
=
NULL
,
.
is_rdonly
=
NULL
,
.
is_hidden
=
NULL
,
.
is_sys
=
NULL
,
.
is_arch
=
NULL
};
static
vfs_dir_fns
myspiffs_dd_fns
=
{
static
vfs_dir_fns
myspiffs_dd_fns
=
{
.
close
=
myspiffs_vfs_closedir
,
.
close
=
myspiffs_vfs_closedir
,
.
readdir
=
myspiffs_vfs_readdir
.
readdir
=
myspiffs_vfs_readdir
...
@@ -277,36 +260,6 @@ struct myvfs_dir {
...
@@ -277,36 +260,6 @@ struct myvfs_dir {
spiffs_DIR
d
;
spiffs_DIR
d
;
};
};
struct
myvfs_stat
{
struct
vfs_item
vfs_item
;
spiffs_stat
s
;
};
// ---------------------------------------------------------------------------
// stat functions
//
#define GET_STAT_S(descr) \
const struct myvfs_stat *mystat = (const struct myvfs_stat *)descr; \
spiffs_stat *s = (spiffs_stat *)&(mystat->s);
static
void
myspiffs_vfs_iclose
(
const
struct
vfs_item
*
di
)
{
// free descriptor memory
free
(
(
void
*
)
di
);
}
static
uint32_t
myspiffs_vfs_isize
(
const
struct
vfs_item
*
di
)
{
GET_STAT_S
(
di
);
return
s
->
size
;
}
static
const
char
*
myspiffs_vfs_name
(
const
struct
vfs_item
*
di
)
{
GET_STAT_S
(
di
);
return
(
const
char
*
)
s
->
name
;
}
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// dir functions
// dir functions
...
@@ -326,25 +279,21 @@ static int32_t myspiffs_vfs_closedir( const struct vfs_dir *dd ) {
...
@@ -326,25 +279,21 @@ static int32_t myspiffs_vfs_closedir( const struct vfs_dir *dd ) {
return
res
;
return
res
;
}
}
static
vfs_item
*
myspiffs_vfs_readdir
(
const
struct
vfs_dir
*
dd
)
{
static
int32_t
myspiffs_vfs_readdir
(
const
struct
vfs_dir
*
dd
,
struct
vfs_stat
*
buf
)
{
GET_DIR_D
(
dd
);
GET_DIR_D
(
dd
);
struct
myvfs_stat
*
stat
;
struct
spiffs_dirent
dirent
;
struct
spiffs_dirent
dirent
;
if
((
stat
=
malloc
(
sizeof
(
struct
myvfs_stat
)
)))
{
if
(
SPIFFS_readdir
(
d
,
&
dirent
))
{
if
(
SPIFFS_readdir
(
d
,
&
dirent
))
{
memset
(
buf
,
0
,
sizeof
(
struct
vfs_stat
)
);
stat
->
vfs_item
.
fs_type
=
VFS_FS_FATFS
;
// copy entries to item
stat
->
vfs_item
.
fns
=
&
myspiffs_item_fns
;
// fill in supported stat entries
// copy entries to vfs' directory item
strncpy
(
buf
->
name
,
(
char
*
)
dirent
.
name
,
CONFIG_FS_OBJ_NAME_LEN
+
1
);
stat
->
s
.
size
=
dirent
.
size
;
buf
->
name
[
CONFIG_FS_OBJ_NAME_LEN
]
=
'\0'
;
strncpy
((
char
*
)
stat
->
s
.
name
,
(
char
*
)
dirent
.
name
,
SPIFFS_OBJ_NAME_LEN
);
buf
->
size
=
dirent
.
size
;
return
(
vfs_item
*
)
stat
;
return
VFS_RES_OK
;
}
else
{
free
(
stat
);
}
}
}
return
NULL
;
return
VFS_RES_ERR
;
}
}
...
@@ -481,20 +430,20 @@ static vfs_dir *myspiffs_vfs_opendir( const char *name ){
...
@@ -481,20 +430,20 @@ static vfs_dir *myspiffs_vfs_opendir( const char *name ){
return
NULL
;
return
NULL
;
}
}
static
vfs_item
*
myspiffs_vfs_stat
(
const
char
*
name
)
{
static
int32_t
myspiffs_vfs_stat
(
const
char
*
name
,
struct
vfs_stat
*
buf
)
{
s
truct
myv
fs_stat
*
s
;
s
pif
fs_stat
s
tat
;
if
((
s
=
(
struct
myvfs_stat
*
)
malloc
(
sizeof
(
struct
myvfs_stat
)
)))
{
if
(
0
<=
SPIFFS_stat
(
&
fs
,
name
,
&
stat
))
{
if
(
0
<=
SPIFFS_stat
(
&
fs
,
name
,
&
(
s
->
s
)
))
{
memset
(
buf
,
0
,
sizeof
(
struct
vfs_stat
)
);
s
->
vfs_item
.
fs_type
=
VFS_FS_SPIFFS
;
s
->
vfs_item
.
fns
=
&
myspiffs_item_fns
;
return
(
vfs_item
*
)
s
;
}
else
{
free
(
s
);
}
}
return
NULL
;
// fill in supported stat entries
strncpy
(
buf
->
name
,
(
char
*
)
stat
.
name
,
CONFIG_FS_OBJ_NAME_LEN
+
1
);
buf
->
name
[
CONFIG_FS_OBJ_NAME_LEN
]
=
'\0'
;
buf
->
size
=
stat
.
size
;
return
VFS_RES_OK
;
}
else
{
return
VFS_RES_ERR
;
}
}
}
static
int32_t
myspiffs_vfs_remove
(
const
char
*
name
)
{
static
int32_t
myspiffs_vfs_remove
(
const
char
*
name
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment