diff --git a/src/browser.c b/src/browser.c index 24857dac7708645a7423acd0e5af3e00c8dbf4ac..a5a5a8c079eeca3ceaf5a9aa074d8a467e9f45e6 100644 --- a/src/browser.c +++ b/src/browser.c @@ -90,8 +90,8 @@ void browse_draw_info(struct dir *dr) { } -void browse_draw_item(struct dir *n, int row) { - char *line, ct, dt, *size, gr[11]; +void browse_draw_item(struct dir *n, int row, char *line) { + char ct, dt, *size, gr[11]; int i, o; float pc; @@ -141,25 +141,12 @@ void browse_draw_item(struct dir *n, int row) { } /* format and add item to the list */ - line = malloc(wincols > 35 ? wincols+1 : 36); switch(graph) { - case 0: - sprintf(line, "%%c %%8s %%c%%-%ds", wincols-13); - mvprintw(row, 0, line, ct, size, dt, cropstr(n->name, wincols-13)); - break; - case 1: - sprintf(line, "%%c %%8s [%%10s] %%c%%-%ds", wincols-25); - mvprintw(row, 0, line, ct, size, gr, dt, cropstr(n->name, wincols-25)); - break; - case 2: - sprintf(line, "%%c %%8s [%%5.1f%%%%] %%c%%-%ds", wincols-21); - mvprintw(row, 0, line, ct, size, pc, dt, cropstr(n->name, wincols-21)); - break; - case 3: - sprintf(line, "%%c %%8s [%%5.1f%%%% %%10s] %%c%%-%ds", wincols-32); - mvprintw(row, 0, line, ct, size, pc, gr, dt, cropstr(n->name, wincols-32)); + case 0: mvprintw(row, 0, line, ct, size, dt, cropstr(n->name, wincols-13)); break; + case 1: mvprintw(row, 0, line, ct, size, gr, dt, cropstr(n->name, wincols-25)); break; + case 2: mvprintw(row, 0, line, ct, size, pc, dt, cropstr(n->name, wincols-21)); break; + case 3: mvprintw(row, 0, line, ct, size, pc, gr, dt, cropstr(n->name, wincols-32)); } - free(line); if(n->flags & FF_BSEL) attroff(A_REVERSE); @@ -168,7 +155,7 @@ void browse_draw_item(struct dir *n, int row) { void browse_draw() { struct dir *t; - char fmtsize[9], *tmp; + char fmtsize[9], *tmp, line[35]; int selected, i; erase(); @@ -207,9 +194,17 @@ void browse_draw() { /* get start position */ t = dirlist_top(0); + /* create line format */ + switch(graph) { + case 0: sprintf(line, "%%c %%8s %%c%%-%ds", wincols-13); break; + case 1: sprintf(line, "%%c %%8s [%%10s] %%c%%-%ds", wincols-25); break; + case 2: sprintf(line, "%%c %%8s [%%5.1f%%%%] %%c%%-%ds", wincols-21); break; + case 3: sprintf(line, "%%c %%8s [%%5.1f%%%% %%10s] %%c%%-%ds", wincols-32); + } + /* print the list to the screen */ for(i=0; t && i<winrows-3; t=dirlist_next(t),i++) { - browse_draw_item(t, 2+i); + browse_draw_item(t, 2+i, line); /* save the selected row number for later */ if(t->flags & FF_BSEL) selected = i;