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_EXPORT void qse_awk_getprm (
|
||||||
qse_awk_t* awk
|
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);
|
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)
|
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;
|
qse_awk_rtx_t* rtx;
|
||||||
struct module_init_ctx_t mic;
|
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 */
|
/* clear the awk error code */
|
||||||
qse_awk_seterrnum (awk, QSE_AWK_ENOERR, QSE_NULL);
|
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_flt_t r1, r2;
|
||||||
qse_awk_val_t* res;
|
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);
|
n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1);
|
||||||
n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2);
|
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)
|
if (!tmp || qse_awk_rtx_setrefval (rtx, ref, tmp) <= -1)
|
||||||
{
|
{
|
||||||
list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx));
|
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 1;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
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)
|
static int fnc_dir_open (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||||
{
|
{
|
||||||
dir_list_t* list;
|
dir_list_t* list;
|
||||||
dir_node_t* node;
|
dir_node_t* node = QSE_NULL;
|
||||||
qse_long_t ret;
|
qse_long_t ret;
|
||||||
qse_char_t* path;
|
qse_char_t* path;
|
||||||
|
qse_awk_val_t* retv;
|
||||||
|
|
||||||
list = rtx_to_list (rtx, fi);
|
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;
|
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;
|
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_nwifcfg_t cfg;
|
||||||
qse_awk_rtx_valtostr_out_t out;
|
qse_awk_rtx_valtostr_out_t out;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
out.type = QSE_AWK_RTX_VALTOSTR_CPLCPY;
|
out.type = QSE_AWK_RTX_VALTOSTR_CPLCPY;
|
||||||
out.u.cplcpy.ptr = cfg.name;
|
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 mask[128];
|
||||||
qse_char_t ethw[32];
|
qse_char_t ethw[32];
|
||||||
qse_awk_val_map_data_t md[7];
|
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));
|
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");
|
md[5].vptr = (cfg.flags & QSE_NWIFCFG_LINKUP)? QSE_T("up"): QSE_T("down");
|
||||||
}
|
}
|
||||||
|
|
||||||
retv = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
tmp = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
||||||
if (retv == QSE_NULL) return -1;
|
if (tmp)
|
||||||
|
{
|
||||||
qse_awk_rtx_setretval (rtx, retv);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -597,7 +603,7 @@ static fnctab_t fnctab[] =
|
|||||||
{ QSE_T("getenv"), { { 1, 1, QSE_NULL }, fnc_getenv, 0 } },
|
{ QSE_T("getenv"), { { 1, 1, QSE_NULL }, fnc_getenv, 0 } },
|
||||||
{ QSE_T("geteuid"), { { 0, 0, QSE_NULL }, fnc_geteuid, 0 } },
|
{ QSE_T("geteuid"), { { 0, 0, QSE_NULL }, fnc_geteuid, 0 } },
|
||||||
{ QSE_T("getgid"), { { 0, 0, QSE_NULL }, fnc_getgid, 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("getpgrp"), { { 0, 0, QSE_NULL }, fnc_getpgrp, 0 } },
|
||||||
{ QSE_T("getpid"), { { 0, 0, QSE_NULL }, fnc_getpid, 0 } },
|
{ QSE_T("getpid"), { { 0, 0, QSE_NULL }, fnc_getpid, 0 } },
|
||||||
{ QSE_T("getppid"), { { 0, 0, QSE_NULL }, fnc_getppid, 0 } },
|
{ QSE_T("getppid"), { { 0, 0, QSE_NULL }, fnc_getppid, 0 } },
|
||||||
|
@ -426,7 +426,7 @@ static int adddeltapath_byid (
|
|||||||
|
|
||||||
static int getsection_byid (
|
static int getsection_byid (
|
||||||
qse_awk_rtx_t* rtx, uctx_list_t* list, qse_long_t id,
|
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;
|
int x = UCI_ERR_INVAL;
|
||||||
|
|
||||||
@ -469,7 +469,14 @@ static int getsection_byid (
|
|||||||
md[2].vptr = &lv;
|
md[2].vptr = &lv;
|
||||||
|
|
||||||
tmp = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
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_MEM;
|
||||||
}
|
}
|
||||||
else x = UCI_ERR_NOTFOUND;
|
else x = UCI_ERR_NOTFOUND;
|
||||||
@ -484,7 +491,7 @@ static int getsection_byid (
|
|||||||
|
|
||||||
static int getoption_byid (
|
static int getoption_byid (
|
||||||
qse_awk_rtx_t* rtx, uctx_list_t* list, qse_long_t id,
|
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;
|
int x = UCI_ERR_INVAL;
|
||||||
|
|
||||||
@ -524,7 +531,15 @@ static int getoption_byid (
|
|||||||
md[1].vptr = uo->v.string;
|
md[1].vptr = uo->v.string;
|
||||||
|
|
||||||
map = qse_awk_rtx_makemapvalwithdata (rtx, md);
|
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 x = UCI_ERR_MEM;
|
||||||
}
|
}
|
||||||
else if (uo->type == UCI_TYPE_LIST)
|
else if (uo->type == UCI_TYPE_LIST)
|
||||||
@ -564,8 +579,7 @@ static int getoption_byid (
|
|||||||
fld = qse_awk_rtx_makestrvalwithmbs (rtx, tmp->name);
|
fld = qse_awk_rtx_makestrvalwithmbs (rtx, tmp->name);
|
||||||
if (!fld)
|
if (!fld)
|
||||||
{
|
{
|
||||||
qse_awk_rtx_refupval (rtx, map);
|
qse_awk_rtx_freeval (rtx, map);
|
||||||
qse_awk_rtx_refdownval (rtx, map);
|
|
||||||
map = QSE_NULL;
|
map = QSE_NULL;
|
||||||
x = UCI_ERR_MEM;
|
x = UCI_ERR_MEM;
|
||||||
break;
|
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_NULL || qse_awk_rtx_setmapvalfld (rtx, map, kp, kl, fld) == QSE_NULL)
|
||||||
{
|
{
|
||||||
if (kp) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kp);
|
if (kp) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kp);
|
||||||
qse_awk_rtx_refupval (rtx, fld);
|
qse_awk_rtx_freeval (rtx, fld);
|
||||||
qse_awk_rtx_refdownval (rtx, fld);
|
qse_awk_rtx_freeval (rtx, map);
|
||||||
qse_awk_rtx_refupval (rtx, map);
|
|
||||||
qse_awk_rtx_refdownval (rtx, map);
|
|
||||||
map = QSE_NULL;
|
map = QSE_NULL;
|
||||||
x = UCI_ERR_MEM;
|
x = UCI_ERR_MEM;
|
||||||
break;
|
break;
|
||||||
@ -599,7 +611,15 @@ static int getoption_byid (
|
|||||||
count++;
|
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;
|
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)
|
static int fnc_uci_getoption (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||||
{
|
{
|
||||||
uctx_list_t* list;
|
uctx_list_t* list;
|
||||||
qse_awk_val_t* retv;
|
|
||||||
qse_long_t id;
|
qse_long_t id;
|
||||||
int ret;
|
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);
|
item = qse_awk_rtx_valtombsdup (rtx, qse_awk_rtx_getarg(rtx, 1), QSE_NULL);
|
||||||
if (item)
|
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);
|
qse_awk_rtx_freemem (rtx, item);
|
||||||
}
|
}
|
||||||
else ret = -UCI_ERR_MEM;
|
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)
|
if (ret <= -1)
|
||||||
{
|
{
|
||||||
list->errnum = -ret;
|
list->errnum = -ret;
|
||||||
|
ret = -1;
|
||||||
}
|
}
|
||||||
else
|
else ret = 0;
|
||||||
{
|
|
||||||
qse_awk_rtx_setretval (rtx, retv);
|
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret));
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fnc_uci_getsection (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
static int fnc_uci_getsection (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||||
{
|
{
|
||||||
uctx_list_t* list;
|
uctx_list_t* list;
|
||||||
qse_awk_val_t* retv;
|
|
||||||
qse_long_t id;
|
qse_long_t id;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -1249,7 +1267,7 @@ static int fnc_uci_getsection (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);
|
item = qse_awk_rtx_valtombsdup (rtx, qse_awk_rtx_getarg (rtx, 1), QSE_NULL);
|
||||||
if (item)
|
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);
|
qse_awk_rtx_freemem (rtx, item);
|
||||||
}
|
}
|
||||||
else ret = -UCI_ERR_MEM;
|
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)
|
if (ret <= -1)
|
||||||
{
|
{
|
||||||
list->errnum = -ret;
|
list->errnum = -ret;
|
||||||
|
ret = -1;
|
||||||
}
|
}
|
||||||
else
|
else ret = 0;
|
||||||
{
|
|
||||||
qse_awk_rtx_setretval (rtx, retv);
|
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret));
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1285,8 +1303,8 @@ static fnctab_t fnctab[] =
|
|||||||
{ QSE_T("delete"), { { 2, 2, QSE_NULL }, fnc_uci_delete, 0 } },
|
{ QSE_T("delete"), { { 2, 2, QSE_NULL }, fnc_uci_delete, 0 } },
|
||||||
{ QSE_T("errno"), { { 0, 0, QSE_NULL }, fnc_uci_errno, 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("errstr"), { { 0, 1, QSE_NULL }, fnc_uci_errstr, 0 } },
|
||||||
{ QSE_T("getoption"), { { 2, 2, QSE_NULL }, fnc_uci_getoption, 0 } },
|
{ QSE_T("getoption"), { { 3, 3, QSE_T("vvr")}, fnc_uci_getoption, 0 } },
|
||||||
{ QSE_T("getsection"), { { 2, 2, QSE_NULL }, fnc_uci_getsection, 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("load"), { { 2, 2, QSE_NULL }, fnc_uci_load, 0 } },
|
||||||
{ QSE_T("open"), { { 0, 0, QSE_NULL }, fnc_uci_open, 0 } },
|
{ QSE_T("open"), { { 0, 0, QSE_NULL }, fnc_uci_open, 0 } },
|
||||||
{ QSE_T("rename"), { { 2, 2, QSE_NULL }, fnc_uci_rename, 0 } },
|
{ QSE_T("rename"), { { 2, 2, QSE_NULL }, fnc_uci_rename, 0 } },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user