summaryrefslogtreecommitdiff
path: root/server/server.c
diff options
context:
space:
mode:
authorGravatar John Kohl <jtkohl@mit.edu>1987-07-24 11:15:05 +0000
committerGravatar John Kohl <jtkohl@mit.edu>1987-07-24 11:15:05 +0000
commit727521f915b1ef9e62bee02cfb100f49c834e6e9 (patch)
tree787dcd72c07dd49c28f6deb87b2a7ab09d819297 /server/server.c
parent71992230f2a6a88d1338c64c7ecfc714da04d2b7 (diff)
clean up server stats
Diffstat (limited to 'server/server.c')
-rw-r--r--server/server.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/server/server.c b/server/server.c
index be2d312..0616e24 100644
--- a/server/server.c
+++ b/server/server.c
@@ -687,39 +687,47 @@ send_stats(who)
struct sockaddr_in *who;
{
register int i;
- char scratch[32];
- char *newline = "\n";
char buf[BUFSIZ];
- char *responses[1];
+ char **responses;
+ int num_resp;
+ char *vers, *pkts, *upt;
+#define NUM_FIXED 3 /* 3 fixed fields, plus server info */
(void) strcpy(buf,version);
(void) strcat(buf, "/");
#ifdef vax
- (void) strcat(buf, "VAX\n");
+ (void) strcat(buf, "VAX");
#endif vax
#ifdef ibm032
- (void) strcat(buf, "IBM 032\n");
+ (void) strcat(buf, "IBM 032");
#endif ibm032
#ifdef sun
- (void) strcat(buf, "SUN\n");
+ (void) strcat(buf, "SUN");
#endif sun
+ vers = strsave(buf);
- (void) sprintf(scratch, "%d pkts\n", npackets);
- (void) strcat(buf, scratch);
- (void) sprintf(scratch, "up %d seconds\n",NOW - uptime);
- (void) strcat(buf, scratch);
+ (void) sprintf(buf, "%d pkts", npackets);
+ pkts = strsave(buf);
+ (void) sprintf(buf, "%d seconds operational",NOW - uptime);
+ upt = strsave(buf);
- (void) strcat(buf, "server states:\n");
-
+ responses = (char **) xmalloc((NUM_FIXED + nservers)*sizeof(char **));
+ responses[0] = vers;
+ responses[1] = pkts;
+ responses[2] = upt;
+
+ num_resp = NUM_FIXED;
for (i = 0; i < nservers ; i++) {
- (void) strcat(buf, inet_ntoa(otherservers[i].zs_addr.sin_addr));
- (void) strcat(buf, "/");
- (void) strcat(buf, srv_states[(int) otherservers[i].zs_state]);
- (void) strcat(buf, newline);
+ (void) sprintf(buf, "%s/%s",
+ inet_ntoa(otherservers[i].zs_addr.sin_addr),
+ srv_states[(int) otherservers[i].zs_state]);
+ responses[num_resp++] = strsave(buf);
}
- responses[0] = buf;
- send_msg_list(who, ADMIN_STATUS, responses, 1, 0);
+ send_msg_list(who, ADMIN_STATUS, responses, num_resp, 0);
+ for (i = 0; i < num_resp; i++)
+ xfree(responses[i]);
+ xfree(responses);
return;
}
/*