From 66c3c55759a7ee23af75657215a2fd0e1aa39558 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bert=20M=C3=BCnnich?= <ber.t@posteo.de>
Date: Wed, 28 Oct 2015 21:50:17 +0100
Subject: [PATCH] Use POSIX.1-2008 getline(3)

---
 Makefile |  2 +-
 main.c   |  9 +++++----
 util.c   | 30 ------------------------------
 util.h   |  2 --
 4 files changed, 6 insertions(+), 37 deletions(-)

diff --git a/Makefile b/Makefile
index 127a418..5cae7bd 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ MANPREFIX := $(PREFIX)/share/man
 
 CC        ?= gcc
 CFLAGS    += -std=c99 -Wall -pedantic
-CPPFLAGS  += -I$(PREFIX)/include -D_XOPEN_SOURCE=500
+CPPFLAGS  += -I$(PREFIX)/include -D_XOPEN_SOURCE=700
 LDFLAGS   += -L$(PREFIX)/lib
 LIBS      := -lX11 -lImlib2
 
diff --git a/main.c b/main.c
index 3ab7b2c..a03f5a4 100644
--- a/main.c
+++ b/main.c
@@ -825,8 +825,9 @@ int main(int argc, char **argv)
 	fileidx = 0;
 
 	if (options->from_stdin) {
+		n = 0;
 		filename = NULL;
-		while ((len = get_line(&filename, &n, stdin)) > 0) {
+		while ((len = getline(&filename, &n, stdin)) > 0) {
 			if (filename[len-1] == '\n')
 				filename[len-1] = '\0';
 			check_add_file(filename, true);
@@ -883,9 +884,9 @@ int main(int argc, char **argv)
 		const char *name[] = { "image-info", "key-handler" };
 
 		for (i = 0; i < ARRLEN(cmd); i++) {
-			len = strlen(homedir) + strlen(dsuffix) + strlen(name[i]) + 12;
-			*cmd[i] = (char*) s_malloc(len);
-			snprintf(*cmd[i], len, "%s%s/sxiv/exec/%s", homedir, dsuffix, name[i]);
+			n = strlen(homedir) + strlen(dsuffix) + strlen(name[i]) + 12;
+			*cmd[i] = (char*) s_malloc(n);
+			snprintf(*cmd[i], n, "%s%s/sxiv/exec/%s", homedir, dsuffix, name[i]);
 			if (access(*cmd[i], X_OK) != 0) {
 				free(*cmd[i]);
 				*cmd[i] = NULL;
diff --git a/util.c b/util.c
index 17f40ec..01a26d4 100644
--- a/util.c
+++ b/util.c
@@ -96,36 +96,6 @@ void die(const char* fmt, ...)
 	exit(EXIT_FAILURE);
 }
 
-ssize_t get_line(char **buf, size_t *n, FILE *stream)
-{
-	size_t len;
-	char *s;
-
-	if (*buf == NULL || *n == 0) {
-		*n = BUF_SIZE;
-		*buf = (char*) s_malloc(*n);
-	}
-	s = *buf;
-
-	while (true) {
-		if (fgets(s, *n - (s - *buf), stream) == NULL)
-			return -1;
-		len = strlen(s);
-		if (feof(stream))
-			break;
-		if (len > 0 && s[len-1] == '\n')
-			break;
-		if (len + 1 == *n - (s - *buf)) {
-			*buf = (char*) s_realloc(*buf, 2 * *n);
-			s = *buf + *n - 1;
-			*n *= 2;
-		} else {
-			s += len;
-		}
-	}
-	return s - *buf + len;
-}
-
 void size_readable(float *size, const char **unit)
 {
 	const char *units[] = { "", "K", "M", "G" };
diff --git a/util.h b/util.h
index a62043b..692abba 100644
--- a/util.h
+++ b/util.h
@@ -68,8 +68,6 @@ char* s_strdup(const char*);
 void warn(const char*, ...);
 void die(const char*, ...);
 
-ssize_t get_line(char**, size_t*, FILE*);
-
 void size_readable(float*, const char**);
 
 char* absolute_path(const char*);