[SR-Dev] git:andrei/script_vars: script engine: rvalue fixes & cleanup
Andrei Pelinescu-Onciul
andrei at iptel.org
Wed Dec 10 14:53:47 CET 2008
Module: sip-router
Branch: andrei/script_vars
Commit: ce345a5719642ae13602be76b3fa21285c41073a
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=ce345a5719642ae13602be76b3fa21285c41073a
Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei at iptel.org>
Date: Wed Dec 10 14:50:36 2008 +0100
script engine: rvalue fixes & cleanup
- fixed rval_str_add2()
- more functions are now "public"
- support for optimization levels
---
rvalue.c | 22 +++++++---------------
rvalue.h | 5 +++++
2 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/rvalue.c b/rvalue.c
index 8dd5c86..742e576 100644
--- a/rvalue.c
+++ b/rvalue.c
@@ -1099,12 +1099,11 @@ inline static struct rvalue* rval_str_add2(struct run_act_ctx* h,
s2=&rv2->v.s;
}
/* do the actual copy */
- ret->v.s.len=rv1->v.s.len;
- memmove(ret->buf+ret->v.s.len, s2->s, s2->len);
+ memmove(ret->buf+rv1->v.s.len, s2->s, s2->len);
if (s1){
memcpy(ret->buf, s1->s, s1->len);
}
- ret->v.s.len+=s2->len;
+ ret->v.s.len=rv1->v.s.len+s2->len;
ret->v.s.s[ret->v.s.len]=0;
/* cleanup if needed */
if (flags & RV_CNT_ALLOCED_F)
@@ -1155,17 +1154,6 @@ error:
-/* forward decl. */
-inline static int rval_expr_eval_rvint(struct run_act_ctx* h,
- struct sip_msg* msg,
- struct rvalue** res_rv,
- int* res_i,
- struct rval_expr* rve,
- struct rval_cache* cache
- );
-
-
-
/** evals an integer expr to an int.
*
* *res=(int)eval(rve)
@@ -1276,7 +1264,7 @@ int rval_expr_eval_int( struct run_act_ctx* h, struct sip_msg* msg,
* modified only if rv_chg_in_place() returns true.
* @result 0 on success, -1 on error, sets *res_rv or *res_i.
*/
-inline static int rval_expr_eval_rvint(struct run_act_ctx* h,
+int rval_expr_eval_rvint( struct run_act_ctx* h,
struct sip_msg* msg,
struct rvalue** res_rv,
int* res_i,
@@ -1645,6 +1633,8 @@ struct rval_expr* mk_rval_expr2(enum rval_expr_op op, struct rval_expr* rve1,
*/
static int rve_can_optimize_int(struct rval_expr* rve)
{
+ if (scr_opt_lev<1)
+ return 0;
if (rve->op == RVE_RVAL_OP)
return 0;
if (rve->left.rve->op != RVE_RVAL_OP)
@@ -1671,6 +1661,8 @@ static int rve_can_optimize_int(struct rval_expr* rve)
*/
static int rve_can_optimize_str(struct rval_expr* rve)
{
+ if (scr_opt_lev<1)
+ return 0;
if (rve->op == RVE_RVAL_OP)
return 0;
DBG("rve_can_optimize_str: left %d, right %d\n",
diff --git a/rvalue.h b/rvalue.h
index 22c0cbc..faa6143 100644
--- a/rvalue.h
+++ b/rvalue.h
@@ -174,6 +174,11 @@ int rval_expr_eval_int( struct run_act_ctx* h, struct sip_msg* msg,
/** evals a rval expr.. */
struct rvalue* rval_expr_eval(struct run_act_ctx* h, struct sip_msg* msg,
struct rval_expr* rve);
+/** evals an integer expr to an int or rvalue. */
+int rval_expr_eval_rvint( struct run_act_ctx* h, struct sip_msg* msg,
+ struct rvalue** rv_res, int* i_res,
+ struct rval_expr* rve, struct rval_cache* cache);
+
/** guess the type of an expression. */
enum rval_type rve_guess_type(struct rval_expr* rve);
More information about the sr-dev
mailing list