AP_Filesystem: implement stat() call for lua

This commit is contained in:
Andrew Tridgell 2023-12-08 11:19:07 +11:00
parent 9f08e5d317
commit 9beea49c3c
2 changed files with 42 additions and 1 deletions

View File

@ -333,6 +333,30 @@ AP_Filesystem_Backend::FormatStatus AP_Filesystem::get_format_status(void) const
}
#endif
/*
stat wrapper for scripting
*/
bool AP_Filesystem::stat(const char *pathname, stat_t &stbuf)
{
struct stat st;
if (fs.stat(pathname, &st) != 0) {
return false;
}
stbuf.size = st.st_size;
stbuf.mode = st.st_mode;
// these wrap in 2038
stbuf.atime = st.st_atime;
stbuf.ctime = st.st_ctime;
stbuf.mtime = st.st_mtime;
return true;
}
// get_singleton for scripting
AP_Filesystem *AP_Filesystem::get_singleton(void)
{
return &fs;
}
namespace AP
{
AP_Filesystem &FS()

View File

@ -82,6 +82,20 @@ public:
int fsync(int fd);
int32_t lseek(int fd, int32_t offset, int whence);
int stat(const char *pathname, struct stat *stbuf);
// stat variant for scripting
typedef struct {
uint32_t size;
int32_t mode;
uint32_t mtime;
uint32_t atime;
uint32_t ctime;
bool is_directory(void) const {
return (mode & S_IFMT) == S_IFDIR;
}
} stat_t;
bool stat(const char *pathname, stat_t &stbuf);
int unlink(const char *pathname);
int mkdir(const char *pathname);
int rename(const char *oldpath, const char *newpath);
@ -122,6 +136,9 @@ public:
*/
FileData *load_file(const char *filename);
// get_singleton for scripting
static AP_Filesystem *get_singleton(void);
private:
struct Backend {
const char *prefix;