struct server_id server_id_from_string(uint32_t local_vnn,
const char *pid_string)
+{
+ return server_id_from_string_ex(local_vnn, '/', pid_string);
+}
+
+struct server_id server_id_from_string_ex(uint32_t local_vnn,
+ char unique_delimiter,
+ const char *pid_string)
{
struct server_id templ = {
.vnn = NONCLUSTER_VNN, .pid = UINT64_MAX
};
struct server_id result;
+ char unique_delimiter_found = '\0';
int ret;
/*
*/
result = templ;
- ret = sscanf(pid_string, "%"SCNu32":%"SCNu64".%"SCNu32"/%"SCNu64,
+ ret = sscanf(pid_string, "%"SCNu32":%"SCNu64".%"SCNu32"%c%"SCNu64,
&result.vnn, &result.pid, &result.task_id,
- &result.unique_id);
- if (ret == 4) {
+ &unique_delimiter_found, &result.unique_id);
+ if (ret == 5 && unique_delimiter_found == unique_delimiter) {
return result;
}
}
result = templ;
- ret = sscanf(pid_string, "%"SCNu32":%"SCNu64"/%"SCNu64,
- &result.vnn, &result.pid, &result.unique_id);
- if (ret == 3) {
+ ret = sscanf(pid_string, "%"SCNu32":%"SCNu64"%c%"SCNu64,
+ &result.vnn, &result.pid,
+ &unique_delimiter_found, &result.unique_id);
+ if (ret == 4 && unique_delimiter_found == unique_delimiter) {
return result;
}
}
result = templ;
- ret = sscanf(pid_string, "%"SCNu64".%"SCNu32"/%"SCNu64,
- &result.pid, &result.task_id, &result.unique_id);
- if (ret == 3) {
+ ret = sscanf(pid_string, "%"SCNu64".%"SCNu32"%c%"SCNu64,
+ &result.pid, &result.task_id,
+ &unique_delimiter_found, &result.unique_id);
+ if (ret == 4 && unique_delimiter_found == unique_delimiter) {
result.vnn = local_vnn;
return result;
}
}
result = templ;
- ret = sscanf(pid_string, "%"SCNu64"/%"SCNu64,
- &result.pid, &result.unique_id);
- if (ret == 2) {
+ ret = sscanf(pid_string, "%"SCNu64"%c%"SCNu64,
+ &result.pid, &unique_delimiter_found, &result.unique_id);
+ if (ret == 3 && unique_delimiter_found == unique_delimiter) {
result.vnn = local_vnn;
return result;
}