writing mbs_to_str() in awk/val.c
This commit is contained in:
parent
711320d847
commit
f16437d7c0
@ -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);
|
||||||
|
@ -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
|
||||||
);
|
);
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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:
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user