summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/pulsecore/core-util.c44
-rw-r--r--src/pulsecore/core-util.h2
3 files changed, 47 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index ec998312..29a6ef47 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -57,6 +57,7 @@ AM_CFLAGS += -DPA_SYSTEM_CONFIG_PATH=\"$(PA_SYSTEM_CONFIG_PATH)\"
AM_CFLAGS += -DPA_SYSTEM_STATE_PATH=\"$(PA_SYSTEM_STATE_PATH)\"
AM_CFLAGS += -DAO_REQUIRE_CAS
AM_CFLAGS += -DPULSE_LOCALEDIR=\"$(pulselocaledir)\"
+AM_CFLAGS += -DPA_MACHINE_ID=\"$(localstatedir)/lib/dbus/machine-id\"
# This cool debug trap works on i386/gcc only
AM_CFLAGS += '-DDEBUG_TRAP=__asm__("int $$3")'
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;
+ }
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 2ed81fc5..b0c07588 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -184,4 +184,6 @@ pa_bool_t pa_in_system_mode(void);
#define pa_streq(a,b) (!strcmp((a),(b)))
+char *pa_machine_id(void);
+
#endif