added qse_awk_rtx_valtombs()/qse_awk_rtx_valtostr()
added sys::kill() to awk added sys::SIGXXXX to awk added or enhanced uci::XXXX in awk
This commit is contained in:
@ -298,31 +298,11 @@ struct qse_awk_rtx_t
|
||||
qse_long_t nr;
|
||||
qse_long_t fnr;
|
||||
|
||||
struct
|
||||
{
|
||||
qse_char_t* ptr;
|
||||
qse_size_t len;
|
||||
} convfmt;
|
||||
struct
|
||||
{
|
||||
qse_char_t* ptr;
|
||||
qse_size_t len;
|
||||
} ofmt;
|
||||
struct
|
||||
{
|
||||
qse_char_t* ptr;
|
||||
qse_size_t len;
|
||||
} ofs;
|
||||
struct
|
||||
{
|
||||
qse_char_t* ptr;
|
||||
qse_size_t len;
|
||||
} ors;
|
||||
struct
|
||||
{
|
||||
qse_char_t* ptr;
|
||||
qse_size_t len;
|
||||
} subsep;
|
||||
qse_xstr_t convfmt;
|
||||
qse_xstr_t ofmt;
|
||||
qse_xstr_t ofs;
|
||||
qse_xstr_t ors;
|
||||
qse_xstr_t subsep;
|
||||
} gbl;
|
||||
|
||||
/* rio chain */
|
||||
|
@ -245,7 +245,7 @@ static int fnc_close (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
name = qse_awk_rtx_valtocpldup (rtx, a0, &len);
|
||||
name = qse_awk_rtx_valtostrdup (rtx, a0, &len);
|
||||
if (name == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -258,7 +258,7 @@ static int fnc_close (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
opt = qse_awk_rtx_valtocpldup (rtx, a1, &optlen);
|
||||
opt = qse_awk_rtx_valtostrdup (rtx, a1, &optlen);
|
||||
if (opt == QSE_NULL)
|
||||
{
|
||||
if (a1->type != QSE_AWK_VAL_STR)
|
||||
@ -386,7 +386,7 @@ static int fnc_fflush (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_rtx_valtocpldup (run, a0, &len0);
|
||||
str0 = qse_awk_rtx_valtostrdup (run, a0, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -462,7 +462,7 @@ static int fnc_index (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_rtx_valtocpldup (rtx, a0, &len0);
|
||||
str0 = qse_awk_rtx_valtostrdup (rtx, a0, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -473,7 +473,7 @@ static int fnc_index (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str1 = qse_awk_rtx_valtocpldup (rtx, a1, &len1);
|
||||
str1 = qse_awk_rtx_valtostrdup (rtx, a1, &len1);
|
||||
if (str1 == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR)
|
||||
@ -526,7 +526,7 @@ static int fnc_length (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtocpldup (rtx, v, &len);
|
||||
str = qse_awk_rtx_valtostrdup (rtx, v, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
QSE_AWK_FREE (rtx->awk, str);
|
||||
}
|
||||
@ -562,7 +562,7 @@ static int fnc_substr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtocpldup (rtx, a0, &len);
|
||||
str = qse_awk_rtx_valtostrdup (rtx, a0, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -667,7 +667,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str.ptr = qse_awk_rtx_valtocpldup (run, a0, &str.len);
|
||||
str.ptr = qse_awk_rtx_valtostrdup (run, a0, &str.len);
|
||||
if (str.ptr == QSE_NULL) return -1;
|
||||
str_free = (qse_char_t*)str.ptr;
|
||||
}
|
||||
@ -688,7 +688,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
fs.ptr = qse_awk_rtx_valtocpldup (run, t1, &fs.len);
|
||||
fs.ptr = qse_awk_rtx_valtostrdup (run, t1, &fs.len);
|
||||
if (fs.ptr == QSE_NULL) goto oops;
|
||||
fs_free = (qse_char_t*)fs.ptr;
|
||||
}
|
||||
@ -714,7 +714,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
fs.ptr = qse_awk_rtx_valtocpldup (run, a2, &fs.len);
|
||||
fs.ptr = qse_awk_rtx_valtostrdup (run, a2, &fs.len);
|
||||
if (fs.ptr == QSE_NULL) goto oops;
|
||||
fs_free = (qse_char_t*)fs.ptr;
|
||||
}
|
||||
@ -831,7 +831,7 @@ static int fnc_tolower (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str.ptr = qse_awk_rtx_valtocpldup (run, a0, &str.len);
|
||||
str.ptr = qse_awk_rtx_valtostrdup (run, a0, &str.len);
|
||||
if (str.ptr == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -868,7 +868,7 @@ static int fnc_toupper (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str.ptr = qse_awk_rtx_valtocpldup (run, a0, &str.len);
|
||||
str.ptr = qse_awk_rtx_valtostrdup (run, a0, &str.len);
|
||||
if (str.ptr == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -928,7 +928,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
s0.ptr = qse_awk_rtx_valtocpldup (run, a0, &s0.len);
|
||||
s0.ptr = qse_awk_rtx_valtostrdup (run, a0, &s0.len);
|
||||
if (s0.ptr == QSE_NULL) goto oops;
|
||||
s0_free = (qse_char_t*)s0.ptr;
|
||||
}
|
||||
@ -940,7 +940,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
s1.ptr = qse_awk_rtx_valtocpldup (run, a1, &s1.len);
|
||||
s1.ptr = qse_awk_rtx_valtostrdup (run, a1, &s1.len);
|
||||
if (s1.ptr == QSE_NULL) goto oops;
|
||||
s1_free = (qse_char_t*)s1.ptr;
|
||||
}
|
||||
@ -990,7 +990,7 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
s2.ptr = qse_awk_rtx_valtocpldup (run, *a2_ref, &s2.len);
|
||||
s2.ptr = qse_awk_rtx_valtostrdup (run, *a2_ref, &s2.len);
|
||||
if (s2.ptr == QSE_NULL) goto oops;
|
||||
s2_free = (qse_char_t*)s2.ptr;
|
||||
}
|
||||
@ -1241,7 +1241,7 @@ static int fnc_match (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str0 = qse_awk_rtx_valtocpldup (rtx, a0, &len0);
|
||||
str0 = qse_awk_rtx_valtostrdup (rtx, a0, &len0);
|
||||
if (str0 == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -1260,7 +1260,7 @@ static int fnc_match (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str1 = qse_awk_rtx_valtocpldup (rtx, a1, &len1);
|
||||
str1 = qse_awk_rtx_valtostrdup (rtx, a1, &len1);
|
||||
if (str1 == QSE_NULL)
|
||||
{
|
||||
if (a0->type != QSE_AWK_VAL_STR)
|
||||
@ -1379,7 +1379,7 @@ static int fnc_sprintf (qse_awk_rtx_t* run, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
cs0.ptr = qse_awk_rtx_valtocpldup (run, a0, &cs0.len);
|
||||
cs0.ptr = qse_awk_rtx_valtostrdup (run, a0, &cs0.len);
|
||||
if (cs0.ptr == QSE_NULL) goto oops;
|
||||
}
|
||||
|
||||
|
@ -4948,6 +4948,7 @@ static qse_awk_nde_t* parse_primary_ident_segs (
|
||||
if (mod == QSE_NULL)
|
||||
{
|
||||
if (ISNOERR(awk)) SETERR_LOC (awk, QSE_AWK_ENOSUP, xloc);
|
||||
else ADJERR_LOC (awk, xloc);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -215,7 +215,7 @@ static QSE_INLINE int resolve_rs (
|
||||
break;
|
||||
|
||||
default:
|
||||
rrs->ptr = qse_awk_rtx_valtocpldup (rtx, rs, &rrs->len);
|
||||
rrs->ptr = qse_awk_rtx_valtostrdup (rtx, rs, &rrs->len);
|
||||
if (rrs->ptr == QSE_NULL) ret = -1;
|
||||
break;
|
||||
}
|
||||
|
@ -299,6 +299,11 @@ QSE_INLINE qse_awk_val_t* qse_awk_rtx_getgbl (qse_awk_rtx_t* run, int id)
|
||||
return STACK_GBL (run, id);
|
||||
}
|
||||
|
||||
const qse_xstr_t* qse_awk_rtx_getsubsep (qse_awk_rtx_t* run)
|
||||
{
|
||||
return &run->gbl.subsep;
|
||||
}
|
||||
|
||||
/* internal function to set a value to a global variable.
|
||||
* this function can handle a few special global variables that
|
||||
* require special treatment. */
|
||||
@ -602,7 +607,7 @@ static int set_global (
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
if (qse_awk_rtx_valtostr (rtx, val, &out) <= -1) return -1;
|
||||
|
||||
if (rtx->gbl.subsep.ptr != QSE_NULL)
|
||||
if (rtx->gbl.subsep.ptr)
|
||||
QSE_AWK_FREE (rtx->awk, rtx->gbl.subsep.ptr);
|
||||
rtx->gbl.subsep.ptr = out.u.cpldup.ptr;
|
||||
rtx->gbl.subsep.len = out.u.cpldup.len;
|
||||
|
@ -2167,7 +2167,7 @@ static int fnc_system (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
str = qse_awk_rtx_valtocpldup (rtx, v, &len);
|
||||
str = qse_awk_rtx_valtostrdup (rtx, v, &len);
|
||||
if (str == QSE_NULL) return -1;
|
||||
}
|
||||
|
||||
@ -2302,7 +2302,7 @@ static int fnc_setioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr[i] = qse_awk_rtx_valtocpldup (rtx, v[i], &len[i]);
|
||||
ptr[i] = qse_awk_rtx_valtostrdup (rtx, v[i], &len[i]);
|
||||
if (ptr[i] == QSE_NULL)
|
||||
{
|
||||
ret = -1;
|
||||
@ -2431,7 +2431,7 @@ static int fnc_getioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr[i] = qse_awk_rtx_valtocpldup (rtx, v[i], &len[i]);
|
||||
ptr[i] = qse_awk_rtx_valtostrdup (rtx, v[i], &len[i]);
|
||||
if (ptr[i] == QSE_NULL)
|
||||
{
|
||||
ret = -1;
|
||||
|
@ -245,7 +245,7 @@ qse_awk_val_t* qse_awk_rtx_makestrvalwithmcstr (
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, mcstr);
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wcstr_t tmp;
|
||||
qse_wxstr_t tmp;
|
||||
qse_size_t mbslen;
|
||||
|
||||
mbslen = mcstr->len;
|
||||
@ -267,7 +267,7 @@ qse_awk_val_t* qse_awk_rtx_makestrvalwithwcstr (
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mcstr_t tmp;
|
||||
qse_mxstr_t tmp;
|
||||
qse_size_t wcslen;
|
||||
|
||||
wcslen = wcstr->len;
|
||||
@ -1266,7 +1266,7 @@ int qse_awk_rtx_valtostr (
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_char_t* qse_awk_rtx_valtocpldup (
|
||||
qse_char_t* qse_awk_rtx_valtostrdup (
|
||||
qse_awk_rtx_t* rtx, const qse_awk_val_t* v, qse_size_t* len)
|
||||
{
|
||||
qse_awk_rtx_valtostr_out_t out;
|
||||
@ -1274,10 +1274,58 @@ qse_char_t* qse_awk_rtx_valtocpldup (
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &out) <= -1) return QSE_NULL;
|
||||
|
||||
*len = out.u.cpldup.len;
|
||||
if (len) *len = out.u.cpldup.len;
|
||||
return out.u.cpldup.ptr;
|
||||
}
|
||||
|
||||
qse_mchar_t* qse_awk_rtx_valtombsdup (
|
||||
qse_awk_rtx_t* rtx, const qse_awk_val_t* v, qse_size_t* len)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_rtx_valtostr_out_t out;
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &out) <= -1) return QSE_NULL;
|
||||
|
||||
if (len) *len = out.u.cpldup.len;
|
||||
return out.u.cpldup.ptr;
|
||||
#else
|
||||
qse_awk_rtx_valtostr_out_t out;
|
||||
qse_mchar_t* mbs;
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &out) <= -1) return QSE_NULL;
|
||||
|
||||
mbs = qse_wcsntombsdup (out.u.cpldup.ptr, out.u.cpldup.len, len, rtx->awk->mmgr);
|
||||
QSE_AWK_FREE (rtx->awk, out.u.cpldup.ptr);
|
||||
return mbs;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_awk_rtx_valtowcsdup (
|
||||
qse_awk_rtx_t* rtx, const qse_awk_val_t* v, qse_size_t* len)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_rtx_valtostr_out_t out;
|
||||
qse_wchar_t* wcs;
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &out) <= -1) return QSE_NULL;
|
||||
|
||||
wcs = qse_mbsntombsdup (out.u.cpldup.ptr, out.u.cpldup.len, len, rtx->awk->mmgr);
|
||||
QSE_AWK_FREE (rtx->awk, out.u.cpldup.ptr);
|
||||
return wcs;
|
||||
#else
|
||||
qse_awk_rtx_valtostr_out_t out;
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &out) <= -1) return QSE_NULL;
|
||||
|
||||
if (len) *len = out.u.cpldup.len;
|
||||
return out.u.cpldup.ptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
int qse_awk_rtx_valtonum (
|
||||
qse_awk_rtx_t* rtx, const qse_awk_val_t* v, qse_long_t* l, qse_flt_t* r)
|
||||
{
|
||||
|
Reference in New Issue
Block a user