summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2012-04-20 10:23:34 +0200
committerAlexander Larsson <alexl@redhat.com>2012-04-20 10:23:34 +0200
commit39b3263a885bfdb513f5487775426d399e94a753 (patch)
tree2849c29bd5423ba46ab1130d5a15976f9df533f7
parent4cbfa9d2207000796106a335ddadd68408466043 (diff)
downloadglib-gdbus-daemon2.tar.gz
win32: Implement _g_dbus_get_machine_id using machine guidgdbus-daemon2
This is what libdbus uses, so we're compatible.
-rw-r--r--gio/gdbusprivate.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/gio/gdbusprivate.c b/gio/gdbusprivate.c
index 4b31fa77f..9b09294c5 100644
--- a/gio/gdbusprivate.c
+++ b/gio/gdbusprivate.c
@@ -2048,6 +2048,47 @@ out:
gchar *
_g_dbus_get_machine_id (GError **error)
{
+#ifdef G_OS_WIN32
+ HW_PROFILE_INFOA info;
+ char *src, *dest, *res;
+ int i;
+
+ if (!GetCurrentHwProfileA (&info))
+ {
+ char *message = g_win32_error_message (GetLastError ());
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_FAILED,
+ _("Unable to get Hardware profile: %s"), message);
+ g_free (message);
+ return NULL;
+ }
+
+ /* Form: {12340001-4980-1920-6788-123456789012} */
+ src = &info.szHwProfileGuid[0];
+
+ res = g_malloc (32+1);
+ dest = res;
+
+ src++; /* Skip { */
+ for (i = 0; i < 8; i++)
+ *dest++ = *src++;
+ src++; /* Skip - */
+ for (i = 0; i < 4; i++)
+ *dest++ = *src++;
+ src++; /* Skip - */
+ for (i = 0; i < 4; i++)
+ *dest++ = *src++;
+ src++; /* Skip - */
+ for (i = 0; i < 4; i++)
+ *dest++ = *src++;
+ src++; /* Skip - */
+ for (i = 0; i < 12; i++)
+ *dest++ = *src++;
+ *dest = 0;
+
+ return res;
+#else
gchar *ret;
GError *first_error;
/* TODO: use PACKAGE_LOCALSTATEDIR ? */
@@ -2073,6 +2114,7 @@ _g_dbus_get_machine_id (GError **error)
g_strstrip (ret);
}
return ret;
+#endif
}
/* ---------------------------------------------------------------------------------------------------- */