aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2021-11-19 16:08:01 +0600
committerN-R-K <79544946+N-R-K@users.noreply.github.com>2021-11-19 17:02:50 +0600
commit2df33208d76159ffacffce3c8a8edc3a5ad7ea7b (patch)
tree8ce2bcd800b175640b07b84235b504ccc4ba8c39
parent4a282da692fa7b8471c1399b30010de80448bda9 (diff)
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
-rw-r--r--main.c14
-rw-r--r--nsxiv.12
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: