# HG changeset patch # User Paul Aurich # Date 1311138277 0 # Node ID 9526ffc3a9f54c88bc26127c396d90552fd4a875 # Parent 9821c19360b8603a63ac1832d958204cc8520669 dnssrv: Refactor to reduce code duplication diff -r 9821c19360b8 -r 9526ffc3a9f5 libpurple/dnssrv.c --- a/libpurple/dnssrv.c Tue Jul 19 20:07:25 2011 +0000 +++ b/libpurple/dnssrv.c Wed Jul 20 05:04:37 2011 +0000 @@ -250,6 +250,52 @@ return list; } +static PurpleSrvTxtQueryData * +query_data_new(int type, gchar *query, gpointer extradata) +{ + PurpleSrvTxtQueryData *query_data = g_new0(PurpleSrvTxtQueryData, 1); + query_data->type = type; + query_data->extradata = extradata; + query_data->query = query; +#ifndef _WIN32 + query_data->fd_in = -1; + query_data->fd_out = -1; +#endif + return query_data; +} + +void +purple_srv_txt_query_destroy(PurpleSrvTxtQueryData *query_data) +{ + PurpleSrvTxtQueryUiOps *ops = purple_srv_txt_query_get_ui_ops(); + + if (ops && ops->destroy) + ops->destroy(query_data); + + if (query_data->handle > 0) + purple_input_remove(query_data->handle); +#ifdef _WIN32 + if (query_data->resolver != NULL) + { + /* + * It's not really possible to kill a thread. So instead we + * just set the callback to NULL and let the DNS lookup + * finish. + */ + query_data->cb.srv = NULL; + return; + } + g_free(query_data->error_message); +#else + if (query_data->fd_out != -1) + close(query_data->fd_out); + if (query_data->fd_in != -1) + close(query_data->fd_in); +#endif + g_free(query_data->query); + g_free(query_data); +} + #ifdef USE_IDN static gboolean dns_str_is_ascii(const char *name) @@ -731,15 +777,8 @@ query); g_free(hostname); - query_data = g_new0(PurpleSrvTxtQueryData, 1); - query_data->type = PurpleDnsTypeSrv; + query_data = query_data_new(PurpleDnsTypeSrv, extradata, query); query_data->cb.srv = cb; - query_data->extradata = extradata; - query_data->query = query; -#ifndef _WIN32 - query_data->fd_in = -1; - query_data->fd_out = -1; -#endif if (purple_srv_txt_query_ui_resolve(query_data)) { @@ -868,15 +907,8 @@ query); g_free(hostname); - query_data = g_new0(PurpleSrvTxtQueryData, 1); - query_data->type = PurpleDnsTypeTxt; + query_data = query_data_new(PurpleDnsTypeTxt, query, extradata); query_data->cb.txt = cb; - query_data->extradata = extradata; - query_data->query = query; -#ifndef _WIN32 - query_data->fd_in = -1; - query_data->fd_out = -1; -#endif if (purple_srv_txt_query_ui_resolve(query_data)) { /* query intentionally not freed @@ -959,38 +991,6 @@ } void -purple_srv_txt_query_destroy(PurpleSrvTxtQueryData *query_data) -{ - PurpleSrvTxtQueryUiOps *ops = purple_srv_txt_query_get_ui_ops(); - - if (ops && ops->destroy) - ops->destroy(query_data); - - if (query_data->handle > 0) - purple_input_remove(query_data->handle); -#ifdef _WIN32 - if (query_data->resolver != NULL) - { - /* - * It's not really possible to kill a thread. So instead we - * just set the callback to NULL and let the DNS lookup - * finish. - */ - query_data->cb.srv = NULL; - return; - } - g_free(query_data->error_message); -#else - if (query_data->fd_out != -1) - close(query_data->fd_out); - if (query_data->fd_in != -1) - close(query_data->fd_in); -#endif - g_free(query_data->query); - g_free(query_data); -} - -void purple_txt_cancel(PurpleSrvTxtQueryData *query_data) { purple_srv_txt_query_destroy(query_data);