clean up some read-write operations

This commit is contained in:
David Rose 2011-09-16 23:10:27 +00:00
parent e986614cfc
commit 57b42fbfe1

View File

@ -29,7 +29,6 @@
PandaFileStreamBuf::NewlineMode PandaFileStreamBuf::_newline_mode = NM_native; PandaFileStreamBuf::NewlineMode PandaFileStreamBuf::_newline_mode = NM_native;
static const size_t file_buffer_size = 4096; static const size_t file_buffer_size = 4096;
static const size_t alignment_size = 4096;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: PandaFileStreamBuf::Constructor // Function: PandaFileStreamBuf::Constructor
@ -319,6 +318,7 @@ seekoff(streamoff off, ios_seekdir dir, ios_openmode which) {
size_t n = egptr() - gptr(); size_t n = egptr() - gptr();
gbump(n); gbump(n);
_gpos -= n; _gpos -= n;
assert(_gpos >= 0);
size_t cur_pos = _gpos; size_t cur_pos = _gpos;
size_t new_pos = cur_pos; size_t new_pos = cur_pos;
@ -358,6 +358,7 @@ seekoff(streamoff off, ios_seekdir dir, ios_openmode which) {
} }
_gpos = new_pos; _gpos = new_pos;
assert(_gpos >= 0);
result = new_pos; result = new_pos;
} }
@ -400,6 +401,7 @@ seekoff(streamoff off, ios_seekdir dir, ios_openmode which) {
} }
_ppos = new_pos; _ppos = new_pos;
assert(_ppos >= 0);
result = new_pos; result = new_pos;
} }
@ -490,6 +492,8 @@ int PandaFileStreamBuf::
underflow() { underflow() {
// Sometimes underflow() is called even if the buffer is not empty. // Sometimes underflow() is called even if the buffer is not empty.
if (gptr() >= egptr()) { if (gptr() >= egptr()) {
sync();
// Mark the buffer filled (with buffer_size bytes). // Mark the buffer filled (with buffer_size bytes).
size_t buffer_size = egptr() - eback(); size_t buffer_size = egptr() - eback();
gbump(-(int)buffer_size); gbump(-(int)buffer_size);
@ -586,6 +590,7 @@ write_chars(const char *start, size_t length) {
size_t n = egptr() - gptr(); size_t n = egptr() - gptr();
gbump(n); gbump(n);
_gpos -= n; _gpos -= n;
assert(_gpos >= 0);
// Windows case. // Windows case.
if (_open_mode & ios::binary) { if (_open_mode & ios::binary) {
@ -718,6 +723,7 @@ read_chars_raw(char *start, size_t length) {
#endif // _WIN32 #endif // _WIN32
_gpos += length; _gpos += length;
assert(_gpos >= 0);
return length; return length;
} }
@ -776,6 +782,7 @@ write_chars_raw(const char *start, size_t length) {
} }
assert(bytes_written == length); assert(bytes_written == length);
_ppos += bytes_written; _ppos += bytes_written;
assert(_ppos >= 0);
#else #else
// Posix case. // Posix case.
@ -804,6 +811,7 @@ write_chars_raw(const char *start, size_t length) {
start += result; start += result;
remaining -= result; remaining -= result;
_ppos += result; _ppos += result;
assert(_ppos >= 0);
} }
#endif // _WIN32 #endif // _WIN32