Introduction
Introduction Statistics Contact Development Disclaimer Help
readstdin: use getline(3) - dmenu - dynamic menu
git clone git://git.suckless.org/dmenu
Log
Files
Refs
README
LICENSE
---
commit 32db2b125190d366be472ccb7cad833248696144
parent e35976f4a50f884c2162f71e4128d7c273e3e042
Author: NRK <[email protected]>
Date: Fri, 2 Sep 2022 00:35:18 +0600
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.
Diffstat:
M dmenu.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
---
diff --git a/dmenu.c b/dmenu.c
@@ -549,18 +549,18 @@ 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;
/* 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 = NU…
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)
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.