fixed a bug of ase_fio_open in handling flags

This commit is contained in:
hyung-hwan 2008-12-12 23:19:35 +00:00
parent 25a776e842
commit 596b42a211
3 changed files with 37 additions and 10 deletions

View File

@ -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

View File

@ -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,

View File

@ -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;