diff options
author | Alexander Larsson <alexl@redhat.com> | 2012-04-20 10:23:34 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2012-04-20 10:23:34 +0200 |
commit | 39b3263a885bfdb513f5487775426d399e94a753 (patch) | |
tree | 2849c29bd5423ba46ab1130d5a15976f9df533f7 | |
parent | 4cbfa9d2207000796106a335ddadd68408466043 (diff) | |
download | glib-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.c | 42 |
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 } /* ---------------------------------------------------------------------------------------------------- */ |