musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
path: root/src/stdio/fmemopen.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2018年08月28日 19:16:40 -0400
committerRich Felker <dalias@aerifal.cx>2018年08月28日 19:16:40 -0400
commitf66022dda8d18e6732626c7806f6c4d32023d574 (patch)
tree8eefb9fe10f74c6e0e1406aceceaa636ca9c68cb /src/stdio/fmemopen.c
parentb39b47bac8ee5505cfc595000a140c35460e1cac (diff)
downloadmusl-f66022dda8d18e6732626c7806f6c4d32023d574.tar.gz
make fmemopen's w+ mode truncate the buffer
the w+ mode is specified to "truncate the buffer contents". like most of fmemopen, exactly what this means is underspecified. mode w and w+ of course implicitly 'truncate' the buffer if a write from the initial position is flushed, so in order for this part of the text about w+ not to be spurious, it should be interpreted as requiring something else, and the obvious reasonable interpretation is that the truncation is immediately visible if you attempt to read from the stream or the buffer before writing/flushing. this interpretation agrees with reported conformance test failures.
Diffstat (limited to 'src/stdio/fmemopen.c')
-rw-r--r--src/stdio/fmemopen.c 1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/stdio/fmemopen.c b/src/stdio/fmemopen.c
index fb2656e3..5e0eeb50 100644
--- a/src/stdio/fmemopen.c
+++ b/src/stdio/fmemopen.c
@@ -112,6 +112,7 @@ FILE *fmemopen(void *restrict buf, size_t size, const char *restrict mode)
if (!plus) f->f.flags = (*mode == 'r') ? F_NOWR : F_NORD;
if (*mode == 'r') f->c.len = size;
else if (*mode == 'a') f->c.len = f->c.pos = strnlen(buf, size);
+ else if (plus) *f->c.buf = 0;
f->f.read = mread;
f->f.write = mwrite;
generated by cgit v1.2.1 (git 2.18.0) at 2025年10月06日 21:52:38 +0000

AltStyle によって変換されたページ (->オリジナル) /