From owner-p4-projects@FreeBSD.ORG Mon Jul 16 01:18:07 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CC95916A405; Mon, 16 Jul 2007 01:18:06 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8586516A400 for ; Mon, 16 Jul 2007 01:18:06 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 69FA913C471 for ; Mon, 16 Jul 2007 01:18:06 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l6G1I6Q6089878 for ; Mon, 16 Jul 2007 01:18:06 GMT (envelope-from fli@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6G1I6Ac089875 for perforce@freebsd.org; Mon, 16 Jul 2007 01:18:06 GMT (envelope-from fli@FreeBSD.org) Date: Mon, 16 Jul 2007 01:18:06 GMT Message-Id: <200707160118.l6G1I6Ac089875@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to fli@FreeBSD.org using -f From: Fredrik Lindberg To: Perforce Change Reviews Cc: Subject: PERFORCE change 123569 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Jul 2007 01:18:07 -0000 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 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 @@ } . { yymore(); } -alt { yy_push_state(LVAL); return RRSET_ALT; } +name { yy_push_state(LVAL); return RRSET_NAME; } ttl { yy_push_state(LVAL); return RRSET_TTL; } shared { yy_push_state(LVAL); return RRSET_SHARED; } [a-zA-Z0-9\_\$\(\)]+ { @@ -77,6 +77,7 @@ data { yy_push_state(LVAL); return RES_DATA; } ttl { yy_push_state(LVAL); return RES_TTL; } +record { yy_push_state(LVAL); return RES_RECORD; } [a-zA-Z0-9\_]+ { yy_push_state(LVAL); yylval.ptr = strdup(yytext); return LVALUE;