Переглянути джерело

core: added #!substdefs

- similar to substdef but the defined value will be enclosed in double
  quotes
Daniel-Constantin Mierla 14 роки тому
батько
коміт
8198fd2b82
4 змінених файлів з 24 додано та 5 видалено
  1. 2 0
      cfg.lex
  2. 4 1
      cfg.y
  3. 17 3
      ppcfg.c
  4. 1 1
      ppcfg.h

+ 2 - 0
cfg.lex

@@ -563,6 +563,7 @@ EAT_ABLE	[\ \t\b\r]
 /* pre-processing blocks */
 SUBST       subst
 SUBSTDEF    substdef
+SUBSTDEFS   substdefs
 
 /* include files */
 INCLUDEFILE     "include_file"
@@ -1245,6 +1246,7 @@ IMPORTFILE      "import_file"
 
 <INITIAL>{PREP_START}{SUBST}	{ count();  return SUBST;}
 <INITIAL>{PREP_START}{SUBSTDEF}	{ count();  return SUBSTDEF;}
+<INITIAL>{PREP_START}{SUBSTDEFS}	{ count();  return SUBSTDEFS;}
 
 <INITIAL,IFDEF_SKIP>{PREP_START}{IFDEF}{EAT_ABLE}+    { count();
 								if (pp_ifdef_type(1)) return 1;

+ 4 - 1
cfg.y

@@ -563,6 +563,7 @@ extern char *finame;
 /*pre-processor*/
 %token SUBST
 %token SUBSTDEF
+%token SUBSTDEFS
 
 /* operators, C like precedence */
 %right EQUAL
@@ -1969,8 +1970,10 @@ event_route_stm: ROUTE_EVENT LBRACK EVENT_RT_NAME RBRACK LBRACE actions RBRACE {
 preprocess_stm:
 	SUBST STRING { if(pp_subst_add($2)<0) YYERROR; }
 	| SUBST error { yyerror("invalid subst preprocess statement"); }
-	| SUBSTDEF STRING { if(pp_substdef_add($2)<0) YYERROR; }
+	| SUBSTDEF STRING { if(pp_substdef_add($2, 0)<0) YYERROR; }
 	| SUBSTDEF error { yyerror("invalid substdef preprocess statement"); }
+	| SUBSTDEFS STRING { if(pp_substdef_add($2, 1)<0) YYERROR; }
+	| SUBSTDEFS error { yyerror("invalid substdefs preprocess statement"); }
 	;
 
 /*exp:	rval_expr

+ 17 - 3
ppcfg.c

@@ -81,7 +81,7 @@ int pp_subst_add(char *data)
 	return 0;
 }
 
-int pp_substdef_add(char *data)
+int pp_substdef_add(char *data, int mode)
 {
 	char c;
 	char *p;
@@ -131,17 +131,31 @@ found_regexp:
 found_repl:
 	defvalue.len = p - defvalue.s;
 
+	pp_define_set_type(0);
 	if(pp_define(defname.len, defname.s)<0) {
 		LM_ERR("cannot set define name\n");
 		goto error;
 	}
+	if(mode==1) {
+		/* define the value enclosed in double quotes */
+		*(defvalue.s-1) = '"';
+		defvalue.s[defvalue.len] = '"';
+		defvalue.s--;
+		defvalue.len += 2;
+	}
 	if(pp_define_set(defvalue.len, defvalue.s)<0) {
 		LM_ERR("cannot set define value\n");
 		goto error;
 	}
+	if(mode==1) {
+		defvalue.s++;
+		defvalue.len -= 2;
+		*(defvalue.s-1) = c;
+		defvalue.s[defvalue.len] = c;
+	}
 
-	LM_DBG("### added substdef: [%.*s]=[%.*s]\n", defname.len, defname.s,
-			defvalue.len, defvalue.s);
+	LM_DBG("### added substdef: [%.*s]=[%.*s] (%d)\n", defname.len, defname.s,
+			defvalue.len, defvalue.s, mode);
 
 	return 0;
 

+ 1 - 1
ppcfg.h

@@ -23,7 +23,7 @@
 #define _PPCFG_H_
 
 int pp_subst_add(char *data);
-int pp_substdef_add(char *data);
+int pp_substdef_add(char *data, int mode);
 int pp_subst_run(char **data);
 
 int  pp_define(int len, const char *text);