Hunk #1: parse properly options on archs where char is unsigned by default (arm, ppc) Index: xstatbar.c --- xstatbar.c.orig +++ xstatbar.c @@ -51,7 +51,7 @@ main (int argc, char *argv[]) { const char *errstr; char *font; - char ch; + int ch; int x, y, w, h; int sleep_seconds; @@ -297,9 +297,10 @@ draw_divider(XColor color, int x, int width) void draw() { + XEvent dummy; static int spacing = 10; int x, y; - int cpu; + int cpu, firstcpu = 1; /* paint over the existing pixmap */ XSetForeground(XINFO.disp, XINFO.gc, BlackPixel(XINFO.disp, XINFO.screen)); @@ -311,9 +312,15 @@ draw() x = 0; /* start drawing stats */ - for (cpu = 0; cpu < sysinfo.ncpu; cpu++) - x += cpu_draw(cpu, COLOR_WHITE, x, y) + spacing; + for (cpu = 0; cpu < sysinfo.ncpu; cpu++) { + /* SMT CPU is offline (hw.smt=0) */ + if(!sysinfo.cpu_online[cpu]) + continue; + x += cpu_draw(cpu, COLOR_WHITE, x, y, firstcpu) + spacing; + firstcpu = 0; + } + x += mem_draw(COLOR_WHITE, x, y) + spacing; x += procs_draw(COLOR_WHITE, x, y) + spacing; x += power_draw(COLOR_WHITE, x, y) + spacing; @@ -323,6 +330,7 @@ draw() /* copy the buffer to the window and flush */ XCopyArea(XINFO.disp, XINFO.buf, XINFO.win, XINFO.gc, 0, 0, XINFO.width, XINFO.height, 0, 0); + XNextEvent(XINFO.disp, &dummy); XFlush(XINFO.disp); }