Parse a key path, being passed a split list of elements (the first element is ignored). */
| 527 | |
| 528 | /** Parse a key path, being passed a split list of elements (the first element is ignored). */ |
| 529 | bool ParseKeyPath(const std::vector<Span<const char>>& split, KeyPath& out) |
| 530 | { |
| 531 | for (size_t i = 1; i < split.size(); ++i) { |
| 532 | Span<const char> elem = split[i]; |
| 533 | bool hardened = false; |
| 534 | if (elem.size() > 0 && (elem[elem.size() - 1] == '\'' || elem[elem.size() - 1] == 'h')) { |
| 535 | elem = elem.first(elem.size() - 1); |
| 536 | hardened = true; |
| 537 | } |
| 538 | uint32_t p; |
| 539 | if (!ParseUInt32(std::string(elem.begin(), elem.end()), &p) || p > 0x7FFFFFFFUL) return false; |
| 540 | out.push_back(p | (((uint32_t)hardened) << 31)); |
| 541 | } |
| 542 | return true; |
| 543 | } |
| 544 | |
| 545 | //////////////////////////// |
| 546 |
no test coverage detected