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:
2012-10-31 08:31:58 +00:00
parent 3db3ab2249
commit a3af4c3eed
14 changed files with 935 additions and 429 deletions

View File

@ -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 */

View File

@ -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;
}

View File

@ -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
{

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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)
{