summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2022-09-02 00:35:18 +0600
committerrafa_99 <raroma09@gmail.com>2022-09-03 13:37:26 +0100
commit8b25660bb929374465f601f78a48972af9fec707 (patch)
treebe0a06b2e920b3727b8e901478d4bf783a731cc9
parentc69729f3396e5c7d3260944d451738616514cf4b (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.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/dmenu.c b/dmenu.c
index 4835c00..5932598 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -556,22 +556,22 @@ paste(void)
static void
readstdin(void)
{
- char buf[sizeof text], *p;
- size_t i, size = 0;
+ char *line = NULL;
+ size_t i, junk, size = 0;
+ ssize_t len;
if(passwd){
- inputw = lines = 0;
- return;
- }
+ inputw = lines = 0;
+ return;
+ }
/* read each line from stdin and add it to the item list */
- for (i = 0; fgets(buf, sizeof buf, stdin); i++) {
+ for (i = 0; (len = getline(&line, &junk, stdin)) != -1; i++, line = NULL) {
if (i + 1 >= size / sizeof *items)
if (!(items = realloc(items, (size += BUFSIZ))))
die("cannot realloc %zu bytes:", size);
- if ((p = strchr(buf, '\n')))
- *p = '\0';
- if (!(items[i].text = strdup(buf)))
- die("cannot strdup %zu bytes:", strlen(buf) + 1);
+ if (line[len - 1] == '\n')
+ line[len - 1] = '\0';
+ items[i].text = line;
items[i].out = 0;
}
if (items)