writing mbs_to_str() in awk/val.c

This commit is contained in:
hyung-hwan 2019-04-15 15:36:23 +00:00
parent 711320d847
commit f16437d7c0
8 changed files with 71 additions and 75 deletions

View File

@ -123,12 +123,10 @@ protected:
int __build_environ (Run* run, void* envptr); int __build_environ (Run* run, void* envptr);
// intrinsic functions // intrinsic functions
qse_cmgr_t* getcmgr (const char_t* ioname); qse_cmgr_t* getiocmgr (const char_t* ioname);
int setioattr (Run& run, Value& ret, Value* args, size_t nargs, int setioattr (Run& run, Value& ret, Value* args, size_t nargs, const char_t* name, size_t len);
const char_t* name, size_t len); int getioattr (Run& run, Value& ret, Value* args, size_t nargs, const char_t* name, size_t len);
int getioattr (Run& run, Value& ret, Value* args, size_t nargs,
const char_t* name, size_t len);
// pipe io handlers // pipe io handlers
int openPipe (Pipe& io); int openPipe (Pipe& io);

View File

@ -179,12 +179,12 @@ QSE_EXPORT void* qse_awk_rtx_getxtnstd (
/** /**
* The qse_awk_rtx_getcmgrstd() function gets the current character * The qse_awk_rtx_getiocmgrstd() function gets the current character
* manager associated with a particular I/O target indicated by the name * manager associated with a particular I/O target indicated by the name
* \a ioname if #QSE_CHAR_IS_WCHAR is defined. It always returns #QSE_NULL * \a ioname if #QSE_CHAR_IS_WCHAR is defined. It always returns #QSE_NULL
* if #QSE_CHAR_IS_MCHAR is defined. * if #QSE_CHAR_IS_MCHAR is defined.
*/ */
QSE_EXPORT qse_cmgr_t* qse_awk_rtx_getcmgrstd ( QSE_EXPORT qse_cmgr_t* qse_awk_rtx_getiocmgrstd (
qse_awk_rtx_t* rtx, qse_awk_rtx_t* rtx,
const qse_char_t* ioname const qse_char_t* ioname
); );

View File

@ -329,12 +329,12 @@ int StdAwk::make_additional_globals (Run* run)
return 0; return 0;
} }
qse_cmgr_t* StdAwk::getcmgr (const char_t* ioname) qse_cmgr_t* StdAwk::getiocmgr (const char_t* ioname)
{ {
QSE_ASSERT (this->cmgrtab_inited == true); QSE_ASSERT (this->cmgrtab_inited == true);
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
ioattr_t* ioattr = get_ioattr (ioname, qse_strlen(ioname)); ioattr_t* ioattr = get_ioattr(ioname, qse_strlen(ioname));
if (ioattr) return ioattr->cmgr; if (ioattr) return ioattr->cmgr;
#endif #endif
return QSE_NULL; return QSE_NULL;
@ -521,7 +521,7 @@ int StdAwk::open_nwio (Pipe& io, int flags, void* nwad)
if (handle == QSE_NULL) return -1; if (handle == QSE_NULL) return -1;
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
qse_cmgr_t* cmgr = this->getcmgr (io.getName()); qse_cmgr_t* cmgr = this->getiocmgr(io.getName());
if (cmgr) qse_nwio_setcmgr (handle, cmgr); if (cmgr) qse_nwio_setcmgr (handle, cmgr);
#endif #endif
@ -566,7 +566,7 @@ int StdAwk::open_pio (Pipe& io)
if (pio == QSE_NULL) return -1; if (pio == QSE_NULL) return -1;
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
qse_cmgr_t* cmgr = this->getcmgr (io.getName()); qse_cmgr_t* cmgr = this->getiocmgr(io.getName());
if (cmgr) if (cmgr)
{ {
qse_pio_setcmgr (pio, QSE_PIO_IN, cmgr); qse_pio_setcmgr (pio, QSE_PIO_IN, cmgr);
@ -697,10 +697,10 @@ int StdAwk::openFile (File& io)
break; break;
} }
sio = qse_sio_open (this->getMmgr(), 0, io.getName(), flags); sio = qse_sio_open(this->getMmgr(), 0, io.getName(), flags);
if (sio == NULL) return -1; if (!sio) return -1;
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
qse_cmgr_t* cmgr = this->getcmgr (io.getName()); qse_cmgr_t* cmgr = this->getiocmgr(io.getName());
if (cmgr) qse_sio_setcmgr (sio, cmgr); if (cmgr) qse_sio_setcmgr (sio, cmgr);
#endif #endif
@ -716,17 +716,17 @@ int StdAwk::closeFile (File& io)
StdAwk::ssize_t StdAwk::readFile (File& io, char_t* buf, size_t len) StdAwk::ssize_t StdAwk::readFile (File& io, char_t* buf, size_t len)
{ {
return qse_sio_getstrn ((qse_sio_t*)io.getHandle(), buf, len); return qse_sio_getstrn((qse_sio_t*)io.getHandle(), buf, len);
} }
StdAwk::ssize_t StdAwk::writeFile (File& io, const char_t* buf, size_t len) StdAwk::ssize_t StdAwk::writeFile (File& io, const char_t* buf, size_t len)
{ {
return qse_sio_putstrn ((qse_sio_t*)io.getHandle(), buf, len); return qse_sio_putstrn((qse_sio_t*)io.getHandle(), buf, len);
} }
int StdAwk::flushFile (File& io) int StdAwk::flushFile (File& io)
{ {
return qse_sio_flush ((qse_sio_t*)io.getHandle()); return qse_sio_flush((qse_sio_t*)io.getHandle());
} }
void StdAwk::setConsoleCmgr (const qse_cmgr_t* cmgr) void StdAwk::setConsoleCmgr (const qse_cmgr_t* cmgr)

View File

@ -385,6 +385,7 @@ struct qse_awk_rtx_t
qse_awk_errinf_t errinf; qse_awk_errinf_t errinf;
qse_awk_t* awk; qse_awk_t* awk;
qse_cmgr_t* cmgr; /* internal default cmgr */
qse_awk_rtx_ecb_t* ecb; qse_awk_rtx_ecb_t* ecb;
}; };

