From 66c3c55759a7ee23af75657215a2fd0e1aa39558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bert=20M=C3=BCnnich?= 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*);