return false;
}
- if (strlen(id) % 2 != 0) {
+ size_t id_len = strlen(id);
+ bool with_colons = (id_len > 3 && id[2] == ':'); // p11tool format XX:XX:XX:<..>:XX
+ if ((id_len - (with_colons ? id_len / 3 : 0)) % 2 != 0) {
return false;
}
for (int i = 0; id[i] != '\0'; i++) {
+ if (with_colons && i > 0 && i < id_len - 1 && i % 3 == 2 && id[i] == ':') {
+ continue;
+ }
if (!is_xdigit(id[i])) {
return false;
}
return;
}
+ size_t j = 0;
for (size_t i = 0; id[i] != '\0'; i++) {
+ if (id[i] == ':') {
+ assert(i % 3 == 2);
+ continue;
+ }
assert(id[i] != '\0' && is_xdigit(id[i]));
- id[i] = knot_tolower(id[i]);
+ id[j++] = knot_tolower(id[i]);
}
+ id[j] = '\0';
}
_public_