BUG: Filebuf overflow() and underflow() Call filebuf::sync() (184236)
The information in this article applies to:
- Microsoft Visual C++ 4.0
- Microsoft Visual C++ 4.0a
- Microsoft Visual C++ 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft Visual C++ .NET (2003)
- Microsoft Visual C++ .NET (2002)
This article was previously published under Q184236 SYMPTOMS
The filebuf class allows you to use buffered file input/output (I/O), and
provides the sync() function to flush the file buffers. However, the
filebuf::overflow() and filebuf::underflow() functions do not support the
use of virtual functions in the filebuf class. Classes derived from filebuf
might incorrectly call filebuf::sync() when they should call the sync()
function from the derived class.
CAUSE
The filebuf class calls filebuf::sync() instead of calling sync().
RESOLUTION
You can use one of the following workarounds to this problem:
- Do not define the virtual function sync() in your filebuf-derived class.
-or-
define your own versions of overflow() and underflow() in the
derived class.
- Change the filebuf::overflow() and filebuf::underflow() functions to
call sync() instead of filebuf::sync(). You can find the source code for
filebuf class functions in the following location:
...\VC\Src\FileBuf.cpp
The source code for filebuf::overflow() follows:
int filebuf::overflow(int c)
{
if (allocate()==EOF)
return EOF;
if (filebuf::sync()==EOF) // Change to sync() for the workaround.
return EOF;
if (!unbuffered())
setp(base(),ebuf());
if (c!=EOF)
{
if ((!unbuffered()) && (pptr() < epptr()))
sputc(c);
else
{
if (_write(x_fd,&c,1)!=1)
return(EOF);
}
}
return(1);
}
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products
listed at the beginning of this article.
MORE INFORMATION
Modification Type: | Major | Last Reviewed: | 1/6/2004 |
---|
Keywords: | kbBug kbcode kbLangCPP kbpending KB184236 kbAudDeveloper |
---|
|