On Tue, Feb 05, 2013 at 03:46:43PM -0500, John Baldwin wrote: > I've written an implementation of open_memstream() and > open_wmemstream() along with a set of regression tests. I'm pretty > sure open_memstream() is correct, and I believe open_wmemstream() is > correct for expected usage. The latter might even do the right thing > if you split a multi-byte character across multiple writes. One > question I have is if my choice to discard any pending multi-byte > state in the stream anytime a seek changes the effective position in > the output stream. I think this is correct as stdio will flush any > pending data before doing a seek, so if there is a partially parsed > character we aren't going to get the rest of it.
I don't think partially parsed characters can happen with a correct application. As per C99, an application must not call byte output functions on a wide-oriented stream, and vice versa. Discarding the shift state on fseek()/fseeko() is permitted (but should be documented as this is implementation-defined behaviour). State-dependent encodings (where this is relevant) are rarely used nowadays. The conversion to bytes and back probably makes open_wmemstream() quite slow but I don't think that is very important. > http://www.FreeBSD.org/~jhb/patches/open_memstream.patch The seek functions should check for overflow in the addition (for SEEK_CUR and SEEK_END) and the conversion to size_t. -- Jilles Tjoelker _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"