Procházet zdrojové kódy

core: use a structure for preprocessor defines

- used to be an array of two str
- store type of define operation in structure
Daniel-Constantin Mierla před 7 roky
rodič
revize
c33cb7afd0
2 změnil soubory, kde provedl 39 přidání a 31 odebrání
  1. 33 31
      src/core/cfg.lex
  2. 6 0
      src/core/ppcfg.h

+ 33 - 31
src/core/cfg.lex

@@ -1704,7 +1704,7 @@ static int sr_pop_yy_state()
 /* define/ifdef support */
 
 #define MAX_DEFINES    256
-static str pp_defines[MAX_DEFINES][2];
+static ksr_ppdefine_t pp_defines[MAX_DEFINES];
 static int pp_num_defines = 0;
 static int pp_define_type = 0;
 static int pp_define_index = -1;
@@ -1721,7 +1721,7 @@ str* pp_get_define_name(int idx)
 {
 	if(idx<0 || idx>=pp_num_defines)
 		return NULL;
-	return &pp_defines[idx][0];
+	return &pp_defines[idx].name;
 }
 
 static int pp_lookup(int len, const char * text)
@@ -1730,7 +1730,7 @@ static int pp_lookup(int len, const char * text)
 	int i;
 
 	for (i=0; i<pp_num_defines; i++)
-		if (STR_EQ(pp_defines[i][0], var))
+		if (STR_EQ(pp_defines[i].name, var))
 			return i;
 
 	return -1;
@@ -1763,11 +1763,12 @@ int pp_define(int len, const char * text)
 		} else if(pp_define_type==2) {
 			LM_DBG("redefining: %.*s\n", len, text);
 			pp_define_index = ppos;
-			if(pp_defines[ppos][1].s != NULL) {
-				pkg_free(pp_defines[ppos][1].s);
-				pp_defines[ppos][1].len = 0;
-				pp_defines[ppos][1].s = NULL;
+			if(pp_defines[ppos].value.s != NULL) {
+				pkg_free(pp_defines[ppos].value.s);
+				pp_defines[ppos].value.len = 0;
+				pp_defines[ppos].value.s = NULL;
 			}
+			pp_defines[ppos].type = pp_define_type;
 			return 0;
 		} else {
 			LM_CRIT("already defined: %.*s\n", len, text);
@@ -1775,16 +1776,17 @@ int pp_define(int len, const char * text)
 		}
 	}
 
-	pp_defines[pp_num_defines][0].len = len;
-	pp_defines[pp_num_defines][0].s = (char*)pkg_malloc(len+1);
-	if(pp_defines[pp_num_defines][0].s==NULL) {
+	pp_defines[pp_num_defines].name.len = len;
+	pp_defines[pp_num_defines].name.s = (char*)pkg_malloc(len+1);
+	if(pp_defines[pp_num_defines].name.s==NULL) {
 		LM_CRIT("no more memory to define: %.*s\n", len, text);
 		return -1;
 	}
-	memcpy(pp_defines[pp_num_defines][0].s, text, len);
-	pp_defines[pp_num_defines][0].s[len] = '\0';
-	pp_defines[pp_num_defines][1].len = 0;
-	pp_defines[pp_num_defines][1].s = NULL;
+	memcpy(pp_defines[pp_num_defines].name.s, text, len);
+	pp_defines[pp_num_defines].name.s[len] = '\0';
+	pp_defines[pp_num_defines].value.len = 0;
+	pp_defines[pp_num_defines].value.s = NULL;
+	pp_defines[pp_num_defines].type = pp_define_type;
 	pp_define_index = pp_num_defines;
 	pp_num_defines++;
 
@@ -1819,25 +1821,25 @@ int pp_define_set(int len, char *text)
 	}
 
 	ppos = pp_define_index;
-	if (pp_defines[ppos][0].s == NULL) {
+	if (pp_defines[ppos].name.s == NULL) {
 		LM_BUG("BUG: last define ID is null\n");
 		return -1;
 	}
 
-	if (pp_defines[ppos][1].s != NULL) {
+	if (pp_defines[ppos].value.s != NULL) {
 		LM_BUG("BUG: ID %.*s [%d] overwritten\n",
-			pp_defines[ppos][0].len,
-			pp_defines[ppos][0].s, ppos);
+			pp_defines[ppos].name.len,
+			pp_defines[ppos].name.s, ppos);
 		return -1;
 	}
 
-	pp_defines[ppos][1].len = len;
-	pp_defines[ppos][1].s = text;
+	pp_defines[ppos].value.len = len;
+	pp_defines[ppos].value.s = text;
 	LM_DBG("### setting define ID [%.*s] value [%.*s]\n",
-			pp_defines[ppos][0].len,
-			pp_defines[ppos][0].s,
-			pp_defines[ppos][1].len,
-			pp_defines[ppos][1].s);
+			pp_defines[ppos].name.len,
+			pp_defines[ppos].name.s,
+			pp_defines[ppos].value.len,
+			pp_defines[ppos].value.s);
 	return 0;
 }
 
@@ -1848,16 +1850,16 @@ static str *pp_define_get(int len, const char * text)
 
 	for (i=0; i<pp_num_defines; i++)
 	{
-		if (STR_EQ(pp_defines[i][0], var))
+		if (STR_EQ(pp_defines[i].name, var))
 		{
-			if(pp_defines[i][0].s!=NULL)
+			if(pp_defines[i].name.s!=NULL)
 			{
 				LM_DBG("### returning define ID [%.*s] value [%.*s]\n",
-					pp_defines[i][0].len,
-					pp_defines[i][0].s,
-					pp_defines[i][1].len,
-					pp_defines[i][1].s);
-				return &pp_defines[i][1];
+					pp_defines[i].name.len,
+					pp_defines[i].name.s,
+					pp_defines[i].value.len,
+					pp_defines[i].value.s);
+				return &pp_defines[i].value;
 			}
 			return NULL;
 		}

+ 6 - 0
src/core/ppcfg.h

@@ -25,6 +25,12 @@
 
 #include "str.h"
 
+typedef struct ksr_ppdefine {
+	str name;
+	str value;
+	int type;
+} ksr_ppdefine_t;
+
 str* pp_get_define_name(int idx);
 
 int pp_subst_add(char *data);