aboutsummaryrefslogtreecommitdiff
path: root/dmenu.c
diff options
context:
space:
mode:
Diffstat (limited to 'dmenu.c')
-rw-r--r--dmenu.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/dmenu.c b/dmenu.c
index 571bc35..969f6d8 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -549,18 +549,18 @@ paste(void)
549static void 549static void
550readstdin(void) 550readstdin(void)
551{ 551{
552 char buf[sizeof text], *p; 552 char *line = NULL;
553 size_t i, size = 0; 553 size_t i, junk, size = 0;
554 ssize_t len;
554 555
555 /* read each line from stdin and add it to the item list */ 556 /* read each line from stdin and add it to the item list */
556 for (i = 0; fgets(buf, sizeof buf, stdin); i++) { 557 for (i = 0; (len = getline(&line, &junk, stdin)) != -1; i++, line = NULL) {
557 if (i + 1 >= size / sizeof *items) 558 if (i + 1 >= size / sizeof *items)
558 if (!(items = realloc(items, (size += BUFSIZ)))) 559 if (!(items = realloc(items, (size += BUFSIZ))))
559 die("cannot realloc %zu bytes:", size); 560 die("cannot realloc %zu bytes:", size);
560 if ((p = strchr(buf, '\n'))) 561 if (line[len - 1] == '\n')
561 *p = '\0'; 562 line[len - 1] = '\0';
562 if (!(items[i].text = strdup(buf))) 563 items[i].text = line;
563 die("cannot strdup %zu bytes:", strlen(buf) + 1);
564 items[i].out = 0; 564 items[i].out = 0;
565 } 565 }
566 if (items) 566 if (items)