mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-27 02:53:10 +01:00
backport changes from 1.4.3 branch
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// StreamCopier.cpp
|
||||
//
|
||||
// $Id: //poco/svn/Foundation/src/StreamCopier.cpp#2 $
|
||||
// $Id: //poco/1.4/Foundation/src/StreamCopier.cpp#2 $
|
||||
//
|
||||
// Library: Foundation
|
||||
// Package: Streams
|
||||
@@ -41,9 +41,9 @@
|
||||
namespace Poco {
|
||||
|
||||
|
||||
std::streamsize StreamCopier::copyStream(std::istream& istr, std::ostream& ostr, unsigned bufferSize)
|
||||
std::streamsize StreamCopier::copyStream(std::istream& istr, std::ostream& ostr, std::size_t bufferSize)
|
||||
{
|
||||
poco_assert (bufferSize > 0);
|
||||
poco_assert (bufferSize > 0);
|
||||
|
||||
Buffer<char> buffer(bufferSize);
|
||||
std::streamsize len = 0;
|
||||
@@ -64,9 +64,34 @@ std::streamsize StreamCopier::copyStream(std::istream& istr, std::ostream& ostr,
|
||||
}
|
||||
|
||||
|
||||
std::streamsize StreamCopier::copyToString(std::istream& istr, std::string& str, unsigned bufferSize)
|
||||
#if defined(POCO_HAVE_INT64)
|
||||
Poco::UInt64 StreamCopier::copyStream64(std::istream& istr, std::ostream& ostr, std::size_t bufferSize)
|
||||
{
|
||||
poco_assert (bufferSize > 0);
|
||||
poco_assert (bufferSize > 0);
|
||||
|
||||
Buffer<char> buffer(bufferSize);
|
||||
Poco::UInt64 len = 0;
|
||||
istr.read(buffer.begin(), bufferSize);
|
||||
std::streamsize n = istr.gcount();
|
||||
while (n > 0)
|
||||
{
|
||||
len += n;
|
||||
ostr.write(buffer.begin(), n);
|
||||
if (istr && ostr)
|
||||
{
|
||||
istr.read(buffer.begin(), bufferSize);
|
||||
n = istr.gcount();
|
||||
}
|
||||
else n = 0;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
std::streamsize StreamCopier::copyToString(std::istream& istr, std::string& str, std::size_t bufferSize)
|
||||
{
|
||||
poco_assert (bufferSize > 0);
|
||||
|
||||
Buffer<char> buffer(bufferSize);
|
||||
std::streamsize len = 0;
|
||||
@@ -87,6 +112,31 @@ std::streamsize StreamCopier::copyToString(std::istream& istr, std::string& str,
|
||||
}
|
||||
|
||||
|
||||
#if defined(POCO_HAVE_INT64)
|
||||
Poco::UInt64 StreamCopier::copyToString64(std::istream& istr, std::string& str, std::size_t bufferSize)
|
||||
{
|
||||
poco_assert (bufferSize > 0);
|
||||
|
||||
Buffer<char> buffer(bufferSize);
|
||||
Poco::UInt64 len = 0;
|
||||
istr.read(buffer.begin(), bufferSize);
|
||||
std::streamsize n = istr.gcount();
|
||||
while (n > 0)
|
||||
{
|
||||
len += n;
|
||||
str.append(buffer.begin(), static_cast<std::string::size_type>(n));
|
||||
if (istr)
|
||||
{
|
||||
istr.read(buffer.begin(), bufferSize);
|
||||
n = istr.gcount();
|
||||
}
|
||||
else n = 0;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
std::streamsize StreamCopier::copyStreamUnbuffered(std::istream& istr, std::ostream& ostr)
|
||||
{
|
||||
char c;
|
||||
@@ -102,4 +152,21 @@ std::streamsize StreamCopier::copyStreamUnbuffered(std::istream& istr, std::ostr
|
||||
}
|
||||
|
||||
|
||||
#if defined(POCO_HAVE_INT64)
|
||||
Poco::UInt64 StreamCopier::copyStreamUnbuffered64(std::istream& istr, std::ostream& ostr)
|
||||
{
|
||||
char c;
|
||||
Poco::UInt64 len = 0;
|
||||
istr.get(c);
|
||||
while (istr && ostr)
|
||||
{
|
||||
++len;
|
||||
ostr.put(c);
|
||||
istr.get(c);
|
||||
}
|
||||
return len;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
} // namespace Poco
|
||||
|
||||
Reference in New Issue
Block a user