added qse_isdriveabspath().
enhanced httpd to accept drive path as a doc root for win/os2
This commit is contained in:
@ -363,14 +363,17 @@ void* qse_mux_getxtn (qse_mux_t* mux)
|
||||
return QSE_XTN (mux);
|
||||
}
|
||||
|
||||
qse_mux_errnum_t qse_mux_geterrnum (qse_mux_t* mux)
|
||||
{
|
||||
return mux->errnum;
|
||||
}
|
||||
|
||||
#define ALIGN_TO(num,align) ((((num) + (align) - 1) / (align)) * (align))
|
||||
|
||||
int qse_mux_insert (qse_mux_t* mux, const qse_mux_evt_t* evt)
|
||||
{
|
||||
#if defined(__OS2__)
|
||||
|
||||
if (evt) qse_printf (QSE_T("INSERTING HANDLE %d\n"), (int)evt->hnd);
|
||||
else qse_printf (QSE_T("WHAT..... NULL\n"));
|
||||
if (evt->hnd >= mux->me.ubound)
|
||||
{
|
||||
qse_mux_evt_t** tmp;
|
||||
@ -564,6 +567,7 @@ int qse_mux_delete (qse_mux_t* mux, const qse_mux_evt_t* evt)
|
||||
}
|
||||
|
||||
mevt->hnd = -1;
|
||||
mevt->mask = 0;
|
||||
mux->size--;
|
||||
return 0;
|
||||
|
||||
@ -608,6 +612,7 @@ int qse_mux_delete (qse_mux_t* mux, const qse_mux_evt_t* evt)
|
||||
|
||||
done:
|
||||
mevt->hnd = -1;
|
||||
mevt->mask = 0;
|
||||
mux->size--;
|
||||
return 0;
|
||||
|
||||
@ -652,15 +657,13 @@ int qse_mux_poll (qse_mux_t* mux, const qse_ntime_t* tmout)
|
||||
for (i = 0; i < mux->me.ubound; i++)
|
||||
{
|
||||
evt = mux->me.ptr[i];
|
||||
if (evt && (evt->mask & QSE_MUX_IN))
|
||||
mux->fdarr[count++] = evt->hnd;
|
||||
if (evt && (evt->mask & QSE_MUX_IN)) mux->fdarr[count++] = evt->hnd;
|
||||
}
|
||||
rcount = count;
|
||||
for (i = 0; i < mux->me.ubound; i++)
|
||||
{
|
||||
evt = mux->me.ptr[i];
|
||||
if (evt && (evt->mask & QSE_MUX_OUT))
|
||||
mux->fdarr[count++] = evt->hnd;
|
||||
if (evt && (evt->mask & QSE_MUX_OUT)) mux->fdarr[count++] = evt->hnd;
|
||||
}
|
||||
wcount = count - rcount;
|
||||
|
||||
@ -677,22 +680,21 @@ int qse_mux_poll (qse_mux_t* mux, const qse_ntime_t* tmout)
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
evt = mux->me.ptr[i];
|
||||
if (!evt || evt->hnd != i || mux->fdarr[i] == -1) continue;
|
||||
if (mux->fdarr[i] == -1) continue;
|
||||
|
||||
QSE_MEMCPY (&xevt, evt, QSE_SIZEOF(xevt));
|
||||
evt = mux->me.ptr[mux->fdarr[i]];
|
||||
if (!evt || evt->hnd != mux->fdarr[i]) continue;
|
||||
|
||||
xevt.mask = 0;
|
||||
if ((evt->mask & QSE_MUX_IN) && i < rcount)
|
||||
xevt.mask |= QSE_MUX_IN;
|
||||
if ((evt->mask & QSE_MUX_OUT) && i >= rcount)
|
||||
xevt.mask |= QSE_MUX_OUT;
|
||||
xevt = *evt;
|
||||
|
||||
if (xevt.mask > 0) mux->evtfun (mux, &xevt);
|
||||
/* due to the way i check 'fdarr' , it can't have
|
||||
* both IN and OUT at the same time. they are
|
||||
* triggered separately */
|
||||
xevt.mask = (i < rcount)? QSE_MUX_IN: QSE_MUX_OUT;
|
||||
mux->evtfun (mux, &xevt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return n;
|
||||
|
||||
#elif defined(USE_SELECT)
|
||||
@ -728,8 +730,7 @@ int qse_mux_poll (qse_mux_t* mux, const qse_ntime_t* tmout)
|
||||
evt = mux->me.ptr[i];
|
||||
if (!evt || evt->hnd != i) continue;
|
||||
|
||||
QSE_MEMCPY (&xevt, evt, QSE_SIZEOF(xevt));
|
||||
|
||||
xevt = *evt;
|
||||
xevt.mask = 0;
|
||||
if ((evt->mask & QSE_MUX_IN) &&
|
||||
FD_ISSET(evt->hnd, &mux->tmprset)) xevt.mask |= QSE_MUX_IN;
|
||||
@ -764,8 +765,7 @@ int qse_mux_poll (qse_mux_t* mux, const qse_ntime_t* tmout)
|
||||
|
||||
evt = mux->ee.ptr[i].data.ptr;
|
||||
|
||||
QSE_MEMCPY (&xevt, evt, QSE_SIZEOF(xevt));
|
||||
|
||||
xevt = *evt;
|
||||
xevt.mask = 0;
|
||||
if (mux->ee.ptr[i].events & EPOLLIN) xevt.mask |= QSE_MUX_IN;
|
||||
if (mux->ee.ptr[i].events & EPOLLOUT) xevt.mask |= QSE_MUX_OUT;
|
||||
|
@ -53,6 +53,14 @@ int qse_ismbsdrivepath (const qse_mchar_t* path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qse_ismbsdriveabspath (const qse_mchar_t* path)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
if (IS_MDRIVE(path) && IS_MSEP(path[2])) return 1;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qse_ismbsdrivecurpath (const qse_mchar_t* path)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
@ -360,6 +368,14 @@ int qse_iswcsdrivepath (const qse_wchar_t* path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qse_iswcsdriveabspath (const qse_wchar_t* path)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
if (IS_WDRIVE(path) && IS_WSEP(path[2])) return 1;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qse_iswcsdrivecurpath (const qse_wchar_t* path)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
|
Reference in New Issue
Block a user