Date: Sat, 2 Jul 2005 19:16:16 -0500 (CDT) From: Dan Nelson <dnelson@allantgroup.com> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/82909: [PATCH] fix ministat -s with >2 datasets Message-ID: <200507030016.j630GGE5088630@dan.emsphone.com> Resent-Message-ID: <200507030030.j630UwX6015191@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 82909 >Category: bin >Synopsis: [PATCH] fix ministat -s with >2 datasets >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Jul 03 00:30:58 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Dan Nelson >Release: FreeBSD 5.4-STABLE i386 >Organization: The Allant Group >Environment: System: FreeBSD dan.emsphone.com 5.4-STABLE FreeBSD 5.4-STABLE #411: Fri Jun 10 10:55:56 CDT 2005 zsh@dan.emsphone.com:/usr/src/sys/i386/compile/DANSMP i386 >Description: 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. >How-To-Repeat: >Fix: Allocate the correct amount of memory to store all the bars in memory. ( newer version may be at http://dan.allantgroup.com/FreeBSD/ministat.diff ) Index: ministat.c =================================================================== RCS file: /home/ncvs/src/tools/tools/ministat/ministat.c,v retrieving revision 1.5 diff -u -p -r1.5 ministat.c --- ministat.c 27 May 2005 17:52:56 -0000 1.5 +++ ministat.c 30 Jun 2005 15:20:51 -0000 @@ -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++) >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200507030016.j630GGE5088630>