fast but inexact
f5bd1eed
1 file(s) · +7 −4
| 444 | 444 | ||
| 445 | 445 | void |
|
| 446 | 446 | readstdin(void) { |
|
| 447 | - | char buf[sizeof text], *p; |
|
| 448 | - | size_t i, size = 0; |
|
| 447 | + | char buf[sizeof text], *p, *maxstr = NULL; |
|
| 448 | + | size_t i, max = 0, size = 0; |
|
| 449 | 449 | ||
| 450 | 450 | for(i = 0; fgets(buf, sizeof buf, stdin); items[++i].text = NULL) { |
|
| 451 | - | if(i+1 == size / sizeof *items || !items) |
|
| 451 | + | if(i+1 >= size / sizeof *items) |
|
| 452 | 452 | if(!(items = realloc(items, (size += BUFSIZ)))) |
|
| 453 | 453 | eprintf("cannot realloc %u bytes:", size); |
|
| 454 | 454 | if((p = strchr(buf, '\n'))) |
|
| 455 | 455 | *p = '\0'; |
|
| 456 | 456 | if(!(items[i].text = strdup(buf))) |
|
| 457 | 457 | eprintf("cannot strdup %u bytes:", strlen(buf)+1); |
|
| 458 | - | inputw = MAX(inputw, textw(dc, items[i].text)); |
|
| 458 | + | if(strlen(items[i].text) > max) |
|
| 459 | + | max = strlen(maxstr = items[i].text); |
|
| 459 | 460 | } |
|
| 461 | + | if(maxstr) |
|
| 462 | + | inputw = textw(dc, maxstr); |
|
| 460 | 463 | } |
|
| 461 | 464 | ||
| 462 | 465 | void |