From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7142 invoked by alias); 11 Aug 2008 11:26:48 -0000 Received: (qmail 7135 invoked by alias); 11 Aug 2008 11:26:48 -0000 X-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23,J_CHICKENPOX_63,J_CHICKENPOX_65,KAM_MX,SARE_SUB_PCT_LETTER,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on bastion.fedora.phx.redhat.com X-Spam-Level: Subject: master - libccs: add support for /child::*[%d]/ for xpathlite To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: a7e3cf012418c46cd3f55896512dbfd5e2d0a08c X-Git-Newrev: e46fc61639a46aacf68277182d8d7ef6a9f6790d From: "Fabio M. Di Nitto" Message-Id: <20080811112539.0913912002B@lists.fedorahosted.org> Date: Mon, 11 Aug 2008 13:56:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2008-q3/txt/msg00237.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=e46fc61639a46aacf68277182d8d7ef6a9f6790d Commit: e46fc61639a46aacf68277182d8d7ef6a9f6790d Parent: a7e3cf012418c46cd3f55896512dbfd5e2d0a08c Author: Fabio M. Di Nitto AuthorDate: Mon Aug 11 13:23:28 2008 +0200 Committer: Fabio M. Di Nitto CommitterDate: Mon Aug 11 13:23:28 2008 +0200 libccs: add support for /child::*[%d]/ for xpathlite xpathlite did not understand the concept of child::*[%d] within a path (ex: /cluster/rm/child::*[1]/@name). This operation is required by rgmanager to load the service tree. Signed-off-by: Fabio M. Di Nitto --- config/libs/libccsconfdb/libccs.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-) diff --git a/config/libs/libccsconfdb/libccs.c b/config/libs/libccsconfdb/libccs.c index 1dcca62..3abebd6 100644 --- a/config/libs/libccsconfdb/libccs.c +++ b/config/libs/libccsconfdb/libccs.c @@ -338,6 +338,8 @@ static int path_dive(int tokens) */ char *start = NULL, *middle = NULL, *end = NULL; + char data[PATH_MAX]; + int datalen; /* * those ones should be always good because @@ -356,7 +358,25 @@ static int path_dive(int tokens) memset(start, 0, 1); memset(end, 0, 1); - if (!strstr(middle, "@")) { + if (!strcmp(pos, "child::*")) { + int val, i; + + val = atoi(middle); + + if(val < 1) + goto fail; + + if(confdb_object_iter_start(handle, query_handle) != SA_AIS_OK) + goto fail; + + for (i = 1; i <= val; i++) { + if(confdb_object_iter(handle, query_handle, &new_obj_handle, data, &datalen) != SA_AIS_OK) + goto fail; + } + + query_handle = new_obj_handle; + + } else if (!strstr(middle, "@")) { /* lookup something with index num = int */ int val, i; @@ -374,8 +394,7 @@ static int path_dive(int tokens) } else { /* lookup something with obj foo = bar */ char *equal = NULL, *value = NULL, *tmp = NULL; - char data[PATH_MAX]; - int goout = 0, datalen; + int goout = 0; equal=strstr(middle, "="); if(!equal)