1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

lib/util: add server_id_from_string()

metze
This commit is contained in:
Stefan Metzmacher 2012-08-17 12:47:57 +02:00
parent 6a58c5fc64
commit d4a0aeb49a
2 changed files with 38 additions and 0 deletions

View File

@ -901,5 +901,7 @@ const char *shlib_ext(void);
struct server_id;
bool server_id_equal(const struct server_id *p1, const struct server_id *p2);
char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id);
struct server_id server_id_from_string(uint32_t local_vnn,
const char *pid_string);
#endif /* _SAMBA_UTIL_H_ */

View File

@ -60,3 +60,39 @@ char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id)
(unsigned)id->task_id);
}
}
struct server_id server_id_from_string(uint32_t local_vnn,
const char *pid_string)
{
struct server_id result;
unsigned long long pid;
unsigned int vnn, task_id = 0;
ZERO_STRUCT(result);
/*
* We accept various forms with 1, 2 or 3 component forms
* because the server_id_str() can print different forms, and
* we want backwards compatibility for scripts that may call
* smbclient.
*/
if (sscanf(pid_string, "%u:%llu.%u", &vnn, &pid, &task_id) == 3) {
result.vnn = vnn;
result.pid = pid;
result.task_id = task_id;
} else if (sscanf(pid_string, "%u:%llu", &vnn, &pid) == 2) {
result.vnn = vnn;
result.pid = pid;
} else if (sscanf(pid_string, "%llu.%u", &pid, &task_id) == 2) {
result.vnn = local_vnn;
result.pid = pid;
result.task_id = task_id;
} else if (sscanf(pid_string, "%llu", &pid) == 1) {
result.vnn = local_vnn;
result.pid = pid;
} else {
result.vnn = NONCLUSTER_VNN;
result.pid = UINT64_MAX;
}
return result;
}