diff options
author | NRK <nrk@disroot.org> | 2022-09-02 00:35:18 +0600 |
---|---|---|
committer | rafa_99 <raroma09@gmail.com> | 2022-09-03 13:37:26 +0100 |
commit | 8b25660bb929374465f601f78a48972af9fec707 (patch) | |
tree | be0a06b2e920b3727b8e901478d4bf783a731cc9 | |
parent | c69729f3396e5c7d3260944d451738616514cf4b (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 | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -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) |