fast but inexact f5bd1eed
Connor Lane Smith · 2011-05-15 13:02 1 file(s) · +7 −4
dmenu.c +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