PERFORCE change 123569 for review

Fredrik Lindberg fli at FreeBSD.org
Mon Jul 16 01:18:07 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=123569

Change 123569 by fli at fli_nexus on 2007/07/16 01:17:06

	- Add the necessary bits needed for the "pointer" function.
	- A rrset now has a uniqe identifier instead of a "primary name",
	  the primary name and alternative names are simply listed in
	  the priority order using the "name"-option.
	  The "alt"-option used for alternative names is therefore removed.
	- Style fixes.

Affected files ...

.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/parse.y#2 edit
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/token.l#2 edit

Differences ...

==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/parse.y#2 (text+ko) ====

@@ -36,8 +36,8 @@
 
 %token IFACE ZONE RRSET RES OBRACE EBRACE EQ SEMI
 %token DEF_TTL DEF_TTL_SHARED
-%token RRSET_ALT RRSET_SHARED RRSET_TTL
-%token RES_DATA RES_TTL
+%token RRSET_NAME RRSET_SHARED RRSET_TTL
+%token RES_DATA RES_TTL RES_RECORD
 %token <ptr> STRING LVALUE
 
 %{
@@ -80,6 +80,7 @@
 struct cfg_resdata {
 	TAILQ_ENTRY(cfg_resdata) csd_next;
 	char *csd_data;
+	int csd_auto;
 };
 
 struct cfg_res {
@@ -92,6 +93,7 @@
 struct cfg_rrset {
 	TAILQ_HEAD(, cfg_name) cr_names;
 	TAILQ_HEAD(, cfg_res) cr_res;
+	char *cr_ident;
 	int cr_shared;
 	int cr_namcount;
 	uint32_t cr_ttl;;
@@ -206,8 +208,6 @@
 
 rrset_set:
 	RRSET STRING OBRACE {
-		struct cfg_name *cn;
-
 		if (!cfg_ifvalid && cfg_ifpassed)	
 			break;
 
@@ -216,15 +216,8 @@
 		bzero(&cfg_rrset, sizeof(struct cfg_rrset));
 		TAILQ_INIT(&cfg_rrset.cr_names);
 		TAILQ_INIT(&cfg_rrset.cr_res);
-		cn = malloc(sizeof(struct cfg_name));
-		if (cfg_zone == NULL)
-			cn->cn_name = $2;
-		else {
-			asprintf(&cn->cn_name, "%s.%s", $2, cfg_zone);
-			free($2);
-		}
-		TAILQ_INSERT_TAIL(&cfg_rrset.cr_names, cn, cn_next);
-		cfg_rrset.cr_namcount = 1;
+		cfg_rrset.cr_namcount = 0;
+		cfg_rrset.cr_ident = $2;
 	}
 	rrset_content EBRACE {
 		struct cfg_name *cn;
@@ -238,8 +231,15 @@
 		if (!cfg_ifvalid && cfg_ifpassed)
 			break;
 
-		dprintf(DEBUG_CFGPARSE, "rrset names%s",
-		    (cfg_rrset.cr_shared ? " (shared)" : ""));
+		if (cfg_rrset.cr_namcount == 0) {
+			dprintf(DEBUG_CFGPARSE, "No names on rrset %s",
+			    cfg_rrset.cr_ident);
+			break;
+		}
+
+		dprintf(DEBUG_CFGPARSE, "rrset \"%s\" names%s (%d)",
+		    cfg_rrset.cr_ident, (cfg_rrset.cr_shared ?
+		    " (shared)" : ""), cfg_rrset.cr_namcount);
 
 		/* Do not free names, its in use by dbr_add() */
 		names = malloc(sizeof(wchar_t *) * (cfg_rrset.cr_namcount + 1));
@@ -253,7 +253,8 @@
 		}
 		names[i] = NULL;
 
-		dr = dbr_add(dbr, names, cfg_rrset.cr_shared ? DR_SHARED : DR_UNIQUE);
+		dr = dbr_add(dbr, cfg_rrset.cr_ident, names,
+		    cfg_rrset.cr_shared); 
 		assert(dr != NULL);
 
 		dprintf(DEBUG_CFGPARSE, "rrset resources");
@@ -266,11 +267,17 @@
 				dprintf(DEBUG_CFGPARSE, "  data = %s, ttl = %d",
 				    csd->csd_data, ttl);
 
-				len = strlen(csd->csd_data) + 1;
-				wp = malloc(len * sizeof(wchar_t));
-				mbstowcs(wp, csd->csd_data, len);
-				dbr_res_add(dr, cs->cs_type, ttl, wp);
-				free(wp);
+				if (csd->csd_auto) {
+					dbr_res_add(dr, cs->cs_type, ttl,
+					    csd->csd_data, 1);
+				}
+				else {
+					len = strlen(csd->csd_data) + 1;
+					wp = malloc(len * sizeof(wchar_t));
+					mbstowcs(wp, csd->csd_data, len);
+					dbr_res_add(dr, cs->cs_type, ttl,
+					    wp, 0);
+				}
 			}
 		}
 
@@ -297,7 +304,8 @@
 		TAILQ_INIT(&cs->cs_data);
 		TAILQ_INSERT_TAIL(&cfg_rrset.cr_res, cs, cs_next);
 		cfg_res = cs;
-		dprintf(DEBUG_CFGPARSE, "res %s (%d) statement\n", $2, cs->cs_type);
+		dprintf(DEBUG_CFGPARSE, "res %s (%d) statement\n",
+		    $2, cs->cs_type);
 	}
 	res_content EBRACE {
 		if (!cfg_ifvalid && cfg_ifpassed)
@@ -323,13 +331,13 @@
 		free($3);
 	}
 	|
