shithub: riscv

Download patch

ref: 913be4e74affe04a2ceb3ab75cb8056dd920a5c8
parent: 8e9d2434e97fe6cf4b0d3e7f43e3e35d7ae1033f
author: Alex Musolino <[email protected]>
date: Wed Oct 31 12:49:02 EDT 2018

awk(1): fix append operator to avoid truncating file

--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -1710,7 +1710,7 @@
 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 @@
 	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 */