Hi,
On 09/17/15 11:06, Iván Matellanes wrote:
DEFINE_THISCALL_WRAPPER(strstreambuf_seekoff, 16) streampos __thiscall strstreambuf_seekoff(strstreambuf *this, streamoff offset, ios_seek_dir dir, int mode) {
- FIXME("(%p %d %d %d) stub\n", this, offset, dir, mode);
- return EOF;
- char *base[3];
- TRACE("(%p %d %d %d)\n", this, offset, dir, mode);
- if (dir < 0 || dir > 2 || !(mode & (OPENMODE_in|OPENMODE_out)))
return EOF;
- /* read buffer */
- if (mode & OPENMODE_in) {
base[0] = this->base.eback;
base[1] = this->base.gptr;
base[2] = this->base.egptr;
The code will be easier to read if you use SEEKDIR_beg, SEEKDIR_cur and SEEKDIR_end instead of its values.
if (this->base.gptr >= this->base.egptr)
call_streambuf_underflow(&this->base);
According to my testing call_streambuf_underflow should be called always, even so default implementation will just return in this case. I was not really checking it but it looks wrong that you store base table values before underflow is called.
Patches 1-9 looks good for me.
Thanks, Piotr