From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 20 Oct 2006 20:57:19 -0000 Subject: [Cluster-devel] cluster/rgmanager/src/daemons resrules.c Message-ID: <20061020205719.7994.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh at sourceware.org 2006-10-20 20:57:19 Modified files: rgmanager/src/daemons: resrules.c Log message: Correct incorrectly applied patch to fix compatibility issue Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/resrules.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.3&r2=1.9.2.4 --- cluster/rgmanager/src/daemons/resrules.c 2006/10/20 20:29:39 1.9.2.3 +++ cluster/rgmanager/src/daemons/resrules.c 2006/10/20 20:57:19 1.9.2.4 @@ -19,10 +19,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -53,6 +53,12 @@ newrule->rr_type); return -1; } + if (newrule->rr_root && curr->rr_root) { + fprintf(stderr, "Error storing %s: root " + "resource type %s exists already\n", + newrule->rr_type, curr->rr_type); + return -1; + } } while (!list_done(rulelist, curr)); @@ -180,6 +186,30 @@ } +/** + Get and store the root attribute. + + @param doc Pre-parsed XML document pointer. + @param ctx Pre-allocated XML XPath context pointer. + @param base XPath prefix to search + @param rr Resource rule to store new information in. + */ +void +_get_root(xmlDocPtr doc, xmlXPathContextPtr ctx, char *base, + resource_rule_t *rr) +{ + char xpath[256]; + char *ret = NULL; + + snprintf(xpath, sizeof(xpath), "%s/attributes/@root", base); + ret = xpath_get_one(doc, ctx, xpath); + if (ret) { + rr->rr_root = 1; + free(ret); + } +} + + int expand_time(char *val) { @@ -326,6 +356,8 @@ free(act); } while (1); + + } @@ -497,7 +529,10 @@ { int x; - printf("Resource Rules for \"%s\"\n", rr->rr_type); + printf("Resource Rules for \"%s\"", rr->rr_type); + if (rr->rr_root) + printf(" [ROOT]"); + printf("\n"); if (rr->rr_version) printf("OCF API Version: %s\n", rr->rr_version); @@ -928,11 +963,12 @@ snprintf(base, sizeof(base), "/resource-agent[%d]/special[@tag=\"rgmanager\"]", ruleid); + _get_root(doc, ctx, base, rr); _get_maxparents(doc, ctx, base, rr); rr->rr_agent = strdup(filename); /* - Second, add the children fields + Second, add the allowable-children fields */ _get_childtypes(doc, ctx, base, rr);