| 150 | |
| 151 | |
| 152 | std::string BinaryNinja::Unicode::ToEscapedString( |
| 153 | const std::vector<std::vector<std::pair<uint32_t, uint32_t>>>& unicodeBlocks, |
| 154 | bool utf8Enabled, |
| 155 | const void* data, |
| 156 | const size_t dataLen |
| 157 | ) |
| 158 | { |
| 159 | std::vector<std::vector<uint32_t>> starts; |
| 160 | std::vector<std::vector<uint32_t>> ends; |
| 161 | |
| 162 | for (size_t i = 0; i < unicodeBlocks.size(); i ++) |
| 163 | { |
| 164 | std::vector<uint32_t> blockStarts; |
| 165 | std::vector<uint32_t> blockEnds; |
| 166 | for (size_t j = 0; j < unicodeBlocks[i].size(); j ++) |
| 167 | { |
| 168 | blockStarts.push_back(unicodeBlocks[i][j].first); |
| 169 | blockEnds.push_back(unicodeBlocks[i][j].second); |
| 170 | } |
| 171 | starts.push_back(blockStarts); |
| 172 | ends.push_back(blockEnds); |
| 173 | } |
| 174 | |
| 175 | std::vector<uint32_t*> startPtrs; |
| 176 | std::vector<uint32_t*> endPtrs; |
| 177 | std::vector<size_t> counts; |
| 178 | for (size_t i = 0; i < unicodeBlocks.size(); i ++) |
| 179 | { |
| 180 | startPtrs.push_back(starts[i].data()); |
| 181 | endPtrs.push_back(ends[i].data()); |
| 182 | counts.push_back(starts[i].size()); |
| 183 | } |
| 184 | |
| 185 | char* value = BNUnicodeToEscapedString(startPtrs.data(), endPtrs.data(), counts.data(), unicodeBlocks.size(), utf8Enabled, data, dataLen); |
| 186 | std::string result(value); |
| 187 | BNFreeString(value); |
| 188 | return result; |
| 189 | } |
| 190 |
no test coverage detected