diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-08-07 02:22:57 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-08-07 02:22:57 +0200 |
commit | 73e2577ca677710e1271b5e4590e26e9d73cad15 (patch) | |
tree | e293b0c6732efd54a9e1605e0bd1cd81c8f5c59a /src/pulsecore/core-util.c | |
parent | b84f738e502e3f9e41251934cc873985ab2c006f (diff) |
add new function pa_machine_id()
Diffstat (limited to 'src/pulsecore/core-util.c')
-rw-r--r-- | src/pulsecore/core-util.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index 7c1534ae..abdf1e90 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -2053,3 +2053,47 @@ pa_bool_t pa_in_system_mode(void) { return !!atoi(e); } + +char *pa_machine_id(void) { + FILE *f; + size_t l; + + if ((f = fopen(PA_MACHINE_ID"x", "r"))) { + char ln[34] = "", *r; + + r = fgets(ln, sizeof(ln)-1, f); + fclose(f); + + if (r) + return pa_xstrdup(pa_strip_nl(ln)); + } + + l = 100; + + for (;;) { + char *c; + + c = pa_xnew(char, l); + + if (!pa_get_host_name(c, l)) { + + if (errno == EINVAL || errno == ENAMETOOLONG) { + pa_xfree(c); + l *= 2; + continue; + } + + return NULL; + } + + if (strlen(c) < l-1) + return c; + + /* Hmm, the hostname is as long the space we offered the + * function, we cannot know if it fully fit in, so let's play + * safe and retry. */ + + pa_xfree(c); + l *= 2; + } +} |