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