]> granicus.if.org Git - vnstat/commitdiff
fix drawbar() handling when there's no traffic, fix image size and alignment when...
authorTeemu Toivola <git@humdi.net>
Thu, 20 Sep 2018 18:22:45 +0000 (21:22 +0300)
committerTeemu Toivola <git@humdi.net>
Thu, 20 Sep 2018 18:22:45 +0000 (21:22 +0300)
src/dbshow.c
src/image.c
tests/database_tests.c

index 5e928c2ade6a64065aed987721d80fb2f96cb826..9fa49eeb8e28adaa837ac161499f50ab033f8cc6 100644 (file)
@@ -832,11 +832,11 @@ int showbar(const uint64_t rx, const uint64_t tx, const uint64_t max, const int
 
        if ( (rx + tx) < max) {
                width = (int)( ((rx + tx) / (float)max) * len );
-       } else if ((rx + tx) > max) {
+       } else if ((rx + tx) > max || max == 0) {
                return 0;
        }
 
-       if (len <= 0) {
+       if (width <= 0) {
                return 0;
        }
 
index 533c642221dd9e6e9be366c446c6d66860c9e24d..fb445277e69a1dec93a9971c77cd25a0d08a3d48 100644 (file)
@@ -188,30 +188,33 @@ void drawbar(IMAGECONTENT *ic, const int x, const int y, const int len, const ui
 {
        int l, width = len;
 
-       if ((rx+tx)!=max) {
+       if ((rx+tx) < max) {
                width=(int)(((rx+tx)/(float)max)*len);
+       } else if ((rx+tx) > max || max == 0) {
+               return;
        }
 
-       if (width!=0) {
+       if (width <= 0) {
+               return;
+       }
 
-               if (tx>rx) {
-                       l=(int)(rintf((rx/(float)(rx+tx)*width)));
+       if (tx > rx) {
+               l=(int)(rintf((rx/(float)(rx+tx)*width)));
 
-                       gdImageFilledRectangle(ic->im, x, y+YBEGINOFFSET, x+l, y+YENDOFFSET, ic->crx);
-                       gdImageRectangle(ic->im, x, y+YBEGINOFFSET, x+l, y+YENDOFFSET, ic->crxd);
+               gdImageFilledRectangle(ic->im, x, y+YBEGINOFFSET, x+l, y+YENDOFFSET, ic->crx);
+               gdImageRectangle(ic->im, x, y+YBEGINOFFSET, x+l, y+YENDOFFSET, ic->crxd);
 
-                       gdImageFilledRectangle(ic->im, x+l, y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctx);
-                       gdImageRectangle(ic->im, x+l, y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctxd);
+               gdImageFilledRectangle(ic->im, x+l, y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctx);
+               gdImageRectangle(ic->im, x+l, y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctxd);
 
-               } else {
-                       l=(int)(rintf((tx/(float)(rx+tx)*width)));
+       } else {
+               l=(int)(rintf((tx/(float)(rx+tx)*width)));
 
-                       gdImageFilledRectangle(ic->im, x, y+YBEGINOFFSET, x+(width-l), y+YENDOFFSET, ic->crx);
-                       gdImageRectangle(ic->im, x, y+YBEGINOFFSET, x+(width-l), y+YENDOFFSET, ic->crxd);
+               gdImageFilledRectangle(ic->im, x, y+YBEGINOFFSET, x+(width-l), y+YENDOFFSET, ic->crx);
+               gdImageRectangle(ic->im, x, y+YBEGINOFFSET, x+(width-l), y+YENDOFFSET, ic->crxd);
 
-                       gdImageFilledRectangle(ic->im, x+(width-l), y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctx);
-                       gdImageRectangle(ic->im, x+(width-l), y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctxd);
-               }
+               gdImageFilledRectangle(ic->im, x+(width-l), y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctx);
+               gdImageRectangle(ic->im, x+(width-l), y+YBEGINOFFSET, x+width, y+YENDOFFSET, ic->ctxd);
        }
 }
 
@@ -534,6 +537,11 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
        }
        height += 12 * rowcount;
 
+       if (!datainfo.count) {
+               height = 98;
+               offsety = -24;
+       }
+
        if (!ic->showheader) {
                headermod = 26;
                height -= 22;
@@ -575,7 +583,7 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
        } else { // everything else
                snprintf(buffer, 512, " %8s       rx           tx          total", colname);
        }
-       if (cfg.ostyle>2) {
+       if (cfg.ostyle > 2) {
                strcat(buffer, "       avg. rate");
                gdImageString(ic->im, gdFontGetSmall(), textx, texty, (unsigned char*)buffer, ic->ctext);
                gdImageLine(ic->im, textx+2, texty+16, textx+392+offsetx, texty+16, ic->cline);
@@ -677,11 +685,15 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
        }
 
        if (!datainfo.count) {
-               gdImageString(ic->im, gdFontGetSmall(), textx, texty, (unsigned char*)"                 no data available", ic->ctext);
+               i = 102;
+               if (cfg.ostyle > 2) {
+                       i += 46;
+               }
+               gdImageString(ic->im, gdFontGetSmall(), textx+i, texty, (unsigned char*)"no data available", ic->ctext);
                texty += 12;
        }
 
-       if (cfg.ostyle>2) {
+       if (cfg.ostyle > 2) {
                gdImageLine(ic->im, textx+2, texty+5, textx+392+offsetx, texty+5, ic->cline);
        } else {
                gdImageLine(ic->im, textx+2, texty+5, textx+296+offsetx, texty+5, ic->cline);
index f82695e766b012db08fe0755ae33b996fe1370ec..e54aa62d9241c29eaf6d69ebd470396fd3a1ac32 100644 (file)
@@ -329,6 +329,15 @@ START_TEST(showbar_with_zero_len_is_nothing)
 }
 END_TEST
 
+START_TEST(showbar_with_zero_max)
+{
+       int len;
+       suppress_output();
+       len = showbar(0, 0, 0, 10);
+       ck_assert_int_eq(len, 0);
+}
+END_TEST
+
 START_TEST(showbar_with_big_max_and_small_numbers)
 {
        int len;
@@ -659,6 +668,7 @@ void add_database_tests(Suite *s)
        tcase_add_test(tc_db, database_outputs_do_not_crash);
        tcase_add_test(tc_db, database_outputs_do_not_crash_without_data);
        tcase_add_test(tc_db, showbar_with_zero_len_is_nothing);
+       tcase_add_test(tc_db, showbar_with_zero_max);
        tcase_add_test(tc_db, showbar_with_big_max_and_small_numbers);
        tcase_add_test(tc_db, showbar_with_all_rx);
        tcase_add_test(tc_db, showbar_with_all_tx);