Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > e536fc0c6270ec1d92a0fd41bb1f8360 > files > 11

rgmanager-2.0.52-28.el5_8.2.src.rpm

From bb374dab9bbb30fd3180810ccac43db7ba8d8001 Mon Sep 17 00:00:00 2001
From: Lon Hohberger <lhh@redhat.com>
Date: Tue, 22 Sep 2009 17:36:37 -0400
Subject: [PATCH] rgmanager: Fix -m and -s output when fed bad data

Resolves: rhbz#506346

Signed-off-by: Lon Hohberger <lhh@redhat.com>
---
 rgmanager/src/utils/clustat.c |   73 +++++++++++++++++++++++++++++------------
 1 files changed, 52 insertions(+), 21 deletions(-)

diff --git a/rgmanager/src/utils/clustat.c b/rgmanager/src/utils/clustat.c
index f1d1756..4b9ebc9 100644
--- a/rgmanager/src/utils/clustat.c
+++ b/rgmanager/src/utils/clustat.c
@@ -593,6 +593,20 @@ build_service_field_sizes(int cols, int *svcsize, int *nodesize, int *statsize)
 }
 
 
+void
+print_svc_header(int svcsize, int nodesize, int statsize)
+{
+	printf(" %-*.*s %-*.*s %-*.*s\n",
+	       svcsize, svcsize, "Service Name",
+	       nodesize, nodesize, "Owner (Last)",
+       	       statsize, statsize, "State");
+	printf(" %-*.*s %-*.*s %-*.*s\n",
+	       svcsize, svcsize, "------- ----",
+	       nodesize, nodesize, "----- ------",
+	       statsize, statsize, "-----");
+}
+
+
 int
 txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members, 
 	      char *svcname, int flags)
@@ -608,24 +622,20 @@ txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
 	build_service_field_sizes(dimx, &svcsize, &nodesize, &statsize);
 
 	if (!(flags & RG_VERBOSE)) {
-
-		printf(" %-*.*s %-*.*s %-*.*s\n",
-		       svcsize, svcsize, "Service Name",
-		       nodesize, nodesize, "Owner (Last)",
-	       	       statsize, statsize, "State");
-		printf(" %-*.*s %-*.*s %-*.*s\n",
-		       svcsize, svcsize, "------- ----",
-		       nodesize, nodesize, "----- ------",
-		       statsize, statsize, "-----");
+		if (!svcname)
+			print_svc_header(svcsize, nodesize, statsize);
 	} else {
 		printf("Service Information\n"
 		       "------- -----------\n\n");
 	}
 
 	for (x = 0; x < rgl->rgl_count; x++) {
-		if (svcname &&
-		    strcmp(rgl->rgl_states[x].rs_name, svcname))
-			continue;
+		if (svcname) {
+			if (strcmp(rgl->rgl_states[x].rs_name, svcname)) {
+				continue;
+			}
+			print_svc_header(svcsize, nodesize, statsize);
+		}
 		txt_rg_state(&rgl->rgl_states[x], members, flags,
 			     svcsize, nodesize, statsize);
 		if (svcname) {
@@ -794,10 +804,20 @@ xml_member_state(cman_node_t *node)
 }
 
 
+void
+print_member_header(nodesize)
+{
+	printf(" %-*.*s", nodesize, nodesize, "Member Name");
+	printf("%-4.4s %s\n", "ID", "Status");
+	printf(" %-*.*s", nodesize, nodesize, "------ ----");
+	printf("%-4.4s %s\n", "----", "------");
+}
+
+
 int
 txt_member_states(cluster_member_list_t *membership, char *name)
 {
-	int x, ret = 0, nodesize;
+	int x, ret = -1, nodesize;
 
   	if (!membership) {
   		printf("Membership information not available\n");
@@ -806,19 +826,30 @@ txt_member_states(cluster_member_list_t *membership, char *name)
 
 	build_member_field_size(dimx, &nodesize);
 
-	printf(" %-*.*s", nodesize, nodesize, "Member Name");
-	printf("%-4.4s %s\n", "ID", "Status");
-	printf(" %-*.*s", nodesize, nodesize, "------ ----");
-	printf("%-4.4s %s\n", "----", "------");
+	if (!name) {
+		printf(" %-*.*s", nodesize, nodesize, "Member Name");
+		printf("%-4.4s %s\n", "ID", "Status");
+		printf(" %-*.*s", nodesize, nodesize, "------ ----");
+		printf("%-4.4s %s\n", "----", "------");
+		ret = 0;
+	}
 
 	for (x = 0; x < membership->cml_count; x++) {
-		if (name && strcmp(membership->cml_members[x].cn_name, name))
-			continue;
+		if (name) {
+		        if (strcmp(membership->cml_members[x].cn_name, name)) {
+				continue;
+			}
+			print_member_header(nodesize);
+		}
 		txt_member_state(&membership->cml_members[x], nodesize);
- 		ret = !(membership->cml_members[x].cn_member & FLAG_UP);
+		if (name) {
+ 			ret = !(membership->cml_members[x].cn_member & FLAG_UP);
+			return ret;
+		}
 	}
 
-	printf("\n");
+	if (!name)
+		printf("\n");
 	return ret;
 }
 
-- 
1.6.2.5