Rename purple-gio.[ch] to purplegio.[ch] to match the other files
Testing Done:
Compiled
Reviewed at https://reviews.imfreedom.org/r/1750/
--- a/libpurple/meson.build Mon Sep 12 21:04:13 2022 -0500
+++ b/libpurple/meson.build Mon Sep 12 21:10:57 2022 -0500
@@ -35,7 +35,6 @@
'purpleaccountmanager.c',
'purpleaccountpresence.c',
@@ -54,6 +53,7 @@
'purplecredentialprovider.c',
'purplehistoryadapter.c',
'purplehistorymanager.c',
@@ -138,7 +138,6 @@
'purpleaccountmanager.h',
'purpleaccountpresence.h',
@@ -156,6 +155,7 @@
'purplecredentialprovider.h',
'purplehistoryadapter.h',
'purplehistorymanager.h',
--- a/libpurple/proxy.c Mon Sep 12 21:04:13 2022 -0500
+++ b/libpurple/proxy.c Mon Sep 12 21:10:57 2022 -0500
@@ -27,7 +27,7 @@
--- a/libpurple/purple-gio.c Mon Sep 12 21:04:13 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
-graceful_close_cb(gpointer user_data)
- GracefulCloseData *data = user_data;
- if (g_input_stream_has_pending(data->input) ||
- g_output_stream_has_pending(data->output)) {
- /* Has pending operations. Not ready to close yet.
- return G_SOURCE_CONTINUE;
- /* Finally can gracefully close */
- /* Close input stream, from wrapper or GIOStream */
- if (!g_input_stream_close(data->input, NULL, &error)) {
- if (error->code != G_IO_ERROR_CANCELLED) {
- purple_debug_warning("gio", "Error closing input stream: %s",
- g_clear_object(&data->input);
- /* Close output stream, from wrapper or GIOStream */
- if (!g_output_stream_close(data->output, NULL, &error)) {
- if (error->code != G_IO_ERROR_CANCELLED) {
- purple_debug_warning("gio", "Error closing output stream: %s",
- g_clear_object(&data->output);
- if (!g_io_stream_close(data->stream, NULL, &error)) {
- if (error->code != G_IO_ERROR_CANCELLED) {
- purple_debug_warning("gio", "Error closing stream: %s",
- g_clear_object(&data->stream);
- return G_SOURCE_REMOVE;
-purple_gio_graceful_close(GIOStream *stream,
- GInputStream *input, GOutputStream *output)
- GracefulCloseData *data;
- g_return_if_fail(G_IS_IO_STREAM(stream));
- g_return_if_fail(input == NULL || G_IS_INPUT_STREAM(input));
- g_return_if_fail(output == NULL || G_IS_OUTPUT_STREAM(output));
- data = g_new(GracefulCloseData, 1);
- data->stream = g_object_ref(stream);
- input = g_io_stream_get_input_stream(stream);
- data->input = g_object_ref(input);
- output = g_io_stream_get_output_stream(stream);
- data->output = g_object_ref(output);
- /* Try gracefully closing the stream synchronously */
- if (graceful_close_cb(data) == G_SOURCE_CONTINUE) {
- /* Has pending operations. Do so asynchronously */
- g_idle_add(graceful_close_cb, data);
-purple_gio_socket_client_new(PurpleAccount *account, GError **error)
- GProxyResolver *resolver;
- resolver = purple_proxy_get_proxy_resolver(account, error);
- if (resolver == NULL) {
- client = g_socket_client_new();
- g_socket_client_set_proxy_resolver(client, resolver);
- g_object_unref(resolver);
-purple_socket_listener_add_any_inet_port(GSocketListener *listener,
- GObject *source_object, GError **error)
- GError *internal_error = NULL;
- guint16 port, start, end;
- if (!purple_prefs_get_bool("/purple/network/ports_range_use")) {
- return g_socket_listener_add_any_inet_port(listener, source_object,
- start = purple_prefs_get_int("/purple/network/ports_range_start");
- end = purple_prefs_get_int("/purple/network/ports_range_end");
- for (port = start; port <= end; port++) {
- if (g_socket_listener_add_inet_port(listener, port, source_object,
- } else if (port != end) {
- g_error_free(internal_error);
- g_propagate_error(error, internal_error);
--- a/libpurple/purple-gio.h Mon Sep 12 21:04:13 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
-#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
-# error "only <purple.h> may be included directly"
- * The Purple Gio API provides helper functions for Gio operations which
- * are commonly used within libpurple and its consumers. These contain
- * such functions as setting up connections and shutting them down
- * purple_gio_graceful_close:
- * @stream: A #GIOStream to close
- * @input: (nullable): A #GInputStream which wraps @stream's input stream
- * @output: (nullable): A #GOutputStream which wraps @stream's output stream
- * Closes @input, @output, @stream. If there are pending operations, it
- * asynchronously waits for the operations to finish before closing the
- * arguments. Ensure the Gio callbacks can safely handle this being done
-purple_gio_graceful_close(GIOStream *stream,
- GInputStream *input, GOutputStream *output);
- * purple_gio_socket_client_new:
- * @account: The #PurpleAccount to use for this connection
- * @error: Return location for a GError, or NULL
- * A helper function to simplify creating a #GSocketClient. It's intended
- * to be used in protocol plugins.
- * Returns: (transfer full): A new #GSocketClient with the appropriate
- * GProxyResolver, based on the #PurpleAccount settings and
- * TLS Certificate handling, or NULL if an error occurred.
-purple_gio_socket_client_new(PurpleAccount *account, GError **error);
- * purple_socket_listener_add_any_inet_port:
- * @listener: A #GSocketListener.
- * @source_object: (nullable): Optional GObject identifying this source.
- * @error: A #GError location to store the error occurring, or %NULL to ignore.
- * Listens for TCP connections on any available port number for both IPv6 and
- * IPv4 (if each is available). This is a simple wrapper around
- * g_socket_listener_add_any_inet_port(), except if the user specified a port
- * range in the settings, than a port will be chosen from that range.
- * Returns: The port number, or 0 in case of failure.
-guint16 purple_socket_listener_add_any_inet_port(GSocketListener *listener,
- GObject *source_object,
-#endif /* PURPLE_GIO_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplegio.c Mon Sep 12 21:10:57 2022 -0500
@@ -0,0 +1,162 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +graceful_close_cb(gpointer user_data) + GracefulCloseData *data = user_data; + if (g_input_stream_has_pending(data->input) || + g_output_stream_has_pending(data->output)) { + /* Has pending operations. Not ready to close yet. + return G_SOURCE_CONTINUE; + /* Finally can gracefully close */ + /* Close input stream, from wrapper or GIOStream */ + if (!g_input_stream_close(data->input, NULL, &error)) { + if (error->code != G_IO_ERROR_CANCELLED) { + purple_debug_warning("gio", "Error closing input stream: %s", + g_clear_object(&data->input); + /* Close output stream, from wrapper or GIOStream */ + if (!g_output_stream_close(data->output, NULL, &error)) { + if (error->code != G_IO_ERROR_CANCELLED) { + purple_debug_warning("gio", "Error closing output stream: %s", + g_clear_object(&data->output); + if (!g_io_stream_close(data->stream, NULL, &error)) { + if (error->code != G_IO_ERROR_CANCELLED) { + purple_debug_warning("gio", "Error closing stream: %s", + g_clear_object(&data->stream); + return G_SOURCE_REMOVE; +purple_gio_graceful_close(GIOStream *stream, + GInputStream *input, GOutputStream *output) + GracefulCloseData *data; + g_return_if_fail(G_IS_IO_STREAM(stream)); + g_return_if_fail(input == NULL || G_IS_INPUT_STREAM(input)); + g_return_if_fail(output == NULL || G_IS_OUTPUT_STREAM(output)); + data = g_new(GracefulCloseData, 1); + data->stream = g_object_ref(stream); + input = g_io_stream_get_input_stream(stream); + data->input = g_object_ref(input); + output = g_io_stream_get_output_stream(stream); + data->output = g_object_ref(output); + /* Try gracefully closing the stream synchronously */ + if (graceful_close_cb(data) == G_SOURCE_CONTINUE) { + /* Has pending operations. Do so asynchronously */ + g_idle_add(graceful_close_cb, data); +purple_gio_socket_client_new(PurpleAccount *account, GError **error) + GProxyResolver *resolver; + resolver = purple_proxy_get_proxy_resolver(account, error); + if (resolver == NULL) { + client = g_socket_client_new(); + g_socket_client_set_proxy_resolver(client, resolver); + g_object_unref(resolver); +purple_socket_listener_add_any_inet_port(GSocketListener *listener, + GObject *source_object, GError **error) + GError *internal_error = NULL; + guint16 port, start, end; + if (!purple_prefs_get_bool("/purple/network/ports_range_use")) { + return g_socket_listener_add_any_inet_port(listener, source_object, + start = purple_prefs_get_int("/purple/network/ports_range_start"); + end = purple_prefs_get_int("/purple/network/ports_range_end"); + for (port = start; port <= end; port++) { + if (g_socket_listener_add_inet_port(listener, port, source_object, + } else if (port != end) { + g_error_free(internal_error); + g_propagate_error(error, internal_error); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplegio.h Mon Sep 12 21:10:57 2022 -0500
@@ -0,0 +1,95 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) +# error "only <purple.h> may be included directly" + * The Purple Gio API provides helper functions for Gio operations which + * are commonly used within libpurple and its consumers. These contain + * such functions as setting up connections and shutting them down + * purple_gio_graceful_close: + * @stream: A #GIOStream to close + * @input: (nullable): A #GInputStream which wraps @stream's input stream + * @output: (nullable): A #GOutputStream which wraps @stream's output stream + * Closes @input, @output, @stream. If there are pending operations, it + * asynchronously waits for the operations to finish before closing the + * arguments. Ensure the Gio callbacks can safely handle this being done +purple_gio_graceful_close(GIOStream *stream, + GInputStream *input, GOutputStream *output); + * purple_gio_socket_client_new: + * @account: The #PurpleAccount to use for this connection + * @error: Return location for a GError, or NULL + * A helper function to simplify creating a #GSocketClient. It's intended + * to be used in protocol plugins. + * Returns: (transfer full): A new #GSocketClient with the appropriate + * GProxyResolver, based on the #PurpleAccount settings and + * TLS Certificate handling, or NULL if an error occurred. +purple_gio_socket_client_new(PurpleAccount *account, GError **error); + * purple_socket_listener_add_any_inet_port: + * @listener: A #GSocketListener. + * @source_object: (nullable): Optional GObject identifying this source. + * @error: A #GError location to store the error occurring, or %NULL to ignore. + * Listens for TCP connections on any available port number for both IPv6 and + * IPv4 (if each is available). This is a simple wrapper around + * g_socket_listener_add_any_inet_port(), except if the user specified a port + * range in the settings, than a port will be chosen from that range. + * Returns: The port number, or 0 in case of failure. +guint16 purple_socket_listener_add_any_inet_port(GSocketListener *listener, + GObject *source_object, +#endif /* PURPLE_GIO_H */ --- a/libpurple/upnp.c Mon Sep 12 21:04:13 2022 -0500
+++ b/libpurple/upnp.c Mon Sep 12 21:10:57 2022 -0500
@@ -32,7 +32,7 @@
--- a/libpurple/xfer.c Mon Sep 12 21:04:13 2022 -0500
+++ b/libpurple/xfer.c Mon Sep 12 21:10:57 2022 -0500
@@ -34,9 +34,9 @@
#include "purpleconversationmanager.h"
--- a/po/POTFILES.in Mon Sep 12 21:04:13 2022 -0500
+++ b/po/POTFILES.in Mon Sep 12 21:10:57 2022 -0500
@@ -249,7 +249,7 @@
libpurple/purplecredentialprovider.c
libpurple/purpledebugui.c
libpurple/purplegdkpixbuf.c
libpurple/purplehistoryadapter.c
libpurple/purplehistorymanager.c