mirror of
https://github.com/boostorg/beast.git
synced 2026-08-03 20:14:17 +02:00
committed by
Mohammad Nejati
parent
bb6cf79a7c
commit
56a7c3af49
@@ -29,6 +29,7 @@ class win32_unicode_path
|
||||
|
||||
public:
|
||||
win32_unicode_path(const char* utf8_path, error_code& ec) {
|
||||
ec = {};
|
||||
int ret = mb2wide(utf8_path, static_buf_.data(),
|
||||
static_buf_.size());
|
||||
if (ret == 0)
|
||||
|
||||
@@ -288,12 +288,13 @@ read(void* buffer, std::size_t n, error_code& ec) const
|
||||
if(result == 0)
|
||||
{
|
||||
// short read
|
||||
return nread;
|
||||
break;
|
||||
}
|
||||
n -= result;
|
||||
nread += result;
|
||||
buffer = static_cast<char*>(buffer) + result;
|
||||
}
|
||||
ec = {};
|
||||
return nread;
|
||||
}
|
||||
|
||||
@@ -328,6 +329,7 @@ write(void const* buffer, std::size_t n, error_code& ec)
|
||||
nwritten += result;
|
||||
buffer = static_cast<char const*>(buffer) + result;
|
||||
}
|
||||
ec = {};
|
||||
return nwritten;
|
||||
}
|
||||
|
||||
|
||||
@@ -300,6 +300,7 @@ read(void* buffer, std::size_t n, error_code& ec) const
|
||||
ec.assign(errno, generic_category());
|
||||
return 0;
|
||||
}
|
||||
ec = {};
|
||||
return nread;
|
||||
}
|
||||
|
||||
@@ -318,6 +319,7 @@ write(void const* buffer, std::size_t n, error_code& ec)
|
||||
ec.assign(errno, generic_category());
|
||||
return 0;
|
||||
}
|
||||
ec = {};
|
||||
return nwritten;
|
||||
}
|
||||
|
||||
|
||||
@@ -317,7 +317,10 @@ read(void* buffer, std::size_t n, error_code& ec)
|
||||
return nread;
|
||||
}
|
||||
if(bytesRead == 0)
|
||||
{
|
||||
ec = {};
|
||||
return nread;
|
||||
}
|
||||
n -= bytesRead;
|
||||
nread += bytesRead;
|
||||
buffer = static_cast<char*>(buffer) + bytesRead;
|
||||
@@ -357,7 +360,10 @@ write(void const* buffer, std::size_t n, error_code& ec)
|
||||
return nwritten;
|
||||
}
|
||||
if(bytesWritten == 0)
|
||||
{
|
||||
ec = {};
|
||||
return nwritten;
|
||||
}
|
||||
n -= bytesWritten;
|
||||
nwritten += bytesWritten;
|
||||
buffer = static_cast<char const*>(buffer) + bytesWritten;
|
||||
|
||||
@@ -444,6 +444,87 @@ test_file()
|
||||
remove(path);
|
||||
}
|
||||
|
||||
// https://github.com/boostorg/beast/issues/3035
|
||||
//
|
||||
// A successful operation must clear `ec`.
|
||||
{
|
||||
string_view const s = "Hello, world!";
|
||||
|
||||
// write
|
||||
{
|
||||
File f;
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.open(path, file_mode::write, ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.write(s.data(), s.size(), ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.write(s.data(), 0, ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
auto n = f.size(ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
BEAST_EXPECT(n == s.size());
|
||||
}
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.pos(ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.seek(0, ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.close(ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
}
|
||||
|
||||
// read
|
||||
{
|
||||
File f;
|
||||
{
|
||||
error_code ec = error::timeout;
|
||||
f.open(path, file_mode::read, ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
std::string buf;
|
||||
buf.resize(s.size());
|
||||
error_code ec = error::timeout;
|
||||
auto n = f.read(&buf[0], buf.size(), ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
BEAST_EXPECT(n == s.size());
|
||||
BEAST_EXPECT(buf == s);
|
||||
}
|
||||
{
|
||||
char c;
|
||||
error_code ec = error::timeout;
|
||||
f.read(&c, 0, ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
}
|
||||
{
|
||||
char c;
|
||||
error_code ec = error::timeout;
|
||||
auto n = f.read(&c, 1, ec);
|
||||
BEAST_EXPECTS(! ec, ec.message());
|
||||
BEAST_EXPECT(n == 0);
|
||||
}
|
||||
}
|
||||
remove(path);
|
||||
}
|
||||
|
||||
BEAST_EXPECT(! fs::exists(path));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user