Hi, I uploaded an NMU of your package.
Please see this as help to get the package into a releaseable condition for etch. Please find the used diff below. Cheers, Andi diff -ur rrdtool-1.2.15~/debian/changelog rrdtool-1.2.15/debian/changelog --- rrdtool-1.2.15~/debian/changelog 2006-12-14 18:27:14.000000000 +0000 +++ rrdtool-1.2.15/debian/changelog 2006-12-14 18:26:40.000000000 +0000 @@ -1,3 +1,11 @@ +rrdtool (1.2.15-0.3) unstable; urgency=high + + * Non-maintainer upload. + * Fix high memory consumption by extracting r881 und r887 from upstream. + Closes: #397691, #398111 + + -- Andreas Barth <[EMAIL PROTECTED]> Thu, 14 Dec 2006 18:25:02 +0000 + rrdtool (1.2.15-0.2) unstable; urgency=low * Non-maintainer upload. diff -ur rrdtool-1.2.15~/src/rrd_graph.c rrdtool-1.2.15/src/rrd_graph.c --- rrdtool-1.2.15~/src/rrd_graph.c 2006-07-14 12:11:26.000000000 +0000 +++ rrdtool-1.2.15/src/rrd_graph.c 2006-12-14 18:24:58.000000000 +0000 @@ -1060,8 +1060,9 @@ ** relevant for min and max */ if (finite(paintval) && im->gdes[ii].gf != GF_TICK ) { - if (isnan(minval) || paintval < minval) - minval = paintval; + if ((isnan(minval) || paintval < minval ) && + ! (im->logarithmic && paintval <= 0.0)) + minval = paintval; if (isnan(maxval) || paintval > maxval) maxval = paintval; } @@ -1710,6 +1711,35 @@ return mnt; } +static int AlmostEqual2sComplement (float A, float B, int maxUlps) +{ + + int aInt = *(int*)&A; + int bInt = *(int*)&B; + int intDiff; + /* Make sure maxUlps is non-negative and small enough that the + default NAN won't compare as equal to anything. */ + + /* assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024); */ + + /* Make aInt lexicographically ordered as a twos-complement int */ + + if (aInt < 0) + aInt = 0x80000000l - aInt; + + /* Make bInt lexicographically ordered as a twos-complement int */ + + if (bInt < 0) + bInt = 0x80000000l - bInt; + + intDiff = abs(aInt - bInt); + + if (intDiff <= maxUlps) + return 1; + + return 0; +} + /* logaritmic horizontal grid */ int horizontal_log_grid(image_desc_t *im) @@ -1719,7 +1749,8 @@ {1.0, 5.0, 10., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {1.0, 2.0, 5.0, 7.0, 10., 0.0, 0.0, 0.0, 0.0, 0.0}, {1.0, 2.0, 4.0, 6.0, 8.0, 10., 0.0, 0.0, 0.0, 0.0}, - {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.}}; + {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.}, + {0,0,0,0,0, 0,0,0,0,0} /* last line */ }; int i, j, val_exp, min_exp; double nex; /* number of decades in data */ @@ -1728,7 +1759,7 @@ int mid = -1; /* row in yloglab for major grid */ double mspac; /* smallest major grid spacing (pixels) */ int flab; /* first value in yloglab to use */ - double value, tmp; + double value, tmp, pre_value; double X0,X1,Y0; char graph_label[100]; @@ -1747,11 +1778,11 @@ mid++; for(i = 0; yloglab[mid][i + 1] < 10.0; i++); mspac = logscale * log10(10.0 / yloglab[mid][i]); - } while(mspac > 2 * im->text_prop[TEXT_PROP_LEGEND].size && mid < 5); + } while(mspac > 2 * im->text_prop[TEXT_PROP_LEGEND].size && yloglab[mid][0] > 0); if(mid) mid--; /* find first value in yloglab */ - for(flab = 0; frexp10(im->minval, &tmp) > yloglab[mid][flab]; flab++); + for(flab = 0; yloglab[mid][flab] < 10 && frexp10(im->minval, &tmp) > yloglab[mid][flab] ; flab++); if(yloglab[mid][flab] == 10.0) { tmp += 1.0; flab = 0; @@ -1763,8 +1794,13 @@ X1=im->xorigin+im->xsize; /* draw grid */ - while(1) { + pre_value = DNAN; + while(1) { + value = yloglab[mid][flab] * pow(10.0, val_exp); + if ( AlmostEqual2sComplement(value,pre_value,4) ) break; /* it seems we are not converging */ + + pre_value = value; Y0 = ytr(im, value); if(Y0 <= im->yorigin - im->ysize) break; @@ -2484,34 +2520,6 @@ /* yes we are loosing precision by doing tos with floats instead of doubles but it seems more stable this way. */ -static int AlmostEqual2sComplement (float A, float B, int maxUlps) -{ - - int aInt = *(int*)&A; - int bInt = *(int*)&B; - int intDiff; - /* Make sure maxUlps is non-negative and small enough that the - default NAN won't compare as equal to anything. */ - - /* assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024); */ - - /* Make aInt lexicographically ordered as a twos-complement int */ - - if (aInt < 0) - aInt = 0x80000000l - aInt; - - /* Make bInt lexicographically ordered as a twos-complement int */ - - if (bInt < 0) - bInt = 0x80000000l - bInt; - - intDiff = abs(aInt - bInt); - - if (intDiff <= maxUlps) - return 1; - - return 0; -} /* draw that picture thing ... */ int -- http://home.arcor.de/andreas-barth/ -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]