bin/82909: [PATCH] fix ministat -s with >2 datasets
Dan Nelson
dnelson at allantgroup.com
Sun Jul 3 00:48:55 GMT 2005
>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 at 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:
More information about the freebsd-bugs
mailing list