PERFORCE change 125232 for review
Fredrik Lindberg
fli at FreeBSD.org
Thu Aug 16 12:39:57 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125232
Change 125232 by fli at fli_nexus on 2007/08/16 19:39:02
- Pass shared-flag to dbr_ident_add() on shared resources.
- Free memory allocated during parse.
Affected files ...
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/parse.y#4 edit
Differences ...
==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/parse.y#4 (text+ko) ====
@@ -220,10 +220,10 @@
cfg_rrset.cr_ident = $2;
}
rrset_content EBRACE {
- struct cfg_name *cn;
- struct cfg_res *cs;
- struct cfg_resdata *csd;
- int ttl;
+ struct cfg_name *cn, *cn2;
+ struct cfg_res *cs, *cs2;
+ struct cfg_resdata *csd, *csd2;
+ int flags, ttl;
wchar_t *nam, *wp;
size_t len;
@@ -240,23 +240,30 @@
cfg_rrset.cr_ident, (cfg_rrset.cr_shared ?
" (shared)" : ""), cfg_rrset.cr_namcount);
- dbr_ident_add(dbr, cfg_rrset.cr_ident);
- TAILQ_FOREACH(cn, &cfg_rrset.cr_names, cn_next) {
+ flags = 0;
+ if (cfg_rrset.cr_shared)
+ flags |= DBI_SHARED;
+
+ dbr_ident_add(dbr, cfg_rrset.cr_ident, flags);
+ TAILQ_FOREACH_SAFE(cn, &cfg_rrset.cr_names, cn_next, cn2) {
dprintf(DEBUG_CFGPARSE, " %s", cn->cn_name);
len = strlen(cn->cn_name) + 1;
nam = malloc(len * sizeof(wchar_t));
mbstowcs(nam, cn->cn_name, len);
dbr_name_add(dbr, cfg_rrset.cr_ident, nam);
free(nam);
+
+ TAILQ_REMOVE(&cfg_rrset.cr_names, cn, cn_next);
+ free(cn);
}
dprintf(DEBUG_CFGPARSE, "rrset resources");
- TAILQ_FOREACH(cs, &cfg_rrset.cr_res, cs_next) {
+ TAILQ_FOREACH_SAFE(cs, &cfg_rrset.cr_res, cs_next, cs2) {
dprintf(DEBUG_CFGPARSE, " type %d", cs->cs_type);
ttl = cs->cs_ttl > 0 ? cs->cs_ttl :
(cfg_rrset.cr_ttl > 0 ? cfg_rrset.cr_ttl :
(cfg_rrset.cr_shared ? cfg_ttl_shared : cfg_ttl));
- TAILQ_FOREACH(csd, &cs->cs_data, csd_next) {
+ TAILQ_FOREACH_SAFE(csd, &cs->cs_data, csd_next, csd2) {
dprintf(DEBUG_CFGPARSE, " data = %s, ttl = %d",
csd->csd_data, ttl);
@@ -272,10 +279,19 @@
dbr_res_add(dbr, cfg_rrset.cr_ident,
mdns_c_in, cs->cs_type, ttl,
wp, 0);
+
+ free(wp);
}
+ TAILQ_REMOVE(&cs->cs_data, csd, csd_next);
+ free(csd);
}
+
+ TAILQ_REMOVE(&cfg_rrset.cr_res, cs, cs_next);
+ free(cs);
}
+ free(cfg_rrset.cr_ident);
+
dprintf(DEBUG_CFGPARSE, "end of rrset statement");
}
;
More information about the p4-projects
mailing list