--- a/libpurple/protocols/bonjour/bonjour.c Tue Mar 09 02:47:31 2021 -0600
+++ b/libpurple/protocols/bonjour/bonjour.c Wed Mar 10 03:13:38 2021 -0600
@@ -522,16 +522,22 @@
-_set_default_name_cb(gpointer data) {
- gchar *fullname = data;
+_set_default_name_cb(G_GNUC_UNUSED GObject *source, GAsyncResult *result, + G_GNUC_UNUSED gpointer data) + gchar *fullname = NULL; - GList *tmp = my_protocol->account_options;
- PurpleAccountOption *option;
- purple_debug_info("bonjour", "Unable to look up First and Last name or Username from system; using defaults.\n");
+ fullname = g_task_propagate_pointer(G_TASK(result), &error); + if (fullname == NULL) { + purple_debug_info("bonjour", + "Unable to look up First and Last name or Username " + "from system (%s); using defaults.", + error ? error->message : "unknown reason"); g_free(default_firstname);
@@ -547,28 +553,20 @@
default_lastname = g_strdup("");
- for(; tmp != NULL; tmp = tmp->next) {
- if (purple_strequal("first", purple_account_option_get_setting(option)))
- purple_account_option_set_default_string(option, default_firstname);
- else if (purple_strequal("last", purple_account_option_get_setting(option)))
- purple_account_option_set_default_string(option, default_lastname);
-_win32_name_lookup_thread(gpointer data) {
+_win32_name_lookup_thread(GTask *task, G_GNUC_UNUSED gpointer source, + G_GNUC_UNUSED gpointer data, + G_GNUC_UNUSED GCancellable *cancellable) wchar_t username[UNLEN + 1];
DWORD dwLenUsername = UNLEN + 1;
GetUserNameW((LPWSTR) &username, &dwLenUsername);
- if (username != NULL && *username != '\0') {
+ if (*username != '\0') { LPBYTE servername = NULL;
@@ -606,9 +604,7 @@
fullname = g_utf16_to_utf8(username, -1, NULL, NULL, NULL);
- g_timeout_add(0, _set_default_name_cb, fullname);
+ g_task_return_pointer(task, fullname, g_free); @@ -618,7 +614,7 @@
- GThread *lookup_thread;
const char *fullname = NULL, *splitpoint, *tmp;
@@ -634,11 +630,9 @@
/* The Win32 username lookup functions are synchronous so we do it in a thread */
- lookup_thread = g_thread_try_new("bonjour dns thread", _win32_name_lookup_thread, NULL, NULL);
- g_thread_unref(lookup_thread);
- purple_debug_fatal("bonjour", "failed to create lookup thread\n");
+ lookup = g_task_new(my_protocol, NULL, _set_default_name_cb, NULL); + g_task_run_in_thread(lookup, _win32_name_lookup_thread); + g_object_unref(lookup); /* Make sure fullname is valid UTF-8. If not, try to convert it. */