aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2022-09-02 00:35:18 +0600
committerHiltjo Posthuma <hiltjo@codemadness.org>2022-09-02 12:53:34 +0200
commit32db2b125190d366be472ccb7cad833248696144 (patch)
treeb6ed5ad378427e4c8912a2ea3b38651902ccc981
parente35976f4a50f884c2162f71e4128d7c273e3e042 (diff)
readstdin: use getline(3)
currently readstdin(): - fgets() into a local buffer, - strchr() the buffer to eleminate the newline - stdups() the buffer into items a simpler way is to just use getline(3), which will do the allocation for us; eliminating the need for stdup()-ing. additionally getline returns back the amount of bytes read, which eliminates the need for strchr()-ing to find the newline.
-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)