added qse_awk_rtx_setprm().
changed some module functions to use referenced argument
This commit is contained in:
parent
db32de0ceb
commit
d9f961c6c3
@ -1454,10 +1454,22 @@ QSE_EXPORT void* qse_awk_getxtn (
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_awk_getprm() function gets primitive functions
|
||||
* The qse_awk_getprm() function retrieves primitive functions
|
||||
* associated. Actual function pointers are copied into a
|
||||
* structure specified by @a prm.
|
||||
*/
|
||||
QSE_EXPORT qse_awk_prm_t* qse_awk_getprm (
|
||||
qse_awk_t* awk
|
||||
QSE_EXPORT void qse_awk_getprm (
|
||||
qse_awk_t* awk,
|
||||
qse_awk_prm_t* prm
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_awk_setprm() function changes existing primitive
|
||||
* functions.
|
||||
*/
|
||||
QSE_EXPORT void qse_awk_setprm (
|
||||
qse_awk_t* awk,
|
||||
const qse_awk_prm_t* prm
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -424,9 +424,14 @@ void* qse_awk_getxtn (qse_awk_t* awk)
|
||||
return QSE_XTN (awk);
|
||||
}
|
||||
|
||||
qse_awk_prm_t* qse_awk_getprm (qse_awk_t* awk)
|
||||
void qse_awk_getprm (qse_awk_t* awk, qse_awk_prm_t* prm)
|
||||
{
|
||||
return &awk->prm;
|
||||
*prm = awk->prm;
|
||||
}
|
||||
|
||||
void qse_awk_setprm (qse_awk_t* awk, const qse_awk_prm_t* prm)
|
||||
{
|
||||
awk->prm = *prm;
|
||||
}
|
||||
|
||||
int qse_awk_setopt (qse_awk_t* awk, qse_awk_opt_t id, const void* value)
|
||||
|
@ -755,9 +755,6 @@ qse_awk_rtx_t* qse_awk_rtx_open (
|
||||
qse_awk_rtx_t* rtx;
|
||||
struct module_init_ctx_t mic;
|
||||
|
||||
QSE_ASSERTX (awk->prm.math.pow != QSE_NULL, "Call qse_awk_setprm() first");
|
||||
QSE_ASSERTX (awk->prm.sprintf != QSE_NULL, "Call qse_awk_setprm() first");
|
||||
|
||||
/* clear the awk error code */
|
||||
qse_awk_seterrnum (awk, QSE_AWK_ENOERR, QSE_NULL);
|
||||
|
||||
@ -4732,9 +4729,6 @@ static qse_awk_val_t* eval_binop_exp (
|
||||
qse_flt_t r1, r2;
|
||||
qse_awk_val_t* res;
|
||||
|
||||
QSE_ASSERTX (rtx->awk->prm.math.pow != QSE_NULL,
|
||||
"the pow function must be provided when the awk object is created to make exponentiation work properly.");
|
||||
|
||||
n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1);
|
||||
n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2);
|
||||
|
||||
|
@ -281,11 +281,11 @@ static int read_byid (qse_awk_rtx_t* rtx, dir_list_t* list, qse_long_t id, qse_a
|
||||
if (!tmp || qse_awk_rtx_setrefval (rtx, ref, tmp) <= -1)
|
||||
{
|
||||
list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx));
|
||||
if (tmp) qse_awk_rtx_freemem (rtx, tmp);
|
||||
if (tmp) qse_awk_rtx_freeval (rtx, tmp);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -356,9 +356,10 @@ static int fnc_dir_errstr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
static int fnc_dir_open (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
dir_list_t* list;
|
||||
dir_node_t* node;
|
||||
dir_node_t* node = QSE_NULL;
|
||||
qse_long_t ret;
|
||||
qse_char_t* path;
|
||||
qse_awk_val_t* retv;
|
||||
|
||||
list = rtx_to_list (rtx, fi);
|
||||
|
||||
@ -376,7 +377,16 @@ static int fnc_dir_open (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret));
|
||||
/* ret may not be a statically managed number.
|
||||
* error checking is required */
|
||||
retv = qse_awk_rtx_makeintval (rtx, ret);
|
||||
if (retv == QSE_NULL)
|
||||
{
|
||||
if (node) free_dir_node (rtx, list, node);
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_awk_rtx_setretval (rtx, retv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -498,6 +498,7 @@ static int fnc_getnwifcfg (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
qse_nwifcfg_t cfg;
|
||||
qse_awk_rtx_valtostr_out_t out;
|
||||
int ret = -1;
|
||||
|
||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLCPY;
|
||||
out.u.cplcpy.ptr = cfg.name;
|
||||
@ -520,7 +521,7 @@ static int fnc_getnwifcfg (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
qse_char_t mask[128];
|
||||
qse_char_t ethw[32];
|
||||
qse_awk_val_map_data_t md[7];
|
||||
qse_awk_val_t* retv;
|
||||
qse_awk_val_t* tmp;
|
||||
|
||||
QSE_MEMSET (md, 0, QSE_SIZEOF(md));
|
||||
|
||||
@ -563,14 +564,19 @@ static int fnc_getnwifcfg (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
md[5].vptr = (cfg.flags & QSE_NWIFCFG_LINKUP)? QSE_T("up"): QSE_T("down");
|
||||
}
|
||||
|
||||
retv = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
||||
if (retv == QSE_NULL) return -1;
|
||||
|
||||
qse_awk_rtx_setretval (rtx, retv);
|
||||
tmp = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
||||
if (tmp)
|
||||
{
|
||||
if (qse_awk_rtx_setrefval (rtx, qse_awk_rtx_getarg (rtx, 2), tmp) <= -1)
|
||||
qse_awk_rtx_freeval (rtx, tmp);
|
||||
else ret = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* no error check for qse_awk_rtx_makeintval() since ret is 0 or -1 */
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -597,7 +603,7 @@ static fnctab_t fnctab[] =
|
||||
{ QSE_T("getenv"), { { 1, 1, QSE_NULL }, fnc_getenv, 0 } },
|
||||
{ QSE_T("geteuid"), { { 0, 0, QSE_NULL }, fnc_geteuid, 0 } },
|
||||
{ QSE_T("getgid"), { { 0, 0, QSE_NULL }, fnc_getgid, 0 } },
|
||||
{ QSE_T("getnwifcfg"), { { 2, 2, QSE_NULL }, fnc_getnwifcfg, 0 } },
|
||||
{ QSE_T("getnwifcfg"), { { 3, 3, QSE_T("vvr") }, fnc_getnwifcfg, 0 } },
|
||||
{ QSE_T("getpgrp"), { { 0, 0, QSE_NULL }, fnc_getpgrp, 0 } },
|
||||
{ QSE_T("getpid"), { { 0, 0, QSE_NULL }, fnc_getpid, 0 } },
|
||||
{ QSE_T("getppid"), { { 0, 0, QSE_NULL }, fnc_getppid, 0 } },
|
||||
|
@ -426,7 +426,7 @@ static int adddeltapath_byid (
|
||||
|
||||
static int getsection_byid (
|
||||
qse_awk_rtx_t* rtx, uctx_list_t* list, qse_long_t id,
|
||||
qse_mchar_t* tuple, qse_awk_val_t** retv)
|
||||
qse_mchar_t* tuple, qse_awk_val_ref_t* ref)
|
||||
{
|
||||
int x = UCI_ERR_INVAL;
|
||||
|
||||
@ -469,7 +469,14 @@ static int getsection_byid (
|
||||
md[2].vptr = &lv;
|
||||
|
||||
tmp = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
||||
if (tmp) *retv = tmp;
|
||||
if (tmp)
|
||||
{
|
||||
if (qse_awk_rtx_setrefval (rtx, ref, tmp) <= -1)
|
||||
{
|
||||
qse_awk_rtx_freeval (rtx, tmp);
|
||||
x = UCI_ERR_MEM;
|
||||
}
|
||||
}
|
||||
else x = UCI_ERR_MEM;
|
||||
}
|
||||
else x = UCI_ERR_NOTFOUND;
|
||||
@ -484,7 +491,7 @@ static int getsection_byid (
|
||||
|
||||
static int getoption_byid (
|
||||
qse_awk_rtx_t* rtx, uctx_list_t* list, qse_long_t id,
|
||||
qse_mchar_t* tuple, qse_awk_val_t** retv)
|
||||
qse_mchar_t* tuple, qse_awk_val_ref_t* ref)
|
||||
{
|
||||
int x = UCI_ERR_INVAL;
|
||||
|
||||
@ -524,7 +531,15 @@ static int getoption_byid (
|
||||
md[1].vptr = uo->v.string;
|
||||
|
||||
map = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
||||
if (map) *retv = map;
|
||||
if (map)
|
||||
{
|
||||
if (qse_awk_rtx_setrefval (rtx, ref, map) <= -1)
|
||||
{
|
||||
qse_awk_rtx_freeval (rtx, map);
|
||||
map = QSE_NULL;
|
||||
x = UCI_ERR_MEM;
|
||||
}
|
||||
}
|
||||
else x = UCI_ERR_MEM;
|
||||
}
|
||||
else if (uo->type == UCI_TYPE_LIST)
|
||||
@ -564,8 +579,7 @@ static int getoption_byid (
|
||||
fld = qse_awk_rtx_makestrvalwithmbs (rtx, tmp->name);
|
||||
if (!fld)
|
||||
{
|
||||
qse_awk_rtx_refupval (rtx, map);
|
||||
qse_awk_rtx_refdownval (rtx, map);
|
||||
qse_awk_rtx_freeval (rtx, map);
|
||||
map = QSE_NULL;
|
||||
x = UCI_ERR_MEM;
|
||||
break;
|
||||
@ -586,10 +600,8 @@ static int getoption_byid (
|
||||
if (kp == QSE_NULL || qse_awk_rtx_setmapvalfld (rtx, map, kp, kl, fld) == QSE_NULL)
|
||||
{
|
||||
if (kp) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kp);
|
||||
qse_awk_rtx_refupval (rtx, fld);
|
||||
qse_awk_rtx_refdownval (rtx, fld);
|
||||
qse_awk_rtx_refupval (rtx, map);
|
||||
qse_awk_rtx_refdownval (rtx, map);
|
||||
qse_awk_rtx_freeval (rtx, fld);
|
||||
qse_awk_rtx_freeval (rtx, map);
|
||||
map = QSE_NULL;
|
||||
x = UCI_ERR_MEM;
|
||||
break;
|
||||
@ -599,7 +611,15 @@ static int getoption_byid (
|
||||
count++;
|
||||
}
|
||||
|
||||
if (map) *retv = map;
|
||||
if (map)
|
||||
{
|
||||
if (qse_awk_rtx_setrefval (rtx, ref, map) <= -1)
|
||||
{
|
||||
qse_awk_rtx_freeval (rtx, map);
|
||||
map = QSE_NULL;
|
||||
x = UCI_ERR_MEM;
|
||||
}
|
||||
}
|
||||
}
|
||||
else x = UCI_ERR_MEM;
|
||||
}
|
||||
@ -1199,7 +1219,6 @@ static int fnc_uci_adddeltapath (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t*
|
||||
static int fnc_uci_getoption (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
uctx_list_t* list;
|
||||
qse_awk_val_t* retv;
|
||||
qse_long_t id;
|
||||
int ret;
|
||||
|
||||
@ -1214,7 +1233,7 @@ static int fnc_uci_getoption (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
item = qse_awk_rtx_valtombsdup (rtx, qse_awk_rtx_getarg(rtx, 1), QSE_NULL);
|
||||
if (item)
|
||||
{
|
||||
ret = getoption_byid (rtx, list, id, item, &retv);
|
||||
ret = getoption_byid (rtx, list, id, item, qse_awk_rtx_getarg (rtx, 2));
|
||||
qse_awk_rtx_freemem (rtx, item);
|
||||
}
|
||||
else ret = -UCI_ERR_MEM;
|
||||
@ -1223,18 +1242,17 @@ static int fnc_uci_getoption (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
if (ret <= -1)
|
||||
{
|
||||
list->errnum = -ret;
|
||||
ret = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_rtx_setretval (rtx, retv);
|
||||
}
|
||||
else ret = 0;
|
||||
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fnc_uci_getsection (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
uctx_list_t* list;
|
||||
qse_awk_val_t* retv;
|
||||
qse_long_t id;
|
||||
int ret;
|
||||
|
||||
@ -1246,10 +1264,10 @@ static int fnc_uci_getsection (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
qse_mchar_t* item;
|
||||
|
||||
item = qse_awk_rtx_valtombsdup (rtx, qse_awk_rtx_getarg(rtx, 1), QSE_NULL);
|
||||
item = qse_awk_rtx_valtombsdup (rtx, qse_awk_rtx_getarg (rtx, 1), QSE_NULL);
|
||||
if (item)
|
||||
{
|
||||
ret = getsection_byid (rtx, list, id, item, &retv);
|
||||
ret = getsection_byid (rtx, list, id, item, qse_awk_rtx_getarg (rtx, 2));
|
||||
qse_awk_rtx_freemem (rtx, item);
|
||||
}
|
||||
else ret = -UCI_ERR_MEM;
|
||||
@ -1258,11 +1276,11 @@ static int fnc_uci_getsection (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
if (ret <= -1)
|
||||
{
|
||||
list->errnum = -ret;
|
||||
ret = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_rtx_setretval (rtx, retv);
|
||||
}
|
||||
else ret = 0;
|
||||
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1285,8 +1303,8 @@ static fnctab_t fnctab[] =
|
||||
{ QSE_T("delete"), { { 2, 2, QSE_NULL }, fnc_uci_delete, 0 } },
|
||||
{ QSE_T("errno"), { { 0, 0, QSE_NULL }, fnc_uci_errno, 0 } },
|
||||
{ QSE_T("errstr"), { { 0, 1, QSE_NULL }, fnc_uci_errstr, 0 } },
|
||||
{ QSE_T("getoption"), { { 2, 2, QSE_NULL }, fnc_uci_getoption, 0 } },
|
||||
{ QSE_T("getsection"), { { 2, 2, QSE_NULL }, fnc_uci_getsection, 0 } },
|
||||
{ QSE_T("getoption"), { { 3, 3, QSE_T("vvr")}, fnc_uci_getoption, 0 } },
|
||||
{ QSE_T("getsection"), { { 3, 3, QSE_T("vvr")}, fnc_uci_getsection, 0 } },
|
||||
{ QSE_T("load"), { { 2, 2, QSE_NULL }, fnc_uci_load, 0 } },
|
||||
{ QSE_T("open"), { { 0, 0, QSE_NULL }, fnc_uci_open, 0 } },
|
||||
{ QSE_T("rename"), { { 2, 2, QSE_NULL }, fnc_uci_rename, 0 } },
|
||||
|
Loading…
x
Reference in New Issue
Block a user