I noticed some oddities/problems with the stream mark/seek/reset
functionality in svn_subst_stream_translated().
1.
svn_subst_stream_translated() doesn't handle mark/seek properly.
translated_stream_mark() saves and translated_stream_seek() restores
only the source stream's position, and not the internal state of
translation which it resets to "not in a translation". This will work
properly only if the marked position is not inside a keyword or EOL. It
needs to store (into the mark structure) the current state of
translation as well.
(An alternative could be to attach conditions to the use of mark/seek:
"this only works if you do XXX" - but I think that would be a Bad Thing.
The concept of streams works well precisely because we can layer
arbitrary streams on top of each other and expect them to work without
having to worry about such conditions.)
2.
translated_stream_seek() first flushes the output buffer, but
translated_stream_reset() doesn't. I think that's a bug in _reset.
- Julian
Received on 2010-04-15 15:18:57 CEST