View File

@ -825,8 +825,7 @@ static qse_rbt_walk_t fini_module (qse_rbt_t* rbt, qse_rbt_pair_t* pair, void* c
return QSE_RBT_WALK_FORWARD; return QSE_RBT_WALK_FORWARD;
} }
qse_awk_rtx_t* qse_awk_rtx_open ( qse_awk_rtx_t* qse_awk_rtx_open (qse_awk_t* awk, qse_size_t xtnsize, qse_awk_rio_t* rio)
qse_awk_t* awk, qse_size_t xtnsize, qse_awk_rio_t* rio)
{ {
qse_awk_rtx_t* rtx; qse_awk_rtx_t* rtx;
struct module_init_ctx_t mic; struct module_init_ctx_t mic;
@ -846,9 +845,8 @@ qse_awk_rtx_t* qse_awk_rtx_open (
} }
/* allocate the storage for the rtx object */ /* allocate the storage for the rtx object */
rtx = (qse_awk_rtx_t*) QSE_AWK_ALLOC ( rtx = (qse_awk_rtx_t*)QSE_AWK_ALLOC(awk, QSE_SIZEOF(qse_awk_rtx_t) + xtnsize);
awk, QSE_SIZEOF(qse_awk_rtx_t) + xtnsize); if (!rtx)
if (rtx == QSE_NULL)
{ {
/* if it fails, the failure is reported thru /* if it fails, the failure is reported thru
* the awk object */ * the awk object */
@ -987,6 +985,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
}; };
rtx->awk = awk; rtx->awk = awk;
rtx->cmgr = qse_getdflcmgr();
CLRERR (rtx); CLRERR (rtx);
@ -1009,32 +1008,28 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
rtx->inrec.maxflds = 0; rtx->inrec.maxflds = 0;
rtx->inrec.d0 = qse_awk_val_nil; rtx->inrec.d0 = qse_awk_val_nil;
if (qse_str_init (&rtx->inrec.line, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_0; if (qse_str_init(&rtx->inrec.line, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_0;
if (qse_str_init (&rtx->inrec.linew, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_1; if (qse_str_init(&rtx->inrec.linew, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_1;
if (qse_str_init (&rtx->inrec.lineg, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_2; if (qse_str_init(&rtx->inrec.lineg, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_2;
if (qse_str_init (&rtx->format.out, MMGR(rtx), 256) <= -1) goto oops_3; if (qse_str_init(&rtx->format.out, MMGR(rtx), 256) <= -1) goto oops_3;
if (qse_str_init (&rtx->format.fmt, MMGR(rtx), 256) <= -1) goto oops_4; if (qse_str_init(&rtx->format.fmt, MMGR(rtx), 256) <= -1) goto oops_4;
rtx->named = qse_htb_open (MMGR(rtx), QSE_SIZEOF(rtx), 1024, 70, QSE_SIZEOF(qse_char_t), 1); rtx->named = qse_htb_open(MMGR(rtx), QSE_SIZEOF(rtx), 1024, 70, QSE_SIZEOF(qse_char_t), 1);
if (rtx->named == QSE_NULL) goto oops_5; if (!rtx->named) goto oops_5;
*(qse_awk_rtx_t**)QSE_XTN(rtx->named) = rtx; *(qse_awk_rtx_t**)QSE_XTN(rtx->named) = rtx;
qse_htb_setstyle (rtx->named, &style_for_named); qse_htb_setstyle (rtx->named, &style_for_named);
rtx->format.tmp.ptr = (qse_char_t*) rtx->format.tmp.ptr = (qse_char_t*)QSE_AWK_ALLOC(rtx->awk, 4096*QSE_SIZEOF(qse_char_t*));
QSE_AWK_ALLOC (rtx->awk, 4096*QSE_SIZEOF(qse_char_t*)); if (!rtx->format.tmp.ptr) goto oops_6;
if (rtx->format.tmp.ptr == QSE_NULL) goto oops_6;
rtx->format.tmp.len = 4096; rtx->format.tmp.len = 4096;
rtx->format.tmp.inc = 4096*2; rtx->format.tmp.inc = 4096*2;
if (rtx->awk->tree.chain_size > 0) if (rtx->awk->tree.chain_size > 0)
{ {
rtx->pattern_range_state = (qse_byte_t*) QSE_AWK_ALLOC ( rtx->pattern_range_state = (qse_byte_t*)QSE_AWK_ALLOC(rtx->awk, rtx->awk->tree.chain_size * QSE_SIZEOF(qse_byte_t));
rtx->awk, rtx->awk->tree.chain_size*QSE_SIZEOF(qse_byte_t)); if (!rtx->pattern_range_state) goto oops_7;
if (rtx->pattern_range_state == QSE_NULL) goto oops_7;
QSE_MEMSET ( QSE_MEMSET (rtx->pattern_range_state, 0, rtx->awk->tree.chain_size * QSE_SIZEOF(qse_byte_t));
rtx->pattern_range_state, 0,
rtx->awk->tree.chain_size * QSE_SIZEOF(qse_byte_t));
} }
else rtx->pattern_range_state = QSE_NULL; else rtx->pattern_range_state = QSE_NULL;

View File

@ -1080,7 +1080,7 @@ static qse_ssize_t nwio_handler_open (
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
{ {
qse_cmgr_t* cmgr = qse_awk_rtx_getcmgrstd (rtx, riod->name); qse_cmgr_t* cmgr = qse_awk_rtx_getiocmgrstd(rtx, riod->name);
if (cmgr) qse_nwio_setcmgr (handle, cmgr); if (cmgr) qse_nwio_setcmgr (handle, cmgr);
} }
#endif #endif
@ -1202,7 +1202,7 @@ static qse_ssize_t pio_handler_open (
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
{ {
qse_cmgr_t* cmgr = qse_awk_rtx_getcmgrstd (rtx, riod->name); qse_cmgr_t* cmgr = qse_awk_rtx_getiocmgrstd(rtx, riod->name);
if (cmgr) if (cmgr)
{ {
qse_pio_setcmgr (handle, QSE_PIO_IN, cmgr); qse_pio_setcmgr (handle, QSE_PIO_IN, cmgr);
@ -1304,10 +1304,9 @@ static qse_ssize_t awk_rio_pipe (
ioattr_t* ioattr; ioattr_t* ioattr;
rxtn_t* rxtn; rxtn_t* rxtn;
rxtn = (rxtn_t*) QSE_XTN (rtx); rxtn = (rxtn_t*)QSE_XTN(rtx);
ioattr = get_ioattr ( ioattr = get_ioattr(&rxtn->cmgrtab, riod->name, qse_strlen(riod->name));
&rxtn->cmgrtab, riod->name, qse_strlen(riod->name));
if (ioattr) if (ioattr)
{ {
tmout = &tmout_buf; tmout = &tmout_buf;
@ -1317,7 +1316,7 @@ static qse_ssize_t awk_rio_pipe (
tmout->a = ioattr->tmout[3]; tmout->a = ioattr->tmout[3];
} }
return nwio_handler_open (rtx, riod, flags, &nwad, tmout); return nwio_handler_open(rtx, riod, flags, &nwad, tmout);
} }
} }
else if (riod->uflags > 0) else if (riod->uflags > 0)
@ -1369,7 +1368,7 @@ static qse_ssize_t awk_rio_file (
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
{ {
qse_cmgr_t* cmgr = qse_awk_rtx_getcmgrstd (rtx, riod->name); qse_cmgr_t* cmgr = qse_awk_rtx_getiocmgrstd(rtx, riod->name);
if (cmgr) qse_sio_setcmgr (handle, cmgr); if (cmgr) qse_sio_setcmgr (handle, cmgr);
} }
#endif #endif
@ -2021,27 +2020,20 @@ qse_awk_rtx_t* qse_awk_rtx_openstd (
rio.file = awk_rio_file; rio.file = awk_rio_file;
rio.console = awk_rio_console; rio.console = awk_rio_console;
rtx = qse_awk_rtx_open ( rtx = qse_awk_rtx_open(awk, QSE_SIZEOF(rxtn_t) + xtnsize, &rio);
awk, if (!rtx) return QSE_NULL;
QSE_SIZEOF(rxtn_t) + xtnsize,
&rio
);
if (rtx == QSE_NULL) return QSE_NULL;
rxtn = (rxtn_t*) QSE_XTN (rtx); rxtn = (rxtn_t*) QSE_XTN (rtx);
if (rtx->awk->opt.trait & QSE_AWK_RIO) if (rtx->awk->opt.trait & QSE_AWK_RIO)
{ {
if (qse_htb_init ( if (qse_htb_init(&rxtn->cmgrtab, awk->mmgr, 256, 70, QSE_SIZEOF(qse_char_t), 1) <= -1)
&rxtn->cmgrtab, awk->mmgr, 256, 70,
QSE_SIZEOF(qse_char_t), 1) <= -1)
{ {
qse_awk_rtx_close (rtx); qse_awk_rtx_close (rtx);
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL); qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
return QSE_NULL; return QSE_NULL;
} }
qse_htb_setstyle (&rxtn->cmgrtab, qse_htb_setstyle (&rxtn->cmgrtab, qse_gethtbstyle(QSE_HTB_STYLE_INLINE_COPIERS));
qse_gethtbstyle(QSE_HTB_STYLE_INLINE_COPIERS));
rxtn->cmgrtab_inited = 1; rxtn->cmgrtab_inited = 1;
} }
@ -2190,7 +2182,7 @@ static int fnc_setioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
x = qse_awk_rtx_strtonum(rtx, QSE_AWK_RTX_STRTONUM_MAKE_OPTION(0, 0), ptr[2], len[2], &l, &r); x = qse_awk_rtx_strtonum(rtx, QSE_AWK_RTX_STRTONUM_MAKE_OPTION(0, 0), ptr[2], len[2], &l, &r);
if (x == 0) r = (qse_awk_flt_t)l; if (x == 0) r = (qse_awk_flt_t)l;
ioattr = find_or_make_ioattr (rtx, &rxtn->cmgrtab, ptr[0], len[0]); ioattr = find_or_make_ioattr(rtx, &rxtn->cmgrtab, ptr[0], len[0]);
if (ioattr == QSE_NULL) if (ioattr == QSE_NULL)
{ {
ret = -1; ret = -1;
@ -2223,7 +2215,7 @@ static int fnc_setioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
} }
else else
{ {
cmgr = qse_findcmgr (ptr[2]); cmgr = qse_findcmgr(ptr[2]);
if (cmgr == QSE_NULL) if (cmgr == QSE_NULL)
{ {
fret = -1; fret = -1;
@ -2231,7 +2223,7 @@ static int fnc_setioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
} }
} }
ioattr = find_or_make_ioattr (rtx, &rxtn->cmgrtab, ptr[0], len[0]); ioattr = find_or_make_ioattr(rtx, &rxtn->cmgrtab, ptr[0], len[0]);
if (ioattr == QSE_NULL) if (ioattr == QSE_NULL)
{ {
ret = -1; ret = -1;
@ -2358,7 +2350,7 @@ done:
return ret; return ret;
} }
qse_cmgr_t* qse_awk_rtx_getcmgrstd (qse_awk_rtx_t* rtx, const qse_char_t* ioname) qse_cmgr_t* qse_awk_rtx_getiocmgrstd (qse_awk_rtx_t* rtx, const qse_char_t* ioname)
{ {
#if defined(QSE_CHAR_IS_WCHAR) #if defined(QSE_CHAR_IS_WCHAR)
rxtn_t* rxtn; rxtn_t* rxtn;
@ -2367,7 +2359,7 @@ qse_cmgr_t* qse_awk_rtx_getcmgrstd (qse_awk_rtx_t* rtx, const qse_char_t* ioname
rxtn = (rxtn_t*) QSE_XTN (rtx); rxtn = (rxtn_t*) QSE_XTN (rtx);
QSE_ASSERT (rxtn->cmgrtab_inited == 1); QSE_ASSERT (rxtn->cmgrtab_inited == 1);
ioattr = get_ioattr (&rxtn->cmgrtab, ioname, qse_strlen(ioname)); ioattr = get_ioattr(&rxtn->cmgrtab, ioname, qse_strlen(ioname));
if (ioattr) return ioattr->cmgr; if (ioattr) return ioattr->cmgr;
#endif #endif
return QSE_NULL; return QSE_NULL;

View File

@ -812,6 +812,10 @@ void qse_awk_rtx_freeval (qse_awk_rtx_t* rtx, qse_awk_val_t* val, int cache)
break; break;
} }
case QSE_AWK_VAL_BYTEARR:
QSE_AWK_FREE (rtx->awk, val);
break;
case QSE_AWK_VAL_REX: case QSE_AWK_VAL_REX:
{ {
/* don't free ptr as it is inlined to val /* don't free ptr as it is inlined to val
@ -1077,22 +1081,31 @@ static int mbs_to_str (qse_awk_rtx_t* rtx, const qse_mchar_t* str, qse_size_t st
* behave like CPLCPY. fall thru */ * behave like CPLCPY. fall thru */
case QSE_AWK_RTX_VALTOSTR_CPLCPY: case QSE_AWK_RTX_VALTOSTR_CPLCPY:
{ {
if (str_len >= out->u.cplcpy.len) qse_size_t mbslen, wcslen;
mbslen = str_len;
wcslen = out->u.cplcpy.len;
if (qse_mbsntowcsnwithcmgr(str, &mbslen, out->u.cplcpy.ptr, &wcslen, rtx->cmgr) <= -1)
{ {
qse_awk_rtx_seterrnum (rtx, QSE_AWK_EINVAL, QSE_NULL); qse_awk_rtx_seterrnum (rtx, QSE_AWK_EINVAL, QSE_NULL); /* TODO: change error code */
out->u.cplcpy.len = str_len + 1; /* set the required length */
return -1; return -1;
} }
out->u.cplcpy.len = qse_strncpy(out->u.cplcpy.ptr, str, str_len); if (mbslen < str_len)
{
/* TODO: ... */
}
out->u.cplcpy.len = wcslen;
return 0; return 0;
} }
case QSE_AWK_RTX_VALTOSTR_CPLDUP: case QSE_AWK_RTX_VALTOSTR_CPLDUP:
{ {
qse_char_t* tmp; qse_char_t* tmp;
qse_size_t mbslen, wcslen;
tmp = QSE_AWK_STRXDUP(rtx->awk, str, str_len); mbslen = str_len;
tmp = qse_mbsntowcsdupwithcmgr(str, &mbslen, &wcslen, rtx->awk->mmgr, rtx->cmgr);
if (!tmp) if (!tmp)
{ {
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1100,7 +1113,7 @@ static int mbs_to_str (qse_awk_rtx_t* rtx, const qse_mchar_t* str, qse_size_t st
} }
out->u.cpldup.ptr = tmp; out->u.cpldup.ptr = tmp;
out->u.cpldup.len = str_len; out->u.cpldup.len = wcslen;
return 0; return 0;
} }
@ -1206,7 +1219,7 @@ static int val_int_to_str (qse_awk_rtx_t* rtx, const qse_awk_val_int_t* v, qse_a
tmp = QSE_STR_PTR(out->u.strp); tmp = QSE_STR_PTR(out->u.strp);
/* extend the buffer */ /* extend the buffer */
n = qse_str_nccats(out->u.strp, QSE_T(' '), rlen); n = qse_str_nccat(out->u.strp, QSE_T(' '), rlen);
if (n == (qse_size_t)-1) if (n == (qse_size_t)-1)
{ {
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1886,7 +1899,7 @@ int qse_awk_rtx_setrefval (qse_awk_rtx_t* rtx, qse_awk_val_ref_t* ref, qse_awk_v
return x; return x;
} }
#endif #endif
/* fall thru */ /* fall thru otherwise */
default: default:
{ {

View File

@ -272,20 +272,17 @@ static qse_wchar_t* mbsn_to_wcs_dup_with_cmgr (
return wcs; return wcs;
} }
qse_wchar_t* qse_mbsntowcsdupwithcmgr ( qse_wchar_t* qse_mbsntowcsdupwithcmgr (const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr)
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr)
{ {
return mbsn_to_wcs_dup_with_cmgr (mbs, mbslen, wcslen, mmgr, cmgr, 0); return mbsn_to_wcs_dup_with_cmgr (mbs, mbslen, wcslen, mmgr, cmgr, 0);
} }
qse_wchar_t* qse_mbsntowcsalldupwithcmgr ( qse_wchar_t* qse_mbsntowcsalldupwithcmgr (const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr)
const qse_mchar_t* mbs, qse_size_t* mbslen, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr)
{ {
return mbsn_to_wcs_dup_with_cmgr (mbs, mbslen, wcslen, mmgr, cmgr, 1); return mbsn_to_wcs_dup_with_cmgr (mbs, mbslen, wcslen, mmgr, cmgr, 1);
} }
static qse_wchar_t* mbs_to_wcs_dup_with_cmgr ( static qse_wchar_t* mbs_to_wcs_dup_with_cmgr (const qse_mchar_t* mbs, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr, int all)
const qse_mchar_t* mbs, qse_size_t* wcslen, qse_mmgr_t* mmgr, qse_cmgr_t* cmgr, int all)
{ {
qse_size_t ml, wl; qse_size_t ml, wl;
qse_wchar_t* wcs; qse_wchar_t* wcs;