added the errnum field to qse_pio_t
This commit is contained in:
@ -449,23 +449,25 @@ int qse_pio_wait (qse_pio_t* pio, int flags)
|
||||
|
||||
if (pio->child == QSE_PIO_PID_NIL) return -1;
|
||||
|
||||
if (flags & QSE_PIO_NOWAIT) opt |= WNOHANG;
|
||||
if (flags & QSE_PIO_NOHANG) opt |= WNOHANG;
|
||||
|
||||
while (1)
|
||||
{
|
||||
int n = QSE_WAITPID (pio->child, &status, opt);
|
||||
|
||||
qse_printf (QSE_T("n=%d,pio->child=%d,errno=%d,ECHILD=%d\n"), n, pio->child, errno, ECHILD);
|
||||
if (n == -1)
|
||||
{
|
||||
if (errno == ECHILD)
|
||||
{
|
||||
/* most likely, the process has already been waitpid()ed on. */
|
||||
/* most likely, the process has already been
|
||||
* waitpid()ed on. */
|
||||
|
||||
/* TODO: what should we do... ? */
|
||||
/* ??? TREAT AS NORMAL??? => cannot know exit code => TREAT AS ERROR but reset pio->child */
|
||||
|
||||
pio->child = QSE_PIO_PID_NIL;
|
||||
ret = -1; /* OR ECHILD / QSE_PIO_ECHILD */
|
||||
pio->errnum = QSE_PIO_ECHILD;
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -475,7 +477,7 @@ qse_printf (QSE_T("n=%d,pio->child=%d,errno=%d,ECHILD=%d\n"), n, pio->child, err
|
||||
if (n == 0)
|
||||
{
|
||||
/* when WNOHANG is not specified, 0 can't be returned */
|
||||
QSE_ASSERT (flags & QSE_PIO_NOWAIT);
|
||||
QSE_ASSERT (flags & QSE_PIO_NOHANG);
|
||||
|
||||
ret = -2;
|
||||
/* the child process is still alive */
|
||||
|
@ -98,7 +98,7 @@ void qse_tio_setmmgr (qse_tio_t* tio, qse_mmgr_t* mmgr)
|
||||
tio->mmgr = mmgr;
|
||||
}
|
||||
|
||||
int qse_tio_geterrnum (qse_tio_t* tio)
|
||||
qse_tio_err_t qse_tio_geterrnum (qse_tio_t* tio)
|
||||
{
|
||||
return tio->errnum;
|
||||
}
|
||||
|
Reference in New Issue
Block a user