aboutsummaryrefslogtreecommitdiff
path: root/toys
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2019-06-22 11:22:17 -0700
committerRob Landley <rob@landley.net>2019-06-24 19:50:03 -0500
commit96231a5a77dc1c3c0e84eb78e6dd7574505928eb (patch)
treeade7570da727a92b0fb48d597eaef411d165926d /toys
parent85920266afd45a972d5e1b092b45de5d8d8496a5 (diff)
downloadtoybox-96231a5a77dc1c3c0e84eb78e6dd7574505928eb.tar.gz
diff: fix diff of stdin for systems without /tmp.
xtempfile() alreay does the right thing, so switch to that. Also use xsendfile() for the actual copying. Fixes the cat tests on Android.
Diffstat (limited to 'toys')
-rw-r--r--toys/pending/diff.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/toys/pending/diff.c b/toys/pending/diff.c
index 4a528134..d865e8df 100644
--- a/toys/pending/diff.c
+++ b/toys/pending/diff.c
@@ -180,20 +180,13 @@ static void do_merge(struct candidate **K, int *k, int i,
static FILE* read_stdin()
{
- char tmp_name[] = "/tmp/diffXXXXXX";
- int rd, wr, tmpfd = mkstemp(tmp_name);
+ char *tmp_name;
+ int tmpfd = xtempfile("stdin", &tmp_name);
- if (tmpfd == -1) perror_exit("mkstemp");
unlink(tmp_name);
+ free(tmp_name);
- while (1) {
- rd = xread(STDIN_FILENO, toybuf, sizeof(toybuf));
-
- if (!rd) break;
- if (rd < 0) perror_exit("read error");
- wr = writeall(tmpfd, toybuf, rd);
- if (wr < 0) perror_exit("write");
- }
+ xsendfile(0, tmpfd);
return fdopen(tmpfd, "r");
}