-	RRSET_ALT EQ STRING SEMI {
+	RRSET_NAME EQ STRING SEMI {
 		struct cfg_name *cn;
 
 		if (!cfg_ifvalid && cfg_ifpassed)
 			break;
 
-		dprintf(DEBUG_CFGPARSE, "rrset alt = %s", $3);
+		dprintf(DEBUG_CFGPARSE, "rrset name = %s", $3);
 		cn = malloc(sizeof(struct cfg_name));
 		if (cfg_zone == NULL)
 			cn->cn_name = $3;
@@ -358,6 +366,20 @@
 		dprintf(DEBUG_CFGPARSE, "res data = %s", $3);
 		csd = malloc(sizeof(struct cfg_resdata));
 		csd->csd_data = $3;
+		csd->csd_auto = 0;
+		TAILQ_INSERT_TAIL(&cfg_res->cs_data, csd, csd_next);
+	}
+	|
+	RES_RECORD EQ STRING SEMI {
+		struct cfg_resdata *csd;
+
+		if (!cfg_ifvalid && cfg_ifpassed)
+			break;
+
+		dprintf(DEBUG_CFGPARSE, "res record pointer = %s", $3);
+		csd = malloc(sizeof(struct cfg_resdata));
+		csd->csd_data = $3;
+		csd->csd_auto = 1;
 		TAILQ_INSERT_TAIL(&cfg_res->cs_data, csd, csd_next);
 	}
 	|

==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/token.l#2 (text+ko) ====

@@ -67,7 +67,7 @@
 }
 <TSTRING>.		{ yymore(); }
 
-<TRRSET>alt 	{ yy_push_state(LVAL); return RRSET_ALT; }
+<TRRSET>name 	{ yy_push_state(LVAL); return RRSET_NAME; }
 <TRRSET>ttl		{ yy_push_state(LVAL); return RRSET_TTL; }
 <TRRSET>shared	{ yy_push_state(LVAL); return RRSET_SHARED; }
 <TRRSET>[a-zA-Z0-9\_\$\(\)]+	{
@@ -77,6 +77,7 @@
 
 <TRES>data 	{ yy_push_state(LVAL); return RES_DATA; }
 <TRES>ttl 	{ yy_push_state(LVAL); return RES_TTL; }
+<TRES>record { yy_push_state(LVAL); return RES_RECORD; }
 <TRES>[a-zA-Z0-9\_]+	{
 	yy_push_state(LVAL); yylval.ptr = strdup(yytext);
 	return LVALUE;


More information about the p4-projects mailing list