| 86 | // -------------------------------------------------------------------------------------------------------------------- |
| 87 | |
| 88 | static inline |
| 89 | void d_getChunkFromBase64String_impl(std::vector<uint8_t>& vector, const char* const base64string) |
| 90 | { |
| 91 | vector.clear(); |
| 92 | DISTRHO_SAFE_ASSERT_RETURN(base64string != nullptr,); |
| 93 | |
| 94 | uint i=0, j=0; |
| 95 | uint charArray3[3], charArray4[4]; |
| 96 | |
| 97 | vector.reserve(std::strlen(base64string)*3/4 + 4); |
| 98 | |
| 99 | for (std::size_t l=0, len=std::strlen(base64string); l<len; ++l) |
| 100 | { |
| 101 | const char c = base64string[l]; |
| 102 | |
| 103 | if (c == '\0' || c == '=') |
| 104 | break; |
| 105 | if (c == ' ' || c == '\n') |
| 106 | continue; |
| 107 | |
| 108 | DISTRHO_SAFE_ASSERT_CONTINUE(DistrhoBase64Helpers::isBase64Char(c)); |
| 109 | |
| 110 | charArray4[i++] = static_cast<uint>(c); |
| 111 | |
| 112 | if (i == 4) |
| 113 | { |
| 114 | for (i=0; i<4; ++i) |
| 115 | charArray4[i] = DistrhoBase64Helpers::findBase64CharIndex(static_cast<char>(charArray4[i])); |
| 116 | |
| 117 | charArray3[0] = (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4); |
| 118 | charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2); |
| 119 | charArray3[2] = ((charArray4[2] & 0x3) << 6) + charArray4[3]; |
| 120 | |
| 121 | for (i=0; i<3; ++i) |
| 122 | vector.push_back(static_cast<uint8_t>(charArray3[i])); |
| 123 | |
| 124 | i = 0; |
| 125 | } |
| 126 | } |
| 127 | |
| 128 | if (i != 0) |
| 129 | { |
| 130 | for (j=0; j<i && j<4; ++j) |
| 131 | charArray4[j] = DistrhoBase64Helpers::findBase64CharIndex(static_cast<char>(charArray4[j])); |
| 132 | |
| 133 | for (j=i; j<4; ++j) |
| 134 | charArray4[j] = 0; |
| 135 | |
| 136 | charArray3[0] = (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4); |
| 137 | charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2); |
| 138 | charArray3[2] = ((charArray4[2] & 0x3) << 6) + charArray4[3]; |
| 139 | |
| 140 | for (j=0; i>0 && j<i-1; j++) |
| 141 | vector.push_back(static_cast<uint8_t>(charArray3[j])); |
| 142 | } |
| 143 | } |
| 144 | |
| 145 | static inline |
no test coverage detected