From 913be4e74affe04a2ceb3ab75cb8056dd920a5c8 Mon Sep 17 00:00:00 2001 From: Alex Musolino Date: Wed, 31 Oct 2018 16:49:02 +1030 Subject: awk(1): fix append operator to avoid truncating file --- sys/src/cmd/awk/run.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sys/src/cmd/awk/run.c b/sys/src/cmd/awk/run.c index c23efb36b..9af1b4b01 100644 --- a/sys/src/cmd/awk/run.c +++ b/sys/src/cmd/awk/run.c @@ -1710,7 +1710,7 @@ void stdinit(void) /* in case stdin, etc., are not constants */ Biobuf *openfile(int a, char *us) { char *s = us; - int i, m; + int i, m, fd; Biobuf *fp = nil; if (*s == '\0') @@ -1735,9 +1735,15 @@ Biobuf *openfile(int a, char *us) if (a == GT) { fp = Bopen(s, OWRITE); } else if (a == APPEND) { - fp = Bopen(s, OWRITE); - Bseek(fp, 0LL, 2); - m = GT; /* so can mix > and >> */ + fd = open(s, OWRITE); + if (fd < 0) + fd = create(s, OWRITE, 0666); + if (fd >= 0) { + fp = Bfdopen(fd, OWRITE); + if (fp != nil) + Bseek(fp, 0LL, 2); + m = GT; /* so can mix > and >> */ + } } else if (a == '|') { /* output pipe */ fp = popen(s, OWRITE); } else if (a == LE) { /* input pipe */ -- cgit v1.2.3