aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/base64/base64.h
diff options
context:
space:
mode:
authorconterouz <conterouz@yandex-team.com>2022-12-16 10:04:06 +0300
committerconterouz <conterouz@yandex-team.com>2022-12-16 10:04:06 +0300
commit64fdfff412a1c555a909da6fd654cba5628e61e8 (patch)
tree93f211a4cfb841fef1595737a37233d9860c09a0 /library/cpp/string_utils/base64/base64.h
parentfa371e5210e9cdda3fd6fc33af87a2458b69ab84 (diff)
downloadydb-64fdfff412a1c555a909da6fd654cba5628e61e8.tar.gz
Добавил в библиотеку метод для создания Base64 строки url-friendly
Diffstat (limited to 'library/cpp/string_utils/base64/base64.h')
-rw-r--r--library/cpp/string_utils/base64/base64.h32
1 files changed, 26 insertions, 6 deletions
diff --git a/library/cpp/string_utils/base64/base64.h b/library/cpp/string_utils/base64/base64.h
index f778a6425a..3823fc1b8d 100644
--- a/library/cpp/string_utils/base64/base64.h
+++ b/library/cpp/string_utils/base64/base64.h
@@ -24,7 +24,7 @@ constexpr size_t Base64DecodeBufSize(const size_t len) noexcept {
size_t Base64Decode(void* dst, const char* b, const char* e);
inline TStringBuf Base64Decode(const TStringBuf src, void* dst) {
- return TStringBuf((const char*)dst, Base64Decode(dst, src.begin(), src.end()));
+ return TStringBuf(static_cast<const char*>(dst), Base64Decode(dst, src.begin(), src.end()));
}
inline void Base64Decode(const TStringBuf src, TString& dst) {
@@ -64,7 +64,7 @@ size_t Base64StrictDecode(void* dst, const char* b, const char* e);
/// @return Returns dst wrapped into TStringBuf.
///
inline TStringBuf Base64StrictDecode(const TStringBuf src, void* dst) {
- return TStringBuf((const char*)dst, Base64StrictDecode(dst, src.begin(), src.end()));
+ return TStringBuf(static_cast<const char*>(dst), Base64StrictDecode(dst, src.begin(), src.end()));
}
///
@@ -90,6 +90,7 @@ inline TString Base64StrictDecode(const TStringBuf src) {
/// Works with strings which length is not divisible by 4.
TString Base64DecodeUneven(const TStringBuf s);
+size_t Base64DecodeUneven(void* dst, const TStringBuf s);
//encode
constexpr size_t Base64EncodeBufSize(const size_t len) noexcept {
@@ -99,12 +100,26 @@ constexpr size_t Base64EncodeBufSize(const size_t len) noexcept {
char* Base64Encode(char* outstr, const unsigned char* instr, size_t len);
char* Base64EncodeUrl(char* outstr, const unsigned char* instr, size_t len);
-inline TStringBuf Base64Encode(const TStringBuf src, void* tmp) {
- return TStringBuf((const char*)tmp, Base64Encode((char*)tmp, (const unsigned char*)src.data(), src.size()));
+/// Make base64 string which stay unchaged after applying 'urlencode' function
+/// as it doesn't contain character, which cannot be used in urls
+/// @param outstr a pointer to allocated memory for writing result.
+/// @param instr a to buffer to encode
+/// @param len size of instr buffer
+///
+/// @return Returns pointer to last symbol in outstr buffer.
+///
+char* Base64EncodeUrlNoPadding(char* outstr, const unsigned char* instr, size_t len);
+
+inline TStringBuf Base64Encode(const TStringBuf src, void* output) {
+ return TStringBuf(static_cast<const char*>(output), Base64Encode(static_cast<char*>(output), reinterpret_cast<const unsigned char*>(src.data()), src.size()));
+}
+
+inline TStringBuf Base64EncodeUrl(const TStringBuf src, void* output) {
+ return TStringBuf(static_cast<const char*>(output), Base64EncodeUrl(static_cast<char*>(output), reinterpret_cast<const unsigned char*>(src.data()), src.size()));
}
-inline TStringBuf Base64EncodeUrl(const TStringBuf src, void* tmp) {
- return TStringBuf((const char*)tmp, Base64EncodeUrl((char*)tmp, (const unsigned char*)src.data(), src.size()));
+inline TStringBuf Base64EncodeUrlNoPadding(const TStringBuf src, void* output) {
+ return TStringBuf(static_cast<const char*>(output), Base64EncodeUrlNoPadding(static_cast<char*>(output), reinterpret_cast<const unsigned char*>(src.data()), src.size()));
}
inline void Base64Encode(const TStringBuf src, TString& dst) {
@@ -117,6 +132,11 @@ inline void Base64EncodeUrl(const TStringBuf src, TString& dst) {
dst.resize(Base64EncodeUrl(src, dst.begin()).size());
}
+inline void Base64EncodeUrlNoPadding(const TStringBuf src, TString& dst) {
+ dst.ReserveAndResize(Base64EncodeBufSize(src.size()));
+ dst.resize(Base64EncodeUrlNoPadding(src, dst.begin()).size());
+}
+
inline TString Base64Encode(const TStringBuf s) {
TString ret;
Base64Encode(s, ret);