Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/boost/beast/core/detail/win32_unicode_path.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 3 additions & 1 deletion include/boost/beast/core/impl/file_posix.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down
2 changes: 2 additions & 0 deletions include/boost/beast/core/impl/file_stdio.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down
6 changes: 6 additions & 0 deletions include/boost/beast/core/impl/file_win32.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
81 changes: 81 additions & 0 deletions test/beast/core/file_test.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down
Loading