interim commit

- fixed wrong enum definitions of qse_pio_hid_t
- changed code to use a static buffer if the command is short enough in qse_pio_init().
This commit is contained in:
hyung-hwan 2009-01-08 08:14:06 +00:00
parent 37344d7e09
commit 86a1d88307
5 changed files with 68 additions and 9 deletions

View File

@ -45,9 +45,9 @@ enum qse_pio_open_flag_t
enum qse_pio_hid_t enum qse_pio_hid_t
{ {
QSE_PIO_IN = (1 << 0), QSE_PIO_IN = 0,
QSE_PIO_OUT = (1 << 1), QSE_PIO_OUT = 1,
QSE_PIO_ERR = (1 << 2) QSE_PIO_ERR = 2
}; };
#ifdef _WIN32 #ifdef _WIN32

View File

@ -179,6 +179,7 @@ qse_pio_t* qse_pio_init (
mcmd = cmd; mcmd = cmd;
#else #else
qse_size_t n, mn; qse_size_t n, mn;
qse_mchar_t buf[64];
n = qse_wcstombslen (cmd, &mn); n = qse_wcstombslen (cmd, &mn);
if (cmd[n] != QSE_WT('\0')) if (cmd[n] != QSE_WT('\0'))
@ -188,9 +189,18 @@ qse_pio_t* qse_pio_init (
} }
mn = mn + 1; mn = mn + 1;
mcmd = QSE_MMGR_ALLOC (
pio->mmgr, mn*QSE_SIZEOF(*mcmd)); if (mn <= QSE_COUNTOF(buf))
if (mcmd == QSE_NULL) goto child_oops; {
mcmd = buf;
mn = QSE_COUNTOF(buf);
}
else
{
mcmd = QSE_MMGR_ALLOC (
pio->mmgr, mn*QSE_SIZEOF(*mcmd));
if (mcmd == QSE_NULL) goto child_oops;
}
n = qse_wcstombs (cmd, mcmd, &mn); n = qse_wcstombs (cmd, mcmd, &mn);
@ -199,6 +209,7 @@ qse_pio_t* qse_pio_init (
else else
{ {
/* TODO: need to parse the command in a simple manner */ /* TODO: need to parse the command in a simple manner */
//execl ("full path needed", mcmd, marg1, marg2, QSE_NULL);
} }
child_oops: child_oops:

View File

@ -224,7 +224,7 @@ qse_size_t qse_wcstombs (
qse_size_t qse_wcstombslen (const qse_wchar_t* wcs, qse_size_t* mbslen) qse_size_t qse_wcstombslen (const qse_wchar_t* wcs, qse_size_t* mbslen)
{ {
const qse_wchar_t* p = wcs; const qse_wchar_t* p = wcs;
qse_mchar_t mbs[128]; qse_mchar_t mbs[32];
qse_size_t mlen = 0; qse_size_t mlen = 0;
while (*p != QSE_WT('\0')) while (*p != QSE_WT('\0'))

View File

@ -105,6 +105,11 @@
#define QSE_FORK() fork() #define QSE_FORK() fork()
#endif #endif
#ifdef SYS_execve
#define QSE_EXECVE(path,argv,envp) syscall(SYS_execve,path,argv,envp)
#else
#define QSE_EXECVE(path,argv,envp) execve(path,argv,envp)
#endif
#ifdef SYS_waitpid #ifdef SYS_waitpid
#define QSE_WAITPID(pid,status,options) syscall(SYS_waitpid,pid,status,options) #define QSE_WAITPID(pid,status,options) syscall(SYS_waitpid,pid,status,options)

View File

@ -26,8 +26,6 @@ static int test1 (void)
return -1; return -1;
} }
qse_pio_write (pio, "xxxxxxxxxxxx\n", 13, QSE_PIO_IN);
qse_pio_write (pio, QSE_NULL, 0, QSE_PIO_IN);
while (1) while (1)
{ {
qse_byte_t buf[128]; qse_byte_t buf[128];
@ -41,6 +39,50 @@ static int test1 (void)
break; break;
} }
qse_printf (QSE_T("N===> %d\n"), (int)n);
#ifdef QSE_CHAR_IS_MCHAR
qse_printf (QSE_T("buf => [%.*s]\n"), (int)n. buf);
#else
qse_printf (QSE_T("buf => [%.*S]\n"), (int)n, buf);
#endif
}
qse_pio_close (pio);
return 0;
}
static int test2 (void)
{
qse_pio_t* pio;
pio = qse_pio_open (
QSE_NULL,
0,
QSE_T("ls -laF"),
QSE_PIO_READERR|QSE_PIO_WRITEIN|QSE_PIO_OUTTOERR|QSE_PIO_SHELL
);
if (pio == QSE_NULL)
{
qse_printf (QSE_T("cannot open program through pipe\n"));
return -1;
}
while (1)
{
qse_byte_t buf[128];
/*qse_pio_canread (pio, QSE_PIO_ERR, 1000)*/
qse_ssize_t n = qse_pio_read (pio, buf, sizeof(buf), QSE_PIO_ERR);
if (n == 0) break;
if (n < 0)
{
qse_printf (QSE_T("qse_pio_read() returned error\n"));
break;
}
qse_printf (QSE_T("N===> %d\n"), (int)n);
#ifdef QSE_CHAR_IS_MCHAR #ifdef QSE_CHAR_IS_MCHAR
qse_printf (QSE_T("buf => [%.*s]\n"), (int)n. buf); qse_printf (QSE_T("buf => [%.*s]\n"), (int)n. buf);
#else #else
@ -93,6 +135,7 @@ int main ()
qse_printf (QSE_T("--------------------------------------------------------------------------------\n")); qse_printf (QSE_T("--------------------------------------------------------------------------------\n"));
R (test1); R (test1);
R (test2);
return 0; return 0;
} }