interim commit

- added wide-to-multibyte charater conversion in pio
This commit is contained in:
2009-01-08 04:26:55 +00:00
parent e606d9f9e1
commit 37344d7e09
19 changed files with 237 additions and 19 deletions

View File

@ -173,17 +173,26 @@ qse_pio_t* qse_pio_init (
if (flags & QSE_PIO_SHELL)
{
const qse_mchar_t* mcmd;
#ifdef QSE_CHAR_IS_MCHAR
const char* mcmd = cmd;
mcmd = cmd;
#else
qse_size_t n, mn;
const char mcmd[1024];
mn = QSE_COUNTOF (mcmd);
n = qse_wcstombs (cmd, mcmd, &mn);
n = qse_wcstombslen (cmd, &mn);
if (cmd[n] != QSE_WT('\0'))
{
/* cmd has illegal sequence */
goto child_oops;
}
if (cmd[n] != QSE_WT('\0')) goto child_oops;
if (mn >= QSE_COUNTOF(mcmd)) goto child_oops;
mn = mn + 1;
mcmd = QSE_MMGR_ALLOC (
pio->mmgr, mn*QSE_SIZEOF(*mcmd));
if (mcmd == QSE_NULL) goto child_oops;
n = qse_wcstombs (cmd, mcmd, &mn);
execl ("/bin/sh", "sh", "-c", mcmd, QSE_NULL);
}

View File

@ -238,10 +238,13 @@ qse_size_t qse_wcstombslen (const qse_wchar_t* wcs, qse_size_t* mbslen)
p++; mlen += n;
}
/* this length excludes the terminating null character. */
*mbslen = mlen;
/* returns the number of characters handled. */
return p - wcs;
/* returns the number of characters handled.
* if the function has encountered an illegal character in
* the while loop above, wcs[p-wcs] will not be a null character */
return p - wcs;
}
qse_size_t qse_wcsntombsn (