summaryrefslogtreecommitdiffstats
path: root/stream.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-04-17 19:08:56 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-04-17 19:08:56 -0700
commitd7bfa8d761ac9656063f9b456f773bf54e4b6bf3 (patch)
treeff1a9333cac96dcac3b96b11cf2e65fc8691a1ac /stream.c
parent364f0437f66da9ae980266ef437519de9eb0f970 (diff)
downloadtxr-d7bfa8d761ac9656063f9b456f773bf54e4b6bf3.tar.gz
txr-d7bfa8d761ac9656063f9b456f773bf54e4b6bf3.tar.bz2
txr-d7bfa8d761ac9656063f9b456f773bf54e4b6bf3.zip
open-file: fix broken append mode.
* stream.c (w_fopen_mode): Add O_APPEND flag if m.append is set. (do_parse_mode): Set m.notrunc flag for append mode, so O_TRUNC won't be added in w_fopen_mode.
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/stream.c b/stream.c
index ce3f02b9..ae8f384e 100644
--- a/stream.c
+++ b/stream.c
@@ -1092,6 +1092,7 @@ static FILE *w_fopen_mode(const wchar_t *wname, const wchar_t *mode,
if3(m.read && !m.write, O_RDONLY, 0) |
if3(!m.read && m.write,
if3(!m.notrunc, O_TRUNC, 0) | O_WRONLY | O_CREAT, 0) |
+ if3(m.append, O_APPEND, 0) |
if3(m.nonblock, O_NONBLOCK, 0));
char *stkname = coerce(char *, alloca(nsiz));
int fd;
@@ -1418,6 +1419,7 @@ static struct stdio_mode do_parse_mode(val mode_str, struct stdio_mode m_dfl)
ms++;
m.write = 1;
m.append = 1;
+ m.notrunc = 1;
break;
case 'm':
ms++;