Date: Mon, 16 Jul 2007 01:18:06 GMT From: Fredrik Lindberg <fli@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 123569 for review Message-ID: <200707160118.l6G1I6Ac089875@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=123569 Change 123569 by fli@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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707160118.l6G1I6Ac089875>