mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-12 10:13:51 +01:00
#4241: Poco::FileInputStream broken in 1.12.5 and 1.11.8.
This commit is contained in:
parent
3da8ee633e
commit
743da564eb
@ -47,27 +47,12 @@ class Foundation_API FileIOS: public virtual std::ios
|
||||
/// On Windows platforms, UTF-8 encoded Unicode paths are correctly handled.
|
||||
{
|
||||
public:
|
||||
FileIOS(std::ios::openmode defaultMode);
|
||||
FileIOS();
|
||||
/// Creates the basic stream.
|
||||
|
||||
~FileIOS();
|
||||
/// Destroys the stream.
|
||||
|
||||
void open(const std::string& path, std::ios::openmode mode);
|
||||
/// Opens the file specified by path, using the given mode.
|
||||
///
|
||||
/// Throws a FileException (or a similar exception) if the file
|
||||
/// does not exist or is not accessible for other reasons and
|
||||
/// a new file cannot be created.
|
||||
|
||||
void open(const std::string& path);
|
||||
/// Opens the file specified by path, using the default mode given
|
||||
/// in the constructor.
|
||||
///
|
||||
/// Throws a FileException (or a similar exception) if the file
|
||||
/// does not exist or is not accessible for other reasons and
|
||||
/// a new file cannot be created.
|
||||
|
||||
void close();
|
||||
/// Closes the file stream.
|
||||
///
|
||||
@ -80,7 +65,6 @@ public:
|
||||
|
||||
protected:
|
||||
FileStreamBuf _buf;
|
||||
std::ios::openmode _defaultMode;
|
||||
};
|
||||
|
||||
|
||||
@ -111,6 +95,14 @@ public:
|
||||
|
||||
~FileInputStream();
|
||||
/// Destroys the stream.
|
||||
|
||||
void open(const std::string& path, std::ios::openmode mode = std::ios::in);
|
||||
/// Opens the file specified by path, using the given mode, which
|
||||
/// will always include std::ios::in (even if not specified).
|
||||
///
|
||||
/// Throws a FileException (or a similar exception) if the file
|
||||
/// does not exist or is not accessible for other reasons and
|
||||
/// a new file cannot be created.
|
||||
};
|
||||
|
||||
|
||||
@ -139,9 +131,25 @@ public:
|
||||
/// Throws a FileException (or a similar exception) if the file
|
||||
/// does not exist or is not accessible for other reasons and
|
||||
/// a new file cannot be created.
|
||||
///
|
||||
/// NOTE: The default mode std::ios::out | std::ios::trunc is different from the default
|
||||
/// for std::ofstream, which is std::ios::out only. This is for backwards compatibility
|
||||
/// with earlier POCO versions.
|
||||
|
||||
~FileOutputStream();
|
||||
/// Destroys the FileOutputStream.
|
||||
|
||||
void open(const std::string& path, std::ios::openmode mode = std::ios::out | std::ios::trunc);
|
||||
/// Opens the file specified by path, using the given mode, which
|
||||
/// always includes std::ios::out, even if not specified.
|
||||
///
|
||||
/// Throws a FileException (or a similar exception) if the file
|
||||
/// does not exist or is not accessible for other reasons and
|
||||
/// a new file cannot be created.
|
||||
///
|
||||
/// NOTE: The default mode std::ios::out | std::ios::trunc is different from the default
|
||||
/// for std::ostream, which is std::ios::out only. This is for backwards compatibility
|
||||
/// with earlier POCO versions.
|
||||
};
|
||||
|
||||
|
||||
@ -168,9 +176,20 @@ public:
|
||||
FileStream(const std::string& path, std::ios::openmode mode = std::ios::out | std::ios::in);
|
||||
/// Creates the FileStream for the file given by path, using
|
||||
/// the given mode.
|
||||
///
|
||||
/// NOTE: The default mode std::ios::in | std::ios::out is different from the default
|
||||
/// for std::fstream, which is std::ios::out only. This is for backwards compatibility
|
||||
/// with earlier POCO versions.
|
||||
|
||||
~FileStream();
|
||||
/// Destroys the FileOutputStream.
|
||||
|
||||
void open(const std::string& path, std::ios::openmode mode = std::ios::out | std::ios::in);
|
||||
/// Opens the file specified by path, using the given mode.
|
||||
///
|
||||
/// Throws a FileException (or a similar exception) if the file
|
||||
/// does not exist or is not accessible for other reasons and
|
||||
/// a new file cannot be created.
|
||||
};
|
||||
|
||||
|
||||
|
@ -24,8 +24,7 @@
|
||||
namespace Poco {
|
||||
|
||||
|
||||
FileIOS::FileIOS(std::ios::openmode defaultMode):
|
||||
_defaultMode(defaultMode)
|
||||
FileIOS::FileIOS()
|
||||
{
|
||||
poco_ios_init(&_buf);
|
||||
}
|
||||
@ -36,20 +35,6 @@ FileIOS::~FileIOS()
|
||||
}
|
||||
|
||||
|
||||
void FileIOS::open(const std::string& path, std::ios::openmode mode)
|
||||
{
|
||||
clear();
|
||||
_buf.open(path, mode);
|
||||
}
|
||||
|
||||
|
||||
void FileIOS::open(const std::string& path)
|
||||
{
|
||||
clear();
|
||||
_buf.open(path, _defaultMode);
|
||||
}
|
||||
|
||||
|
||||
void FileIOS::close()
|
||||
{
|
||||
if (!_buf.close())
|
||||
@ -66,14 +51,12 @@ FileStreamBuf* FileIOS::rdbuf()
|
||||
|
||||
|
||||
FileInputStream::FileInputStream():
|
||||
FileIOS(std::ios::in),
|
||||
std::istream(&_buf)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
FileInputStream::FileInputStream(const std::string& path, std::ios::openmode mode):
|
||||
FileIOS(mode | std::ios::in),
|
||||
std::istream(&_buf)
|
||||
{
|
||||
open(path, mode | std::ios::in);
|
||||
@ -85,15 +68,20 @@ FileInputStream::~FileInputStream()
|
||||
}
|
||||
|
||||
|
||||
void FileInputStream::open(const std::string& path, std::ios::openmode mode)
|
||||
{
|
||||
clear();
|
||||
_buf.open(path, mode | std::ios::in);
|
||||
}
|
||||
|
||||
|
||||
FileOutputStream::FileOutputStream():
|
||||
FileIOS(std::ios::out),
|
||||
std::ostream(&_buf)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
FileOutputStream::FileOutputStream(const std::string& path, std::ios::openmode mode):
|
||||
FileIOS(mode | std::ios::out),
|
||||
std::ostream(&_buf)
|
||||
{
|
||||
open(path, mode | std::ios::out);
|
||||
@ -105,15 +93,20 @@ FileOutputStream::~FileOutputStream()
|
||||
}
|
||||
|
||||
|
||||
void FileOutputStream::open(const std::string& path, std::ios::openmode mode)
|
||||
{
|
||||
clear();
|
||||
_buf.open(path, mode | std::ios::out);
|
||||
}
|
||||
|
||||
|
||||
FileStream::FileStream():
|
||||
FileIOS(std::ios::in | std::ios::out),
|
||||
std::iostream(&_buf)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
FileStream::FileStream(const std::string& path, std::ios::openmode mode):
|
||||
FileIOS(mode),
|
||||
std::iostream(&_buf)
|
||||
{
|
||||
open(path, mode);
|
||||
@ -125,4 +118,11 @@ FileStream::~FileStream()
|
||||
}
|
||||
|
||||
|
||||
void FileStream::open(const std::string& path, std::ios::openmode mode)
|
||||
{
|
||||
clear();
|
||||
_buf.open(path, mode);
|
||||
}
|
||||
|
||||
|
||||
} // namespace Poco
|
||||
|
Loading…
Reference in New Issue
Block a user