fixed a bug of ase_fio_open in handling flags
This commit is contained in:
parent
25a776e842
commit
596b42a211
@ -15,10 +15,11 @@ enum ase_fio_open_flag_t
|
|||||||
|
|
||||||
ASE_FIO_READ = (1 << 1),
|
ASE_FIO_READ = (1 << 1),
|
||||||
ASE_FIO_WRITE = (1 << 2),
|
ASE_FIO_WRITE = (1 << 2),
|
||||||
ASE_FIO_CREATE = (1 << 3),
|
ASE_FIO_APPEND = (1 << 3),
|
||||||
ASE_FIO_TRUNCATE = (1 << 4),
|
|
||||||
ASE_FIO_EXCLUSIVE = (1 << 5),
|
ASE_FIO_CREATE = (1 << 4),
|
||||||
ASE_FIO_APPEND = (1 << 6),
|
ASE_FIO_TRUNCATE = (1 << 5),
|
||||||
|
ASE_FIO_EXCLUSIVE = (1 << 6),
|
||||||
ASE_FIO_SYNC = (1 << 7),
|
ASE_FIO_SYNC = (1 << 7),
|
||||||
|
|
||||||
/* for ms windows only */
|
/* for ms windows only */
|
||||||
@ -60,6 +61,14 @@ struct ase_fio_t
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****f* ase.fio/ase_fio_open
|
||||||
|
* NAME
|
||||||
|
* ase_fio_open - open a file
|
||||||
|
*
|
||||||
|
* PARAMETERS
|
||||||
|
*
|
||||||
|
* SYNOPSIS
|
||||||
|
*/
|
||||||
ase_fio_t* ase_fio_open (
|
ase_fio_t* ase_fio_open (
|
||||||
ase_mmgr_t* mmgr,
|
ase_mmgr_t* mmgr,
|
||||||
ase_size_t ext,
|
ase_size_t ext,
|
||||||
@ -67,6 +76,7 @@ ase_fio_t* ase_fio_open (
|
|||||||
int flags,
|
int flags,
|
||||||
int mode
|
int mode
|
||||||
);
|
);
|
||||||
|
/******/
|
||||||
|
|
||||||
void ase_fio_close (
|
void ase_fio_close (
|
||||||
ase_fio_t* fio
|
ase_fio_t* fio
|
||||||
|
@ -16,10 +16,11 @@ enum ase_sio_open_flag_t
|
|||||||
|
|
||||||
ASE_SIO_READ = ASE_FIO_READ,
|
ASE_SIO_READ = ASE_FIO_READ,
|
||||||
ASE_SIO_WRITE = ASE_FIO_WRITE,
|
ASE_SIO_WRITE = ASE_FIO_WRITE,
|
||||||
|
ASE_SIO_APPEND = ASE_FIO_APPEND,
|
||||||
|
|
||||||
ASE_SIO_CREATE = ASE_FIO_CREATE,
|
ASE_SIO_CREATE = ASE_FIO_CREATE,
|
||||||
ASE_SIO_TRUNCATE = ASE_FIO_TRUNCATE,
|
ASE_SIO_TRUNCATE = ASE_FIO_TRUNCATE,
|
||||||
ASE_SIO_EXCLUSIVE = ASE_FIO_EXCLUSIVE,
|
ASE_SIO_EXCLUSIVE = ASE_FIO_EXCLUSIVE,
|
||||||
ASE_SIO_APPEND = ASE_FIO_APPEND,
|
|
||||||
ASE_SIO_SYNC = ASE_FIO_SYNC,
|
ASE_SIO_SYNC = ASE_FIO_SYNC,
|
||||||
|
|
||||||
ASE_SIO_NOSHRD = ASE_FIO_NOSHRD,
|
ASE_SIO_NOSHRD = ASE_FIO_NOSHRD,
|
||||||
|
@ -73,14 +73,19 @@ ase_fio_t* ase_fio_init (
|
|||||||
DWORD creation_disposition = 0;
|
DWORD creation_disposition = 0;
|
||||||
DWORD attributes = FILE_ATTRIBUTE_NORMAL;
|
DWORD attributes = FILE_ATTRIBUTE_NORMAL;
|
||||||
|
|
||||||
if (flags & ASE_FIO_READ) desired_access |= GENERIC_READ;
|
|
||||||
if (flags & ASE_FIO_WRITE) desired_access |= GENERIC_WRITE;
|
|
||||||
if (flags & ASE_FIO_APPEND)
|
if (flags & ASE_FIO_APPEND)
|
||||||
{
|
{
|
||||||
/* this is not officialy documented for CreateFile.
|
/* this is not officialy documented for CreateFile.
|
||||||
* ZwCreateFile (kernel) seems to document it */
|
* ZwCreateFile (kernel) seems to document it */
|
||||||
desired_access |= FILE_APPEND_DATA;
|
desired_access |= FILE_APPEND_DATA;
|
||||||
}
|
}
|
||||||
|
else if (flags & ASE_FIO_WRITE)
|
||||||
|
{
|
||||||
|
/* In WIN32, FILE_APPEND_DATA and GENERIC_WRITE can't
|
||||||
|
* be used together */
|
||||||
|
desired_access |= GENERIC_WRITE;
|
||||||
|
}
|
||||||
|
if (flags & ASE_FIO_READ) desired_access |= GENERIC_READ;
|
||||||
|
|
||||||
if (flags & ASE_FIO_CREATE)
|
if (flags & ASE_FIO_CREATE)
|
||||||
{
|
{
|
||||||
@ -132,13 +137,24 @@ ase_fio_t* ase_fio_init (
|
|||||||
if (ase_wcstombs_strict (path,
|
if (ase_wcstombs_strict (path,
|
||||||
path_mb, ASE_COUNTOF(path_mb)) == -1) return ASE_NULL;
|
path_mb, ASE_COUNTOF(path_mb)) == -1) return ASE_NULL;
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
* rwa -> RDWR | APPEND
|
||||||
|
* ra -> RDONLY | APPEND
|
||||||
|
* wa -> WRONLY | APPEND
|
||||||
|
* a -> WRONLY | APPEND
|
||||||
|
*/
|
||||||
if ((flags & ASE_FIO_READ) &&
|
if ((flags & ASE_FIO_READ) &&
|
||||||
(flags & ASE_FIO_WRITE)) desired_access |= O_RDWR;
|
(flags & ASE_FIO_WRITE)) desired_access |= O_RDWR;
|
||||||
else if (flags & ASE_FIO_READ) desired_access |= O_RDONLY;
|
else if (flags & ASE_FIO_READ) desired_access |= O_RDONLY;
|
||||||
else desired_access |= O_WRONLY;
|
else if (flags & ASE_FIO_WRITE) desired_access |= O_WRONLY;
|
||||||
|
|
||||||
|
if (flags & ASE_FIO_APPEND)
|
||||||
|
{
|
||||||
|
if (!(flags & ASE_FIO_READ) &&
|
||||||
|
!(flags & ASE_FIO_WRITE)) desired_access |= O_WRONLY;
|
||||||
|
desired_access |= O_APPEND;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & ASE_FIO_APPEND) desired_access |= O_APPEND;
|
|
||||||
if (flags & ASE_FIO_CREATE) desired_access |= O_CREAT;
|
if (flags & ASE_FIO_CREATE) desired_access |= O_CREAT;
|
||||||
if (flags & ASE_FIO_TRUNCATE) desired_access |= O_TRUNC;
|
if (flags & ASE_FIO_TRUNCATE) desired_access |= O_TRUNC;
|
||||||
if (flags & ASE_FIO_EXCLUSIVE) desired_access |= O_EXCL;
|
if (flags & ASE_FIO_EXCLUSIVE) desired_access |= O_EXCL;
|
||||||
|
Loading…
Reference in New Issue
Block a user