Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit
### Issues * \#1 \[bug\] Unable to mount S3 due to 'item_not_found' exception * \#2 Require bucket name for S3 mounts * \#3 \[bug\] File size is not being updated in S3 mount * \#4 Upgrade to libfuse-3.x.x * \#5 Switch to renterd for Sia support * \#6 Switch to cpp-httplib to further reduce dependencies * \#7 Remove global_data and calculate used disk space per provider * \#8 Switch to libcurl for S3 mount support ### Changes from v1.x.x * Added read-only encrypt provider * Pass-through mount point that transparently encrypts source data using `XChaCha20-Poly1305` * Added S3 encryption support via `XChaCha20-Poly1305` * Added replay protection to remote mounts * Added support base64 writes in remote FUSE * Created static linked Linux binaries for `amd64` and `aarch64` using `musl-libc` * Removed legacy Sia renter support * Removed Skynet support * Fixed multiple remote mount WinFSP API issues on \*NIX servers * Implemented chunked read and write * Writes for non-cached files are performed in chunks of 8Mib * Removed `repertory-ui` support * Removed `FreeBSD` support * Switched to `libsodium` over `CryptoPP` * Switched to `XChaCha20-Poly1305` for remote mounts * Updated `GoogleTest` to v1.14.0 * Updated `JSON for Modern C++` to v3.11.2 * Updated `OpenSSL` to v1.1.1w * Updated `RocksDB` to v8.5.3 * Updated `WinFSP` to 2023 * Updated `boost` to v1.78.0 * Updated `cURL` to v8.3.0 * Updated `zlib` to v1.3 * Use `upload_manager` for all providers * Adds a delay to uploads to prevent excessive API calls * Supports re-upload after mount restart for incomplete uploads * NOTE: Uploads for all providers are full file (no resume support) * Multipart upload support is planned for S3 Reviewed-on: #9
80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
#include "writer_string.hpp"
|
|
|
|
#include "test.hpp"
|
|
|
|
static bool test_narrow(const std::string& result, const char* expected, size_t length)
|
|
{
|
|
// check result
|
|
if (result != std::string(expected, expected + length)) return false;
|
|
|
|
// check comparison operator (incorrect implementation can theoretically early-out on zero terminators...)
|
|
if (length > 0 && result == std::string(expected, expected + length - 1) + "?") return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
void xml_writer_string::write(const void* data, size_t size)
|
|
{
|
|
contents.append(static_cast<const char*>(data), size);
|
|
}
|
|
|
|
std::string xml_writer_string::as_narrow() const
|
|
{
|
|
return contents;
|
|
}
|
|
|
|
std::basic_string<wchar_t> xml_writer_string::as_wide() const
|
|
{
|
|
CHECK(contents.size() % sizeof(wchar_t) == 0);
|
|
|
|
// round-trip pointer through void* to avoid pointer alignment warnings; contents data should be heap allocated => safe to cast
|
|
return std::basic_string<wchar_t>(static_cast<const wchar_t*>(static_cast<const void*>(contents.data())), contents.size() / sizeof(wchar_t));
|
|
}
|
|
|
|
std::basic_string<pugi::char_t> xml_writer_string::as_string() const
|
|
{
|
|
#ifdef PUGIXML_WCHAR_MODE // to avoid "condition is always true" warning in BCC
|
|
CHECK(contents.size() % sizeof(pugi::char_t) == 0);
|
|
#endif
|
|
|
|
// round-trip pointer through void* to avoid pointer alignment warnings; contents data should be heap allocated => safe to cast
|
|
return std::basic_string<pugi::char_t>(static_cast<const pugi::char_t*>(static_cast<const void*>(contents.data())), contents.size() / sizeof(pugi::char_t));
|
|
}
|
|
|
|
std::string save_narrow(const pugi::xml_document& doc, unsigned int flags, pugi::xml_encoding encoding)
|
|
{
|
|
xml_writer_string writer;
|
|
|
|
doc.save(writer, STR("\t"), flags, encoding);
|
|
|
|
return writer.as_narrow();
|
|
}
|
|
|
|
bool test_save_narrow(const pugi::xml_document& doc, unsigned int flags, pugi::xml_encoding encoding, const char* expected, size_t length)
|
|
{
|
|
return test_narrow(save_narrow(doc, flags, encoding), expected, length);
|
|
}
|
|
|
|
std::string write_narrow(pugi::xml_node node, unsigned int flags, pugi::xml_encoding encoding)
|
|
{
|
|
xml_writer_string writer;
|
|
|
|
node.print(writer, STR("\t"), flags, encoding);
|
|
|
|
return writer.as_narrow();
|
|
}
|
|
|
|
bool test_write_narrow(pugi::xml_node node, unsigned int flags, pugi::xml_encoding encoding, const char* expected, size_t length)
|
|
{
|
|
return test_narrow(write_narrow(node, flags, encoding), expected, length);
|
|
}
|
|
|
|
std::basic_string<wchar_t> write_wide(pugi::xml_node node, unsigned int flags, pugi::xml_encoding encoding)
|
|
{
|
|
xml_writer_string writer;
|
|
|
|
node.print(writer, STR("\t"), flags, encoding);
|
|
|
|
return writer.as_wide();
|
|
}
|