From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29089 invoked by alias); 15 Aug 2008 06:02:05 -0000 Received: (qmail 29080 invoked by alias); 15 Aug 2008 06:02:04 -0000 X-Spam-Status: No, hits=1.4 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_23,J_CHICKENPOX_63,J_CHICKENPOX_65,SARE_SUB_PCT_LETTER X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on hosted1.fedoraproject.org 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: 60132fc9c185be95a6cc480bd535412995a167a2 X-Git-Newrev: 72299320730ffb6fa7a0af4694ff152dc501d656 From: "Fabio M. Di Nitto" Message-Id: <20080815060108.21F5C12002B@lists.fedorahosted.org> Date: Fri, 15 Aug 2008 15:32:00 -0000 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/msg00271.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=72299320730ffb6fa7a0af4694ff152dc501d656 Commit: 72299320730ffb6fa7a0af4694ff152dc501d656 Parent: 60132fc9c185be95a6cc480bd535412995a167a2 Author: Fabio M. Di Nitto AuthorDate: Mon Aug 11 13:23:28 2008 +0200 Committer: Fabio M. Di Nitto CommitterDate: Fri Aug 15 08:00:44 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 7e7b2e2..d945db4 100644 --- a/config/libs/libccsconfdb/libccs.c +++ b/config/libs/libccsconfdb/libccs.c @@ -337,6 +337,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 @@ -355,7 +357,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; @@ -373,8 +393,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)