From 9b19f9f39e850cb61bd61ae144c1e0540b8ffa5f Mon Sep 17 00:00:00 2001 From: phk Date: Thu, 21 Jul 2005 08:32:56 +0000 Subject: [PATCH] In 2003, a -s flag was added to ministat to separate the avg/median/stddev bars onto separate lines for readability if the ranges overlapped. In 2005, ministat was extended to support more than 2 datasets, but the -s code was not updated. It will coredump if run with -s and >2 sets. PR: 82909 Submitted by: Dan Nelson --- tools/tools/ministat/Makefile | 1 + tools/tools/ministat/ministat.c | 12 +++++++----- usr.bin/ministat/Makefile | 1 + usr.bin/ministat/ministat.c | 12 +++++++----- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/tools/ministat/Makefile b/tools/tools/ministat/Makefile index 62de6a018f10..d1a10a3201ee 100644 --- a/tools/tools/ministat/Makefile +++ b/tools/tools/ministat/Makefile @@ -12,3 +12,4 @@ test: ${PROG} ./${PROG} ${.CURDIR}/chameleon ${.CURDIR}/iguana ./${PROG} -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana ./${PROG} -s -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana + ./${PROG} -s -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana ${.CURDIR}/iguana diff --git a/tools/tools/ministat/ministat.c b/tools/tools/ministat/ministat.c index 4bce24fde6a8..cbada0152ac0 100644 --- a/tools/tools/ministat/ministat.c +++ b/tools/tools/ministat/ministat.c @@ -283,12 +283,13 @@ struct plot { char *data; char **bar; int separate_bars; + int num_datasets; }; static struct plot plot; static void -SetupPlot(int width, int separate) +SetupPlot(int width, int separate, int num_datasets) { struct plot *pl; @@ -298,6 +299,7 @@ SetupPlot(int width, int separate) pl->data = NULL; pl->bar = NULL; pl->separate_bars = separate; + pl->num_datasets = num_datasets; pl->min = 999e99; pl->max = -999e99; } @@ -344,8 +346,8 @@ PlotSet(struct dataset *ds, int val) bar = 0; if (pl->bar == NULL) { - pl->bar = malloc(sizeof(char *) * 2); - memset(pl->bar, 0, sizeof(char*) * 2); + pl->bar = malloc(sizeof(char *) * pl->num_datasets); + memset(pl->bar, 0, sizeof(char*) * pl->num_datasets); } if (pl->bar[bar] == NULL) { pl->bar[bar] = malloc(pl->width); @@ -426,7 +428,7 @@ DumpPlot(void) putchar('|'); putchar('\n'); } - for (i = 0; i < 2; i++) { + for (i = 0; i < pl->num_datasets; i++) { if (pl->bar[i] == NULL) continue; putchar('|'); @@ -568,7 +570,7 @@ main(int argc, char **argv) } if (!flag_n) { - SetupPlot(74, flag_s); + SetupPlot(74, flag_s, nds); for (i = 0; i < nds; i++) DimPlot(ds[i]); for (i = 0; i < nds; i++) diff --git a/usr.bin/ministat/Makefile b/usr.bin/ministat/Makefile index 62de6a018f10..d1a10a3201ee 100644 --- a/usr.bin/ministat/Makefile +++ b/usr.bin/ministat/Makefile @@ -12,3 +12,4 @@ test: ${PROG} ./${PROG} ${.CURDIR}/chameleon ${.CURDIR}/iguana ./${PROG} -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana ./${PROG} -s -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana + ./${PROG} -s -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana ${.CURDIR}/iguana diff --git a/usr.bin/ministat/ministat.c b/usr.bin/ministat/ministat.c index 4bce24fde6a8..cbada0152ac0 100644 --- a/usr.bin/ministat/ministat.c +++ b/usr.bin/ministat/ministat.c @@ -283,12 +283,13 @@ struct plot { char *data; char **bar; int separate_bars; + int num_datasets; }; static struct plot plot; static void -SetupPlot(int width, int separate) +SetupPlot(int width, int separate, int num_datasets) { struct plot *pl; @@ -298,6 +299,7 @@ SetupPlot(int width, int separate) pl->data = NULL; pl->bar = NULL; pl->separate_bars = separate; + pl->num_datasets = num_datasets; pl->min = 999e99; pl->max = -999e99; } @@ -344,8 +346,8 @@ PlotSet(struct dataset *ds, int val) bar = 0; if (pl->bar == NULL) { - pl->bar = malloc(sizeof(char *) * 2); - memset(pl->bar, 0, sizeof(char*) * 2); + pl->bar = malloc(sizeof(char *) * pl->num_datasets); + memset(pl->bar, 0, sizeof(char*) * pl->num_datasets); } if (pl->bar[bar] == NULL) { pl->bar[bar] = malloc(pl->width); @@ -426,7 +428,7 @@ DumpPlot(void) putchar('|'); putchar('\n'); } - for (i = 0; i < 2; i++) { + for (i = 0; i < pl->num_datasets; i++) { if (pl->bar[i] == NULL) continue; putchar('|'); @@ -568,7 +570,7 @@ main(int argc, char **argv) } if (!flag_n) { - SetupPlot(74, flag_s); + SetupPlot(74, flag_s, nds); for (i = 0; i < nds; i++) DimPlot(ds[i]); for (i = 0; i < nds; i++)