File tree Expand file tree Collapse file tree 1 file changed +8
-2
lines changed Expand file tree Collapse file tree 1 file changed +8
-2
lines changed Original file line number Diff line number Diff line change @@ -315,8 +315,14 @@ protected:
315315 traits_type::copy (__str, this ->gptr (), __n);
316316 this ->__gbump_ptrdiff (__n);
317317 }
318- if (__len - __n >= this ->egptr () - this ->eback ())
319- return std::fread (__str + __n, sizeof (char_type), __len - __n, __file_);
318+ const streamsize __remainder = __len - __n;
319+ const streamsize __buffer_space = this ->egptr () - this ->eback ();
320+
321+ if (__remainder >= __buffer_space)
322+ return std::fread (__str + __n, sizeof (char_type), __remainder, __file_) + __n;
323+ else if (__remainder > 0 )
324+ return basic_streambuf<_CharT, _Traits>::xsgetn (__str + __n, __remainder) + __n;
325+ return __n;
320326 }
321327 return basic_streambuf<_CharT, _Traits>::xsgetn (__str, __len);
322328 }
You can’t perform that action at this time.
0 commit comments