added mutex protection to input functions in sio
This commit is contained in:
parent
8bbef694f9
commit
6f314b0dd8
152
qse/lib/si/sio.c
152
qse/lib/si/sio.c
@ -40,8 +40,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define LOCK(sio) do { if ((sio)->mtx) qse_mtx_lock ((sio)->mtx, QSE_NULL); } while(0)
|
#define LOCK_OUTPUT(sio) do { if ((sio)->mtx) qse_mtx_lock ((sio)->mtx, QSE_NULL); } while(0)
|
||||||
#define UNLOCK(sio) do { if ((sio)->mtx) qse_mtx_unlock ((sio)->mtx); } while(0)
|
#define UNLOCK_OUTPUT(sio) do { if ((sio)->mtx) qse_mtx_unlock ((sio)->mtx); } while(0)
|
||||||
|
|
||||||
|
/* TODO: currently, LOCK_INPUT and LOCK_OUTPUT don't have difference.
|
||||||
|
* can i just use two difference mutex objects to differentiate? */
|
||||||
|
#define LOCK_INPUT(sio) do { if ((sio)->mtx) qse_mtx_lock ((sio)->mtx, QSE_NULL); } while(0)
|
||||||
|
#define UNLOCK_INPUT(sio) do { if ((sio)->mtx) qse_mtx_unlock ((sio)->mtx); } while(0)
|
||||||
|
|
||||||
/* internal status codes */
|
/* internal status codes */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -308,26 +314,32 @@ qse_ssize_t qse_sio_flush (qse_sio_t* sio)
|
|||||||
{
|
{
|
||||||
qse_ssize_t n;
|
qse_ssize_t n;
|
||||||
|
|
||||||
|
LOCK_OUTPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_flush (&sio->tio.io);
|
n = qse_tio_flush(&sio->tio.io);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qse_sio_drain (qse_sio_t* sio)
|
void qse_sio_drain (qse_sio_t* sio)
|
||||||
{
|
{
|
||||||
|
LOCK_OUTPUT (sio);
|
||||||
qse_tio_drain (&sio->tio.io);
|
qse_tio_drain (&sio->tio.io);
|
||||||
|
UNLOCK_OUTPUT (sio);
|
||||||
}
|
}
|
||||||
|
|
||||||
qse_ssize_t qse_sio_getmb (qse_sio_t* sio, qse_mchar_t* c)
|
qse_ssize_t qse_sio_getmb (qse_sio_t* sio, qse_mchar_t* c)
|
||||||
{
|
{
|
||||||
qse_ssize_t n;
|
qse_ssize_t n;
|
||||||
|
|
||||||
|
LOCK_INPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_readmbs (&sio->tio.io, c, 1);
|
n = qse_tio_readmbs(&sio->tio.io, c, 1);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
UNLOCK_INPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -336,10 +348,12 @@ qse_ssize_t qse_sio_getwc (qse_sio_t* sio, qse_wchar_t* c)
|
|||||||
{
|
{
|
||||||
qse_ssize_t n;
|
qse_ssize_t n;
|
||||||
|
|
||||||
|
LOCK_INPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_readwcs (&sio->tio.io, c, 1);
|
n = qse_tio_readwcs(&sio->tio.io, c, 1);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
UNLOCK_INPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -355,14 +369,17 @@ qse_ssize_t qse_sio_getmbs (qse_sio_t* sio, qse_mchar_t* buf, qse_size_t size)
|
|||||||
* so I don't implement any hack here */
|
* so I don't implement any hack here */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LOCK_INPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_readmbs (&sio->tio.io, buf, size - 1);
|
n = qse_tio_readmbs(&sio->tio.io, buf, size - 1);
|
||||||
if (n <= -1)
|
if (n <= -1)
|
||||||
{
|
{
|
||||||
if (sio->errnum == QSE_SIO_ENOERR)
|
if (sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
UNLOCK_INPUT (sio);
|
||||||
|
|
||||||
buf[n] = QSE_MT('\0');
|
buf[n] = QSE_MT('\0');
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -375,10 +392,13 @@ qse_ssize_t qse_sio_getmbsn (qse_sio_t* sio, qse_mchar_t* buf, qse_size_t size)
|
|||||||
* so I don't implement any hack here */
|
* so I don't implement any hack here */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LOCK_INPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_readmbs (&sio->tio.io, buf, size);
|
n = qse_tio_readmbs(&sio->tio.io, buf, size);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
UNLOCK_INPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,19 +413,22 @@ qse_ssize_t qse_sio_getwcs (qse_sio_t* sio, qse_wchar_t* buf, qse_size_t size)
|
|||||||
* so I don't implement any hack here */
|
* so I don't implement any hack here */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LOCK_INPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_readwcs (&sio->tio.io, buf, size - 1);
|
n = qse_tio_readwcs(&sio->tio.io, buf, size - 1);
|
||||||
if (n <= -1)
|
if (n <= -1)
|
||||||
{
|
{
|
||||||
if (sio->errnum == QSE_SIO_ENOERR)
|
if (sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
UNLOCK_INPUT (sio);
|
||||||
|
|
||||||
buf[n] = QSE_WT('\0');
|
buf[n] = QSE_WT('\0');
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
qse_ssize_t qse_sio_getwcsn (qse_sio_t* sio, qse_wchar_t* buf, qse_size_t size)
|
qse_ssize_t qse_sio_getwcsn(qse_sio_t* sio, qse_wchar_t* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_ssize_t n;
|
qse_ssize_t n;
|
||||||
|
|
||||||
@ -414,10 +437,12 @@ qse_ssize_t qse_sio_getwcsn (qse_sio_t* sio, qse_wchar_t* buf, qse_size_t size)
|
|||||||
* so I don't implement any hack here */
|
* so I don't implement any hack here */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LOCK_INPUT (sio);
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_readwcs (&sio->tio.io, buf, size);
|
n = qse_tio_readwcs (&sio->tio.io, buf, size);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
UNLOCK_INPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -446,9 +471,9 @@ static qse_ssize_t putmb_no_mutex (qse_sio_t* sio, qse_mchar_t c)
|
|||||||
qse_ssize_t qse_sio_putmb (qse_sio_t* sio, qse_mchar_t c)
|
qse_ssize_t qse_sio_putmb (qse_sio_t* sio, qse_mchar_t c)
|
||||||
{
|
{
|
||||||
qse_ssize_t n;
|
qse_ssize_t n;
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
n = putmb_no_mutex(sio, c);
|
n = putmb_no_mutex(sio, c);
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,9 +499,9 @@ static qse_ssize_t putwc_no_mutex (qse_sio_t* sio, qse_wchar_t c)
|
|||||||
qse_ssize_t qse_sio_putwc (qse_sio_t* sio, qse_wchar_t c)
|
qse_ssize_t qse_sio_putwc (qse_sio_t* sio, qse_wchar_t c)
|
||||||
{
|
{
|
||||||
qse_ssize_t n;
|
qse_ssize_t n;
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
n = putwc_no_mutex(sio, c);
|
n = putwc_no_mutex(sio, c);
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,24 +515,24 @@ qse_ssize_t qse_sio_putmbs (qse_sio_t* sio, const qse_mchar_t* str)
|
|||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
if (sio->status & STATUS_LINE_BREAK)
|
if (sio->status & STATUS_LINE_BREAK)
|
||||||
{
|
{
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
for (n = 0; n < QSE_TYPE_MAX(qse_ssize_t) && str[n] != QSE_MT('\0'); n++)
|
for (n = 0; n < QSE_TYPE_MAX(qse_ssize_t) && str[n] != QSE_MT('\0'); n++)
|
||||||
{
|
{
|
||||||
if ((n = putmb_no_mutex(sio, str[n])) <= -1) return n;
|
if ((n = putmb_no_mutex(sio, str[n])) <= -1) return n;
|
||||||
}
|
}
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
|
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_writembs (&sio->tio.io, str, (qse_size_t)-1);
|
n = qse_tio_writembs (&sio->tio.io, str, (qse_size_t)-1);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,24 +547,24 @@ qse_ssize_t qse_sio_putmbsn (qse_sio_t* sio, const qse_mchar_t* str, qse_size_t
|
|||||||
if (sio->status & STATUS_LINE_BREAK)
|
if (sio->status & STATUS_LINE_BREAK)
|
||||||
{
|
{
|
||||||
if (size > QSE_TYPE_MAX(qse_ssize_t)) size = QSE_TYPE_MAX(qse_ssize_t);
|
if (size > QSE_TYPE_MAX(qse_ssize_t)) size = QSE_TYPE_MAX(qse_ssize_t);
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
for (n = 0; n < size; n++)
|
for (n = 0; n < size; n++)
|
||||||
{
|
{
|
||||||
if (putmb_no_mutex(sio, str[n]) <= -1) return -1;
|
if (putmb_no_mutex(sio, str[n]) <= -1) return -1;
|
||||||
}
|
}
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
|
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_writembs (&sio->tio.io, str, size);
|
n = qse_tio_writembs (&sio->tio.io, str, size);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -559,9 +584,7 @@ qse_ssize_t qse_sio_putwcs (qse_sio_t* sio, const qse_wchar_t* str)
|
|||||||
|
|
||||||
for (cur = str, left = qse_wcslen(str); left > 0; cur += count, left -= count)
|
for (cur = str, left = qse_wcslen(str); left > 0; cur += count, left -= count)
|
||||||
{
|
{
|
||||||
if (WriteConsoleW (
|
if (WriteConsoleW(sio->file.handle, cur, left, &count, QSE_NULL) == FALSE)
|
||||||
sio->file.handle, cur, left,
|
|
||||||
&count, QSE_NULL) == FALSE)
|
|
||||||
{
|
{
|
||||||
sio->errnum = QSE_SIO_ESYSERR;
|
sio->errnum = QSE_SIO_ESYSERR;
|
||||||
return -1;
|
return -1;
|
||||||
@ -579,24 +602,24 @@ qse_ssize_t qse_sio_putwcs (qse_sio_t* sio, const qse_wchar_t* str)
|
|||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
if (sio->status & STATUS_LINE_BREAK)
|
if (sio->status & STATUS_LINE_BREAK)
|
||||||
{
|
{
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
for (n = 0; n < QSE_TYPE_MAX(qse_ssize_t) && str[n] != QSE_WT('\0'); n++)
|
for (n = 0; n < QSE_TYPE_MAX(qse_ssize_t) && str[n] != QSE_WT('\0'); n++)
|
||||||
{
|
{
|
||||||
if (putwc_no_mutex(sio, str[n]) <= -1) return -1;
|
if (putwc_no_mutex(sio, str[n]) <= -1) return -1;
|
||||||
}
|
}
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
|
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_writewcs (&sio->tio.io, str, (qse_size_t)-1);
|
n = qse_tio_writewcs (&sio->tio.io, str, (qse_size_t)-1);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,9 +650,7 @@ qse_ssize_t qse_sio_putwcsn (
|
|||||||
|
|
||||||
for (cur = str, left = size; left > 0; cur += count, left -= count)
|
for (cur = str, left = size; left > 0; cur += count, left -= count)
|
||||||
{
|
{
|
||||||
if (WriteConsoleW (
|
if (WriteConsoleW(sio->file.handle, cur, left, &count, QSE_NULL) == FALSE)
|
||||||
sio->file.handle, cur, left,
|
|
||||||
&count, QSE_NULL) == FALSE)
|
|
||||||
{
|
{
|
||||||
sio->errnum = QSE_SIO_ESYSERR;
|
sio->errnum = QSE_SIO_ESYSERR;
|
||||||
return -1;
|
return -1;
|
||||||
@ -652,28 +673,29 @@ qse_ssize_t qse_sio_putwcsn (
|
|||||||
}
|
}
|
||||||
return cur - str;
|
return cur - str;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
if (sio->status & STATUS_LINE_BREAK)
|
if (sio->status & STATUS_LINE_BREAK)
|
||||||
{
|
{
|
||||||
if (size > QSE_TYPE_MAX(qse_ssize_t)) size = QSE_TYPE_MAX(qse_ssize_t);
|
if (size > QSE_TYPE_MAX(qse_ssize_t)) size = QSE_TYPE_MAX(qse_ssize_t);
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
for (n = 0; n < size; n++)
|
for (n = 0; n < size; n++)
|
||||||
{
|
{
|
||||||
if (putwc_no_mutex (sio, str[n]) <= -1) return -1;
|
if (putwc_no_mutex (sio, str[n]) <= -1) return -1;
|
||||||
}
|
}
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
|
|
||||||
sio->errnum = QSE_SIO_ENOERR;
|
sio->errnum = QSE_SIO_ENOERR;
|
||||||
n = qse_tio_writewcs (&sio->tio.io, str, size);
|
n = qse_tio_writewcs (&sio->tio.io, str, size);
|
||||||
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
if (n <= -1 && sio->errnum == QSE_SIO_ENOERR)
|
||||||
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
sio->errnum = tio_errnum_to_sio_errnum (&sio->tio.io);
|
||||||
|
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -714,9 +736,9 @@ qse_ssize_t qse_sio_putmbsf (qse_sio_t* sio, const qse_mchar_t* fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
x = qse_mfmtout(fmt, &fo, ap);
|
x = qse_mfmtout(fmt, &fo, ap);
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -736,9 +758,9 @@ qse_ssize_t qse_sio_putwcsf (qse_sio_t* sio, const qse_wchar_t* fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
x = qse_wfmtout (fmt, &fo, ap);
|
x = qse_wfmtout (fmt, &fo, ap);
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -755,9 +777,9 @@ qse_ssize_t qse_sio_putmbsvf (qse_sio_t* sio, const qse_mchar_t* fmt, va_list ap
|
|||||||
fo.put = put_mchar;
|
fo.put = put_mchar;
|
||||||
fo.conv = wcs_to_mbs;
|
fo.conv = wcs_to_mbs;
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
n = (qse_mfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
n = (qse_mfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -772,9 +794,9 @@ qse_ssize_t qse_sio_putwcsvf (qse_sio_t* sio, const qse_wchar_t* fmt, va_list ap
|
|||||||
fo.put = put_wchar;
|
fo.put = put_wchar;
|
||||||
fo.conv = mbs_to_wcs;
|
fo.conv = mbs_to_wcs;
|
||||||
|
|
||||||
LOCK (sio);
|
LOCK_OUTPUT (sio);
|
||||||
n = (qse_wfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
n = (qse_wfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
||||||
UNLOCK (sio);
|
UNLOCK_OUTPUT (sio);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -785,7 +807,7 @@ int qse_sio_getpos (qse_sio_t* sio, qse_sio_pos_t* pos)
|
|||||||
|
|
||||||
if (qse_sio_flush(sio) <= -1) return -1;
|
if (qse_sio_flush(sio) <= -1) return -1;
|
||||||
|
|
||||||
off = qse_fio_seek (&sio->file, 0, QSE_FIO_CURRENT);
|
off = qse_fio_seek(&sio->file, 0, QSE_FIO_CURRENT);
|
||||||
if (off == (qse_fio_off_t)-1)
|
if (off == (qse_fio_off_t)-1)
|
||||||
{
|
{
|
||||||
sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
||||||
@ -802,7 +824,7 @@ int qse_sio_setpos (qse_sio_t* sio, qse_sio_pos_t pos)
|
|||||||
|
|
||||||
if (qse_sio_flush(sio) <= -1) return -1;
|
if (qse_sio_flush(sio) <= -1) return -1;
|
||||||
|
|
||||||
off = qse_fio_seek (&sio->file, pos, QSE_FIO_BEGIN);
|
off = qse_fio_seek(&sio->file, pos, QSE_FIO_BEGIN);
|
||||||
if (off == (qse_fio_off_t)-1)
|
if (off == (qse_fio_off_t)-1)
|
||||||
{
|
{
|
||||||
sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
||||||
@ -815,7 +837,7 @@ int qse_sio_setpos (qse_sio_t* sio, qse_sio_pos_t pos)
|
|||||||
int qse_sio_truncate (qse_sio_t* sio, qse_sio_pos_t pos)
|
int qse_sio_truncate (qse_sio_t* sio, qse_sio_pos_t pos)
|
||||||
{
|
{
|
||||||
if (qse_sio_flush(sio) <= -1) return -1;
|
if (qse_sio_flush(sio) <= -1) return -1;
|
||||||
return qse_fio_truncate (&sio->file, pos);
|
return qse_fio_truncate(&sio->file, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qse_sio_seek (qse_sio_t* sio, qse_sio_pos_t* pos, qse_sio_ori_t origin)
|
int qse_sio_seek (qse_sio_t* sio, qse_sio_pos_t* pos, qse_sio_ori_t origin)
|
||||||
@ -823,7 +845,7 @@ int qse_sio_seek (qse_sio_t* sio, qse_sio_pos_t* pos, qse_sio_ori_t origin)
|
|||||||
qse_fio_off_t x;
|
qse_fio_off_t x;
|
||||||
|
|
||||||
if (qse_sio_flush(sio) <= -1) return -1;
|
if (qse_sio_flush(sio) <= -1) return -1;
|
||||||
x = qse_fio_seek (&sio->file, *pos, origin);
|
x = qse_fio_seek(&sio->file, *pos, origin);
|
||||||
if (x == (qse_fio_off_t)-1) return -1;
|
if (x == (qse_fio_off_t)-1) return -1;
|
||||||
|
|
||||||
*pos = x;
|
*pos = x;
|
||||||
@ -840,7 +862,7 @@ static qse_ssize_t file_input (qse_tio_t* tio, qse_tio_cmd_t cmd, void* buf, qse
|
|||||||
sio = *(qse_sio_t**)QSE_XTN(tio);
|
sio = *(qse_sio_t**)QSE_XTN(tio);
|
||||||
QSE_ASSERT (sio != QSE_NULL);
|
QSE_ASSERT (sio != QSE_NULL);
|
||||||
|
|
||||||
n = qse_fio_read (&sio->file, buf, size);
|
n = qse_fio_read(&sio->file, buf, size);
|
||||||
if (n <= -1) sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
if (n <= -1) sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -858,7 +880,7 @@ static qse_ssize_t file_output (qse_tio_t* tio, qse_tio_cmd_t cmd, void* buf, qs
|
|||||||
sio = *(qse_sio_t**)QSE_XTN(tio);
|
sio = *(qse_sio_t**)QSE_XTN(tio);
|
||||||
QSE_ASSERT (sio != QSE_NULL);
|
QSE_ASSERT (sio != QSE_NULL);
|
||||||
|
|
||||||
n = qse_fio_write (&sio->file, buf, size);
|
n = qse_fio_write(&sio->file, buf, size);
|
||||||
if (n <= -1) sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
if (n <= -1) sio->errnum = fio_errnum_to_sio_errnum (&sio->file);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -934,9 +956,9 @@ qse_ssize_t qse_putmbsf (const qse_mchar_t* fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
LOCK (sio_stdout);
|
LOCK_OUTPUT (sio_stdout);
|
||||||
x = qse_mfmtout(fmt, &fo, ap);
|
x = qse_mfmtout(fmt, &fo, ap);
|
||||||
UNLOCK (sio_stdout);
|
UNLOCK_OUTPUT (sio_stdout);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -956,9 +978,9 @@ qse_ssize_t qse_putwcsf (const qse_wchar_t* fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
LOCK (sio_stdout);
|
LOCK_OUTPUT (sio_stdout);
|
||||||
x = qse_wfmtout(fmt, &fo, ap);
|
x = qse_wfmtout(fmt, &fo, ap);
|
||||||
UNLOCK (sio_stdout);
|
UNLOCK_OUTPUT (sio_stdout);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -975,9 +997,9 @@ qse_ssize_t qse_putmbsvf (const qse_mchar_t* fmt, va_list ap)
|
|||||||
fo.put = put_mchar;
|
fo.put = put_mchar;
|
||||||
fo.conv = wcs_to_mbs;
|
fo.conv = wcs_to_mbs;
|
||||||
|
|
||||||
LOCK (sio_stdout);
|
LOCK_OUTPUT (sio_stdout);
|
||||||
n = (qse_mfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
n = (qse_mfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
||||||
UNLOCK (sio_stdout);
|
UNLOCK_OUTPUT (sio_stdout);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -992,9 +1014,9 @@ qse_ssize_t qse_putwcsvf (const qse_wchar_t* fmt, va_list ap)
|
|||||||
fo.put = put_wchar;
|
fo.put = put_wchar;
|
||||||
fo.conv = mbs_to_wcs;
|
fo.conv = mbs_to_wcs;
|
||||||
|
|
||||||
LOCK (sio_stdout);
|
LOCK_OUTPUT (sio_stdout);
|
||||||
n = (qse_wfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
n = (qse_wfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
||||||
UNLOCK (sio_stdout);
|
UNLOCK_OUTPUT (sio_stdout);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -1012,9 +1034,9 @@ qse_ssize_t qse_errputmbsf (const qse_mchar_t* fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
LOCK (sio_stderr);
|
LOCK_OUTPUT (sio_stderr);
|
||||||
x = qse_mfmtout(fmt, &fo, ap);
|
x = qse_mfmtout(fmt, &fo, ap);
|
||||||
UNLOCK (sio_stderr);
|
UNLOCK_OUTPUT (sio_stderr);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -1034,9 +1056,9 @@ qse_ssize_t qse_errputwcsf (const qse_wchar_t* fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
LOCK (sio_stderr);
|
LOCK_OUTPUT (sio_stderr);
|
||||||
x = qse_wfmtout(fmt, &fo, ap);
|
x = qse_wfmtout(fmt, &fo, ap);
|
||||||
UNLOCK (sio_stderr);
|
UNLOCK_OUTPUT (sio_stderr);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -1053,9 +1075,9 @@ qse_ssize_t qse_errputmbsvf (const qse_mchar_t* fmt, va_list ap)
|
|||||||
fo.put = put_mchar;
|
fo.put = put_mchar;
|
||||||
fo.conv = wcs_to_mbs;
|
fo.conv = wcs_to_mbs;
|
||||||
|
|
||||||
LOCK (sio_stderr);
|
LOCK_OUTPUT (sio_stderr);
|
||||||
n = (qse_mfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
n = (qse_mfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
||||||
UNLOCK (sio_stderr);
|
UNLOCK_OUTPUT (sio_stderr);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -1070,9 +1092,9 @@ qse_ssize_t qse_errputwcsvf (const qse_wchar_t* fmt, va_list ap)
|
|||||||
fo.put = put_wchar;
|
fo.put = put_wchar;
|
||||||
fo.conv = mbs_to_wcs;
|
fo.conv = mbs_to_wcs;
|
||||||
|
|
||||||
LOCK (sio_stderr);
|
LOCK_OUTPUT (sio_stderr);
|
||||||
n = (qse_wfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
n = (qse_wfmtout(fmt, &fo, ap) <= -1)? -1: fo.count;
|
||||||
UNLOCK (sio_stderr);
|
UNLOCK_OUTPUT (sio_stderr);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user