From 2df33208d76159ffacffce3c8a8edc3a5ad7ea7b Mon Sep 17 00:00:00 2001 From: NRK Date: Fri, 19 Nov 2021 16:08:01 +0600 Subject: [PATCH] apply -0 to stdin/-i as well while i was initially against this since it can be done via `xargs -0`. the problem with this approach is that there's a limit to how many args a command can recieve, leading to problem like this [0] when opening large (1k~) amount of images. there's no limit on how big stdin can be, so being able to read a null-separated list from stdin doesn't have this problem. [0]: https://github.com/ranger/ranger/pull/2307#issuecomment-818683515 --- main.c | 14 +++++++++----- nsxiv.1 | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/main.c b/main.c index a4af92b..5bab026 100644 --- a/main.c +++ b/main.c @@ -105,6 +105,14 @@ void cleanup(void) win_close(&win); } +static bool xgetline(char **lineptr, size_t *n) +{ + ssize_t len = getdelim(lineptr, n, options->using_null ? '\0' : '\n', stdin); + if (!options->using_null && len > 0 && (*lineptr)[len-1] == '\n') + (*lineptr)[len-1] = '\0'; + return len > 0; +} + void check_add_file(char *filename, bool given) { char *path; @@ -853,7 +861,6 @@ int main(int argc, char *argv[]) { int i, start; size_t n; - ssize_t len; char *filename; const char *homedir, *dsuffix = ""; struct stat fstats; @@ -889,11 +896,8 @@ int main(int argc, char *argv[]) if (options->from_stdin) { n = 0; filename = NULL; - while ((len = getline(&filename, &n, stdin)) > 0) { - if (filename[len-1] == '\n') - filename[len-1] = '\0'; + while (xgetline(&filename, &n)) check_add_file(filename, true); - } free(filename); } diff --git a/nsxiv.1 b/nsxiv.1 index 280ba23..f968f3b 100644 --- a/nsxiv.1 +++ b/nsxiv.1 @@ -128,7 +128,7 @@ Set zoom level to ZOOM percent. .TP .B \-0 Use NULL-separator. With this option output of \-o and file-list sent to the -key-handler will be seperated by a NULL character. +key-handler and the input of \-i will be seperated by a NULL character. .SH KEYBOARD COMMANDS .SS General The following keyboard commands are available in both image and thumbnail mode: