> +/* ??0ifstream@@QAE@HPADH@Z */
> +/* ??0ifstream@@QEAA@HPEADH@Z */
> +DEFINE_THISCALL_WRAPPER(ifstream_buffer_ctor, 20)
> +istream* __thiscall ifstream_buffer_ctor(istream *this, filedesc fd, char *buffer, int length, BOOL virt_init)
> +{
> + ios *base;
> + filebuf *fb = MSVCRT_operator_new(sizeof(filebuf));
> +
> + TRACE("(%p %d %p %d %d)\n", this, fd, buffer, length, virt_init);
> +
> + if (fb)
> + {
> + filebuf_fd_reserve_ctor(fb, fd, buffer, length);
> + istream_sb_ctor(this, &fb->base, virt_init);
> + }
> + else
> + istream_ctor(this, virt_init);
The allocation failure handling looks quite strange. It's probably
better to remove it so the application crashes instead of misbehaving.
It's been a while, but if I remember correctly, I did it this way because stdiostream and strstream and probably others do the same.