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:
parent
37344d7e09
commit
86a1d88307
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
if (mn <= QSE_COUNTOF(buf))
|
||||||
|
{
|
||||||
|
mcmd = buf;
|
||||||
|
mn = QSE_COUNTOF(buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mcmd = QSE_MMGR_ALLOC (
|
mcmd = QSE_MMGR_ALLOC (
|
||||||
pio->mmgr, mn*QSE_SIZEOF(*mcmd));
|
pio->mmgr, mn*QSE_SIZEOF(*mcmd));
|
||||||
if (mcmd == QSE_NULL) goto child_oops;
|
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:
|
||||||
|
@ -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'))
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user