diff options
author | NRK <nrk@disroot.org> | 2022-09-02 00:35:18 +0600 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2022-09-02 12:53:34 +0200 |
commit | 32db2b125190d366be472ccb7cad833248696144 (patch) | |
tree | b6ed5ad378427e4c8912a2ea3b38651902ccc981 | |
parent | e35976f4a50f884c2162f71e4128d7c273e3e042 (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.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -549,18 +549,18 @@ paste(void) | |||
549 | static void | 549 | static void |
550 | readstdin(void) | 550 | readstdin(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) |