enhanced qse_fs_move() for dos build
This commit is contained in:
@ -57,28 +57,28 @@ static qse_fio_errnum_t syserr_to_errnum (DWORD e)
|
||||
|
||||
switch (e)
|
||||
{
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
case ERROR_OUTOFMEMORY:
|
||||
return QSE_FIO_ENOMEM;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_HANDLE:
|
||||
case ERROR_INVALID_NAME:
|
||||
return QSE_FIO_EINVAL;
|
||||
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_FIO_ENOENT;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
return QSE_FIO_EACCES;
|
||||
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
case ERROR_OUTOFMEMORY:
|
||||
return QSE_FIO_ENOMEM;
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_FIO_ENOENT;
|
||||
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
case ERROR_FILE_EXISTS:
|
||||
return QSE_FIO_EEXIST;
|
||||
|
||||
default:
|
||||
return QSE_FIO_ESUBSYS;
|
||||
return QSE_FIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#elif defined(__OS2__)
|
||||
@ -86,26 +86,26 @@ static qse_fio_errnum_t syserr_to_errnum (APIRET e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
return QSE_FIO_ENOMEM;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_HANDLE:
|
||||
case ERROR_INVALID_NAME:
|
||||
return QSE_FIO_EINVAL;
|
||||
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_FIO_ENOENT;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
return QSE_FIO_EACCES;
|
||||
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
return QSE_FIO_ENOMEM;
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_FIO_ENOENT;
|
||||
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
return QSE_FIO_EEXIST;
|
||||
|
||||
default:
|
||||
return QSE_FIO_ESUBSYS;
|
||||
return QSE_FIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#elif defined(__DOS__)
|
||||
@ -119,17 +119,17 @@ static qse_fio_errnum_t syserr_to_errnum (int e)
|
||||
case EINVAL:
|
||||
return QSE_FIO_EINVAL;
|
||||
|
||||
case ENOENT:
|
||||
return QSE_FIO_ENOENT;
|
||||
|
||||
case EACCES:
|
||||
return QSE_FIO_EACCES;
|
||||
|
||||
case ENOENT:
|
||||
return QSE_FIO_ENOENT;
|
||||
|
||||
case EEXIST:
|
||||
return QSE_FIO_EEXIST;
|
||||
|
||||
default:
|
||||
return QSE_FIO_ESUBSYS;
|
||||
return QSE_FIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#else
|
||||
@ -156,7 +156,7 @@ static qse_fio_errnum_t syserr_to_errnum (int e)
|
||||
return QSE_FIO_EINTR;
|
||||
|
||||
default:
|
||||
return QSE_FIO_ESUBSYS;
|
||||
return QSE_FIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -25,34 +25,17 @@ qse_fs_errnum_t qse_fs_geterrnum (qse_fs_t* fs)
|
||||
return fs->errnum;
|
||||
}
|
||||
|
||||
const qse_char_t* qse_fs_geterrmsg (qse_fs_t* fs)
|
||||
{
|
||||
static const qse_char_t* errstr[] =
|
||||
{
|
||||
QSE_T("no error"),
|
||||
QSE_T("internal error that should never have happened"),
|
||||
|
||||
QSE_T("insufficient memory"),
|
||||
QSE_T("invalid parameter or data"),
|
||||
QSE_T("access denied"),
|
||||
QSE_T("operation not permitted"),
|
||||
QSE_T("no such entry"),
|
||||
QSE_T("no working directory set"),
|
||||
QSE_T("operation not permitted on directory"),
|
||||
QSE_T("entry already exists"),
|
||||
QSE_T("cross-device operation not allowed"),
|
||||
QSE_T("system error")
|
||||
};
|
||||
|
||||
return (fs->errnum >= 0 && fs->errnum < QSE_COUNTOF(errstr))?
|
||||
errstr[fs->errnum]: QSE_T("unknown error");
|
||||
}
|
||||
|
||||
qse_fs_errnum_t qse_fs_syserrtoerrnum (qse_fs_t* fs, qse_fs_syserr_t e)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
switch (e)
|
||||
{
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
case ERROR_OUTOFMEMORY:
|
||||
return QSE_FS_ENOMEM;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_HANDLE:
|
||||
case ERROR_INVALID_NAME:
|
||||
case ERROR_DIRECTORY:
|
||||
return QSE_FS_EINVAL;
|
||||
@ -64,47 +47,104 @@ qse_fs_errnum_t qse_fs_syserrtoerrnum (qse_fs_t* fs, qse_fs_syserr_t e)
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_FS_ENOENT;
|
||||
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
case ERROR_OUTOFMEMORY:
|
||||
return QSE_FS_ENOMEM;
|
||||
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
case ERROR_FILE_EXISTS:
|
||||
return QSE_FS_EEXIST;
|
||||
|
||||
case ERROR_NOT_SAME_DEVICE:
|
||||
return QSE_FS_EXDEV;
|
||||
|
||||
default:
|
||||
return QSE_FS_ESYSTEM;
|
||||
return QSE_FS_ESYSERR;
|
||||
}
|
||||
#else
|
||||
#elif defined(__OS2__)
|
||||
|
||||
switch (e)
|
||||
{
|
||||
case EINVAL:
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
return QSE_FS_ENOMEM;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_HANDLE:
|
||||
case ERROR_INVALID_NAME:
|
||||
return QSE_FS_EINVAL;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
return QSE_FS_EACCES;
|
||||
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_FS_ENOENT;
|
||||
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
return QSE_FS_EEXIST;
|
||||
|
||||
case ERROR_NOT_SAME_DEVICE:
|
||||
return QSE_FS_EXDEV;
|
||||
|
||||
default:
|
||||
return QSE_FS_ESYSERR;
|
||||
}
|
||||
|
||||
#elif defined(__DOS__)
|
||||
|
||||
switch (e)
|
||||
{
|
||||
case ENOMEM:
|
||||
return QSE_FS_ENOMEM;
|
||||
|
||||
case EACCES:
|
||||
return QSE_FS_EACCES;
|
||||
case EINVAL:
|
||||
return QSE_FS_EINVAL;
|
||||
|
||||
case EACCES:
|
||||
case EPERM:
|
||||
return QSE_FS_EPERM;
|
||||
return QSE_FS_EACCES;
|
||||
|
||||
case ENOENT:
|
||||
case ENOTDIR:
|
||||
return QSE_FS_ENOENT;
|
||||
|
||||
case EEXIST:
|
||||
return QSE_FS_EEXIST;
|
||||
|
||||
case EISDIR:
|
||||
return QSE_FS_EISDIR;
|
||||
|
||||
default:
|
||||
return QSE_FS_ESYSERR;
|
||||
}
|
||||
|
||||
#else
|
||||
switch (e)
|
||||
{
|
||||
case ENOMEM:
|
||||
return QSE_FS_ENOMEM;
|
||||
|
||||
case EINVAL:
|
||||
return QSE_FS_EINVAL;
|
||||
|
||||
case EACCES:
|
||||
case EPERM:
|
||||
return QSE_FS_EACCES;
|
||||
|
||||
case ENOENT:
|
||||
case ENOTDIR:
|
||||
return QSE_FS_ENOENT;
|
||||
|
||||
case EEXIST:
|
||||
return QSE_FS_EEXIST;
|
||||
|
||||
case EINTR:
|
||||
return QSE_FS_EINTR;
|
||||
|
||||
case EISDIR:
|
||||
return QSE_FS_EISDIR;
|
||||
|
||||
case EXDEV:
|
||||
return QSE_FS_EXDEV;
|
||||
|
||||
default:
|
||||
return QSE_FS_ESYSTEM;
|
||||
return QSE_FS_ESYSERR;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -45,16 +45,20 @@ struct fop_t
|
||||
|
||||
|
||||
#if defined(_WIN32)
|
||||
qse_wchar_t* old_path;
|
||||
qse_wchar_t* new_path;
|
||||
qse_wchar_t* new_path2;
|
||||
/* nothing yet */
|
||||
#elif defined(__OS2__)
|
||||
qse_mchar_t* old_path;
|
||||
qse_mchar_t* new_path;
|
||||
#elif defined(__DOS__)
|
||||
qse_mchar_t* old_path;
|
||||
qse_mchar_t* new_path;
|
||||
#else
|
||||
qse_lstat_t old_stat;
|
||||
qse_lstat_t new_stat;
|
||||
|
||||
qse_mchar_t* old_path;
|
||||
qse_mchar_t* new_path;
|
||||
qse_mchar_t* new_path2;
|
||||
|
||||
qse_lstat_t old_stat;
|
||||
qse_lstat_t new_stat;
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -63,7 +67,9 @@ typedef struct fop_t fop_t;
|
||||
int qse_fs_move (
|
||||
qse_fs_t* fs, const qse_char_t* oldpath, const qse_char_t* newpath)
|
||||
{
|
||||
|
||||
#if defined(_WIN32)
|
||||
/* ------------------------------------------------------ */
|
||||
/* TODO: improve it... */
|
||||
|
||||
/* TODO: support cross-volume move, move by copy/delete, etc ... */
|
||||
@ -87,21 +93,116 @@ int qse_fs_move (
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* ------------------------------------------------------ */
|
||||
|
||||
#elif defined(__OS2__)
|
||||
# error NOT IMPLEMENTED
|
||||
#elif defined(__DOS__)
|
||||
# error NOT IMPLEMENTED
|
||||
#else
|
||||
/* ------------------------------------------------------ */
|
||||
|
||||
/* TODO: improve it */
|
||||
int ret = 0;
|
||||
fop_t fop;
|
||||
|
||||
QSE_MEMSET (&fop, 0, QSE_SIZEOF(fop));
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
fop.old_path = oldpath;
|
||||
fop.new_path = newpath;
|
||||
#else
|
||||
fop.old_path = qse_wcstombsdup (oldpath, fs->mmgr);
|
||||
fop.new_path = qse_wcstombsdup (newpath, fs->mmgr);
|
||||
if (fop.old_path == QSE_NULL || fop.old_path == QSE_NULL)
|
||||
{
|
||||
fs->errnum = QSE_FS_ENOMEM;
|
||||
ret = -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
APIRET rc;
|
||||
|
||||
rc = DosMove (fop.old_path, fop.new_path);
|
||||
if (rc == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
DosDelete (fop.new_path);
|
||||
rc = DosMove (fop.old_path, fop.new_path);
|
||||
}
|
||||
if (rc != NO_ERROR)
|
||||
{
|
||||
fs->errnum = qse_fs_syserrtoerrnum (fs, rc);
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
/* nothing special */
|
||||
#else
|
||||
if (fop.old_path) QSE_MMGR_FREE (fs->mmgr, fop.old_path);
|
||||
if (fop.new_path) QSE_MMGR_FREE (fs->mmgr, fop.new_path);
|
||||
#endif
|
||||
return ret;
|
||||
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
|
||||
#elif defined(__DOS__)
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
/* TODO: improve it */
|
||||
fop_t fop;
|
||||
int ret = 0;
|
||||
|
||||
QSE_MEMSET (&fop, 0, QSE_SIZEOF(fop));
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
fop.old_path = oldpath;
|
||||
fop.new_path = newpath;
|
||||
#else
|
||||
fop.old_path = qse_wcstombsdup (oldpath, fs->mmgr);
|
||||
fop.new_path = qse_wcstombsdup (newpath, fs->mmgr);
|
||||
if (fop.old_path == QSE_NULL || fop.old_path == QSE_NULL)
|
||||
{
|
||||
fs->errnum = QSE_FS_ENOMEM;
|
||||
ret = -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
if (rename (fop.old_path, fop.new_path) <= -1)
|
||||
{
|
||||
/* FYI, rename() on watcom seems to set
|
||||
* errno to EACCES when the new path exists. */
|
||||
|
||||
unlink (fop.new_path);
|
||||
if (rename (fop.old_path, fop.new_path) <= -1)
|
||||
{
|
||||
fs->errnum = qse_fs_syserrtoerrnum (fs, errno);
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
/* nothing special */
|
||||
#else
|
||||
if (fop.old_path) QSE_MMGR_FREE (fs->mmgr, fop.old_path);
|
||||
if (fop.new_path) QSE_MMGR_FREE (fs->mmgr, fop.new_path);
|
||||
#endif
|
||||
return ret;
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
|
||||
#else
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
fop_t fop;
|
||||
QSE_MEMSET (&fop, 0, QSE_SIZEOF(fop));
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
fop.old_path = oldpath;
|
||||
fop.new_path = newpath;
|
||||
#else
|
||||
fop.old_path = qse_wcstombsdup (oldpath, fs->mmgr);
|
||||
fop.new_path = qse_wcstombsdup (newpath, fs->mmgr);
|
||||
if (fop.old_path == QSE_NULL || fop.old_path == QSE_NULL)
|
||||
@ -109,7 +210,7 @@ int qse_fs_move (
|
||||
fs->errnum = QSE_FS_ENOMEM;
|
||||
goto oops;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* TOOD: implement confirmatio
|
||||
if (overwrite_callback is set)
|
||||
@ -226,26 +327,27 @@ qse_printf (QSE_T("TODO: cross-device copy....\n"));
|
||||
copy recursively...
|
||||
#endif
|
||||
|
||||
|
||||
done:
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
if (fop.new_path2) QSE_MMGR_FREE (fs->mmgr, fop.new_path2);
|
||||
#else
|
||||
#else
|
||||
if (fop.new_path2) QSE_MMGR_FREE (fs->mmgr, fop.new_path2);
|
||||
QSE_MMGR_FREE (fs->mmgr, fop.old_path);
|
||||
QSE_MMGR_FREE (fs->mmgr, fop.new_path);
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
if (fop.new_path2) QSE_MMGR_FREE (fs->mmgr, fop.new_path2);
|
||||
#else
|
||||
#else
|
||||
if (fop.new_path2) QSE_MMGR_FREE (fs->mmgr, fop.new_path2);
|
||||
if (fop.old_path) QSE_MMGR_FREE (fs->mmgr, fop.old_path);
|
||||
if (fop.new_path) QSE_MMGR_FREE (fs->mmgr, fop.new_path);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
return -1;
|
||||
/* ------------------------------------------------------ */
|
||||
|
||||
#endif
|
||||
}
|
||||
|
@ -244,8 +244,10 @@ int qse_fs_chdir (qse_fs_t* fs, const qse_char_t* name)
|
||||
|
||||
#elif defined(__OS2__)
|
||||
/* TODO: implement this */
|
||||
return 0;
|
||||
#elif defined(__DOS__)
|
||||
/* TODO: implement this */
|
||||
return 0;
|
||||
#else
|
||||
|
||||
idx = 0;
|
||||
|
@ -24,12 +24,14 @@
|
||||
# include <windows.h>
|
||||
typedef DWORD qse_fs_syserr_t;
|
||||
#elif defined(__OS2__)
|
||||
# error NOT IMPLEMENTED
|
||||
# define INCL_DOSERRORS
|
||||
# include <os2.h>
|
||||
typedef APIRET qse_fs_syserr_t;
|
||||
#elif defined(__DOS__)
|
||||
# error NOT IMPLEMENTED
|
||||
# include <errno.h>
|
||||
typedef int qse_fs_syserr_t;
|
||||
#else
|
||||
# include "syscall.h"
|
||||
# include <errno.h>
|
||||
typedef int qse_fs_syserr_t;
|
||||
#endif
|
||||
|
||||
|
@ -52,21 +52,21 @@ static qse_pio_errnum_t syserr_to_errnum (DWORD e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
case ERROR_OUTOFMEMORY:
|
||||
return QSE_PIO_ENOMEM;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_HANDLE:
|
||||
case ERROR_INVALID_NAME:
|
||||
return QSE_PIO_EINVAL;
|
||||
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
return QSE_PIO_EACCES;
|
||||
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
case ERROR_OUTOFMEMORY:
|
||||
return QSE_PIO_ENOMEM;
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
case ERROR_FILE_EXISTS:
|
||||
@ -76,7 +76,7 @@ static qse_pio_errnum_t syserr_to_errnum (DWORD e)
|
||||
return QSE_PIO_EPIPE;
|
||||
|
||||
default:
|
||||
return QSE_PIO_ESUBSYS;
|
||||
return QSE_PIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#elif defined(__OS2__)
|
||||
@ -84,20 +84,20 @@ static qse_pio_errnum_t syserr_to_errnum (APIRET e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
return QSE_PIO_ENOMEM;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_HANDLE:
|
||||
case ERROR_INVALID_NAME:
|
||||
return QSE_PIO_EINVAL;
|
||||
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
return QSE_PIO_EACCES;
|
||||
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
return QSE_PIO_ENOMEM;
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
return QSE_PIO_EEXIST;
|
||||
@ -106,7 +106,7 @@ static qse_pio_errnum_t syserr_to_errnum (APIRET e)
|
||||
return QSE_PIO_EPIPE;
|
||||
|
||||
default:
|
||||
return QSE_PIO_ESUBSYS;
|
||||
return QSE_PIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#elif defined(__DOS__)
|
||||
@ -120,17 +120,17 @@ static qse_pio_errnum_t syserr_to_errnum (int e)
|
||||
case EINVAL:
|
||||
return QSE_PIO_EINVAL;
|
||||
|
||||
case ENOENT:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case EACCES:
|
||||
return QSE_PIO_EACCES;
|
||||
|
||||
case ENOENT:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case EEXIST:
|
||||
return QSE_PIO_EEXIST;
|
||||
|
||||
default:
|
||||
return QSE_PIO_ESUBSYS;
|
||||
return QSE_PIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#else
|
||||
@ -144,12 +144,12 @@ static qse_pio_errnum_t syserr_to_errnum (int e)
|
||||
case EINVAL:
|
||||
return QSE_PIO_EINVAL;
|
||||
|
||||
case ENOENT:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case EACCES:
|
||||
return QSE_PIO_EACCES;
|
||||
|
||||
case ENOENT:
|
||||
return QSE_PIO_ENOENT;
|
||||
|
||||
case EEXIST:
|
||||
return QSE_PIO_EEXIST;
|
||||
|
||||
@ -160,7 +160,7 @@ static qse_pio_errnum_t syserr_to_errnum (int e)
|
||||
return QSE_PIO_EPIPE;
|
||||
|
||||
default:
|
||||
return QSE_PIO_ESUBSYS;
|
||||
return QSE_PIO_ESYSERR;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1663,7 +1663,7 @@ create_process:
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
if (pio->errnum == QSE_PIO_ENOERR) pio->errnum = QSE_PIO_ESUBSYS;
|
||||
if (pio->errnum == QSE_PIO_ENOERR) pio->errnum = QSE_PIO_ESYSERR;
|
||||
|
||||
#if defined(_WIN32)
|
||||
if (windevnul != INVALID_HANDLE_VALUE) CloseHandle (windevnul);
|
||||
@ -2049,7 +2049,7 @@ int qse_pio_wait (qse_pio_t* pio)
|
||||
if (w != WAIT_OBJECT_0)
|
||||
{
|
||||
/* WAIT_FAILED, WAIT_ABANDONED */
|
||||
pio->errnum = QSE_PIO_ESUBSYS;
|
||||
pio->errnum = QSE_PIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2062,7 +2062,7 @@ int qse_pio_wait (qse_pio_t* pio)
|
||||
CloseHandle (pio->child);
|
||||
pio->child = QSE_PIO_PID_NIL;
|
||||
|
||||
pio->errnum = QSE_PIO_ESUBSYS;
|
||||
pio->errnum = QSE_PIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2075,7 +2075,7 @@ int qse_pio_wait (qse_pio_t* pio)
|
||||
/* this should not happen as the control reaches here
|
||||
* only when WaitforSingleObject() is successful.
|
||||
* if it happends, close the handle and return an error */
|
||||
pio->errnum = QSE_PIO_ESUBSYS;
|
||||
pio->errnum = QSE_PIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2108,7 +2108,7 @@ int qse_pio_wait (qse_pio_t* pio)
|
||||
if (rc != NO_ERROR)
|
||||
{
|
||||
/* WAIT_FAILED, WAIT_ABANDONED */
|
||||
pio->errnum = QSE_PIO_ESUBSYS;
|
||||
pio->errnum = QSE_PIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2225,7 +2225,7 @@ int qse_pio_kill (qse_pio_t* pio)
|
||||
n = TerminateProcess (pio->child, 255 + 1 + 9);
|
||||
if (n == FALSE)
|
||||
{
|
||||
pio->errnum = QSE_PIO_ESUBSYS;
|
||||
pio->errnum = QSE_PIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
@ -2235,7 +2235,7 @@ int qse_pio_kill (qse_pio_t* pio)
|
||||
rc = DosKillProcess (pio->child, DKP_PROCESSTREE);
|
||||
if (rc != NO_ERROR)
|
||||
{
|
||||
pio->errnum = QSE_PIO_ESUBSYS;
|
||||
pio->errnum = QSE_PIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
@ -2247,7 +2247,7 @@ int qse_pio_kill (qse_pio_t* pio)
|
||||
|
||||
#else
|
||||
n = QSE_KILL (pio->child, SIGKILL);
|
||||
if (n <= -1) pio->errnum = QSE_PIO_ESUBSYS;
|
||||
if (n <= -1) pio->errnum = QSE_PIO_ESYSERR;
|
||||
return n;
|
||||
#endif
|
||||
}
|
||||
|
@ -57,8 +57,8 @@ static qse_sio_errnum_t fio_errnum_to_sio_errnum (qse_fio_t* fio)
|
||||
return QSE_SIO_EEXIST;
|
||||
case QSE_FIO_EINTR:
|
||||
return QSE_SIO_EINTR;
|
||||
case QSE_FIO_ESUBSYS:
|
||||
return QSE_SIO_ESUBSYS;
|
||||
case QSE_FIO_ESYSERR:
|
||||
return QSE_SIO_ESYSERR;
|
||||
case QSE_FIO_ENOIMPL:
|
||||
return QSE_SIO_ENOIMPL;
|
||||
default:
|
||||
@ -443,14 +443,14 @@ qse_ssize_t qse_sio_putwcs (qse_sio_t* sio, const qse_wchar_t* str)
|
||||
sio->u.file.handle, cur, left,
|
||||
&count, QSE_NULL) == FALSE)
|
||||
{
|
||||
sio->errnum = QSE_SIO_ESUBSYS;
|
||||
sio->errnum = QSE_SIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
if (count == 0) break;
|
||||
|
||||
if (count > left)
|
||||
{
|
||||
sio->errnum = QSE_SIO_ESUBSYS;
|
||||
sio->errnum = QSE_SIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -502,7 +502,7 @@ qse_ssize_t qse_sio_putwcsn (
|
||||
sio->u.file.handle, cur, left,
|
||||
&count, QSE_NULL) == FALSE)
|
||||
{
|
||||
sio->errnum = QSE_SIO_ESUBSYS;
|
||||
sio->errnum = QSE_SIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
if (count == 0) break;
|
||||
@ -517,7 +517,7 @@ qse_ssize_t qse_sio_putwcsn (
|
||||
*/
|
||||
if (count > left)
|
||||
{
|
||||
sio->errnum = QSE_SIO_ESUBSYS;
|
||||
sio->errnum = QSE_SIO_ESYSERR;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user