| 447 | } |
| 448 | |
| 449 | bool prefix_matches(const std::string &prefix, const std::string &key, std::string *tail) |
| 450 | { |
| 451 | size_t ksize = key.size(); |
| 452 | size_t psize = prefix.size(); |
| 453 | if (ksize < psize || memcmp(prefix.data(), key.data(), psize) != 0) |
| 454 | return false; |
| 455 | if (tail) |
| 456 | tail->clear(); |
| 457 | if (ksize == psize) |
| 458 | return true; |
| 459 | if (psize == 0 || prefix[psize-1] == '/') |
| 460 | { |
| 461 | if (tail) *tail = key.substr(psize); |
| 462 | return true; |
| 463 | } |
| 464 | if (key[psize] == '/') |
| 465 | { |
| 466 | if (tail) *tail = key.substr(psize+1); |
| 467 | return true; |
| 468 | } |
| 469 | return false; |
| 470 | } |
| 471 | |
| 472 | #ifdef LINUX_BUILD // Linux |
| 473 | uint64_t GetTimeMs64() |
no test coverage detected