added more file management functions

This commit is contained in:
2019-03-14 01:23:44 +00:00
parent 10b1eabe86
commit c794863aa6
8 changed files with 315 additions and 161 deletions

View File

@ -36,6 +36,58 @@
#include <qse/macros.h>
#include <qse/cmn/time.h>
struct qse_fattr_t
{
unsigned int isdir: 1;
unsigned int islnk: 1;
unsigned int isreg: 1;
unsigned int isblk: 1;
unsigned int ischr: 1;
qse_uintptr_t mode;
qse_uintmax_t size;
qse_uintmax_t ino;
qse_uintmax_t dev;
qse_uintptr_t uid;
qse_uintptr_t gid;
qse_ntime_t atime; /* last access */
qse_ntime_t mtime; /* last modification */
qse_ntime_t ctime; /* last status change */
};
typedef struct qse_fattr_t qse_fattr_t;
enum qse_fperm_t
{
QSE_FPERM_READ,
QSE_FPERM_WRITE,
QSE_FPERM_EXEC
};
typedef enum qse_fperm_t qse_fperm_t;
enum qse_file_attr_flag_t
{
/* used in qse_set_file_attr() only */
QSE_FILE_ATTR_TIME = (1 << 0),
QSE_FILE_ATTR_OWNER = (1 << 1),
QSE_FILE_ATTR_MODE = (1 << 2),
/* effective in both qse_get_file_attr() and qse_set_file_attr() */
QSE_FILE_ATTR_SYMLINK = (1 << 15) /* work on the symbolic link itself. don't follow */
};
typedef enum qse_file_attr_flag_t qse_file_attr_flag_t;
enum qse_file_perm_flag_t
{
QSE_FILE_PERM_SYMLINK = (1 << 15) /* don't follow symbolic link */
};
typedef enum qse_file_perm_flag_t qse_file_perm_flag_t;
/* ==========================================================================
* FS OBJECT
* ========================================================================== */
#if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR)
typedef qse_wchar_t qse_fs_char_t;
# define QSE_FS_CHAR_IS_WCHAR
@ -46,8 +98,6 @@
# define QSE_SIZEOF_FS_CHAR_T QSE_SIZEOF_MCHAR_T
#endif
typedef qse_fmode_t qse_fs_mode_t;
enum qse_fs_errnum_t
{
QSE_FS_ENOERR = 0,
@ -119,44 +169,7 @@ struct qse_fs_ent_t
typedef struct qse_fs_ent_t qse_fs_ent_t;
struct qse_fs_attr_t
{
unsigned int isdir: 1;
unsigned int islnk: 1;
unsigned int isreg: 1;
unsigned int isblk: 1;
unsigned int ischr: 1;
qse_uintptr_t mode;
qse_uintmax_t size;
qse_uintmax_t ino;
qse_uintmax_t dev;
qse_uintptr_t uid;
qse_uintptr_t gid;
qse_ntime_t atime; /* last access */
qse_ntime_t mtime; /* last modification */
qse_ntime_t ctime; /* last status change */
};
typedef struct qse_fs_attr_t qse_fs_attr_t;
enum qse_fs_getattr_flag_t
{
QSE_FS_GETATTR_SYMLINK = (1 << 15)
};
typedef enum qse_fs_getattr_flag_t qse_fs_getattr_flag_t;
enum qse_fs_setattr_flag_t
{
QSE_FS_SETATTR_TIME = (1 << 0),
QSE_FS_SETATTR_OWNER = (1 << 1),
QSE_FS_SETATTR_MODE = (1 << 2),
QSE_FS_SETATTR_SYMLINK = (1 << 15) /* work on the symbolic link itself. don't follow */
};
typedef enum qse_fs_setattr_flag_t qse_fs_setattr_flag_t;
typedef qse_fattr_t qse_fattr_t;
#if defined(_WIN32)
typedef void* qse_fs_handle_t;
@ -364,43 +377,43 @@ QSE_EXPORT int qse_fs_pop (
QSE_EXPORT int qse_fs_getattronfd (
qse_fs_t* fs,
qse_fs_handle_t fd,
qse_fs_attr_t* attr,
qse_fattr_t* attr,
int flags
);
QSE_EXPORT int qse_fs_setattronfd (
qse_fs_t* fs,
qse_fs_handle_t fd,
const qse_fs_attr_t* attr,
int flags /** bitwise-ORed #qse_fs_setattr_flag_t enumerators */
const qse_fattr_t* attr,
int flags /** bitwise-ORed #qse_file_attr_flag_t enumerators */
);
QSE_EXPORT int qse_fs_getattrmbs (
qse_fs_t* fs,
const qse_mchar_t* path,
qse_fs_attr_t* attr,
qse_fattr_t* attr,
int flags
);
QSE_EXPORT int qse_fs_getattrwcs (
qse_fs_t* fs,
const qse_wchar_t* path,
qse_fs_attr_t* attr,
qse_fattr_t* attr,
int flags
);
QSE_EXPORT int qse_fs_setattrmbs (
qse_fs_t* fs,
qse_mchar_t* path,
const qse_fs_attr_t* attr,
int flags /** bitwise-ORed #qse_fs_setattr_flag_t enumerators */
const qse_fattr_t* attr,
int flags /** bitwise-ORed #qse_file_attr_flag_t enumerators */
);
QSE_EXPORT int qse_fs_setattrwcs (
qse_fs_t* fs,
qse_wchar_t* path,
const qse_fs_attr_t* attr,
int flags /** bitwise-ORed #qse_fs_setattr_flag_t enumerators */
const qse_fattr_t* attr,
int flags /** bitwise-ORed #qse_file_attr_flag_t enumerators */
);
@ -420,10 +433,6 @@ QSE_EXPORT int qse_fs_move (
);
QSE_EXPORT int qse_fs_cpfilembs (
qse_fs_t* fs,
const qse_mchar_t* srcpath,
@ -447,14 +456,14 @@ QSE_EXPORT int qse_fs_cpfilewcs (
QSE_EXPORT int qse_fs_mkdirmbs (
qse_fs_t* fs,
const qse_mchar_t* path,
qse_fs_mode_t mode,
qse_fmode_t mode,
int flags
);
QSE_EXPORT int qse_fs_mkdirwcs (
qse_fs_t* fs,
const qse_wchar_t* path,
qse_fs_mode_t mode,
qse_fmode_t mode,
int flags
);
@ -499,29 +508,61 @@ QSE_EXPORT int qse_fs_rmdirwcs (
QSE_EXPORT qse_mchar_t* qse_get_current_mbsdir (
qse_mchar_t* buf,
qse_size_t size,
qse_mmgr_t* mmgr
qse_size_t size
);
QSE_EXPORT qse_wchar_t* qse_get_current_wcsdir (
qse_wchar_t* buf,
qse_size_t size,
qse_mmgr_t* mmgr
qse_size_t size
);
QSE_EXPORT int qse_get_mbsfile_attr (
const qse_mchar_t* file,
int flags, /* 0 or bitwise-ORed of the qse_file_attr_flag_t enumerators */
qse_fattr_t* attr
);
QSE_EXPORT int qse_get_wcsfile_attr (
const qse_wchar_t* file,
int flags, /* 0 or bitwise-ORed of the qse_file_attr_flag_t enumerators */
qse_fattr_t* attr
);
QSE_EXPORT int qse_check_mbsfile_perm (
const qse_mchar_t* file,
int flags, /* 0 or bitwise-ORed of the qse_file_perm_flag_t enumerators */
qse_fperm_t perm
);
QSE_EXPORT int qse_check_wcsfile_perm (
const qse_wchar_t* file,
int flags, /* 0 or bitwise-ORed of the qse_file_perm_flag_t enumerators */
qse_fperm_t perm
);
#if defined(QSE_CHAR_IS_MCHAR)
# define qse_get_current_dir(buf,size,mmgr) qse_get_current_mbsdir(buf,size,mmgr)
# define qse_get_current_dir(buf,size) qse_get_current_mbsdir(buf,size)
# define qse_get_file_attr(file,flags,attr) qse_get_mbsfile_attr(file,flags,attr)
# define qse_check_file_perm(file,flags,perm) qse_check_mbsfile_perm(file,flags,perm)
#else
# define qse_get_current_dir(buf,size,mmgr) qse_get_current_wcsdir(buf,size,mmgr)
# define qse_get_current_dir(buf,size) qse_get_current_wcsdir(buf,size)
# define qse_get_file_attr(file,flags,attr) qse_get_wcsfile_attr(file,flags,attr)
# define qse_check_file_perm(file,flags,perm) qse_check_wcsfile_perm(file,flags,perm)
#endif
QSE_EXPORT int qse_get_prog_path (
QSE_EXPORT int qse_get_prog_path_with_mmgr (
const qse_char_t* argv0,
qse_char_t* buf,
qse_size_t size,
qse_mmgr_t* mmgr
);
QSE_EXPORT int qse_get_prog_path (
const qse_char_t* argv0,
qse_char_t* buf,
qse_size_t size
);
#if defined(__cplusplus)
}
#endif