/pidgin/main: 5749c9ff9c82: Add cross-platform duplicate_fd() fu...
Mike Ruprecht <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 5749c9ff9c82e55b6c03a28cbf81c989ea772b24 Author: Mike Ruprecht <[email protected]> Date: 2016-01-10 02:26 -0600 Branch: purple-proxy-to-gio URL: https://hg.pidgin.im/pidgin/main/rev/5749c9ff9c82 Description: Add cross-platform duplicate_fd() function to support Gio-ifying proxy.c Since proxy_connect_* functions ultimately only return an fd and don't keep any object data around until closing the socket, the fd created with Gio functions must be duplicated so that freeing the Gio objects, doesn't cause the fds to close before the calling code is finished with them. This function was grabbed from GLib's Gio testcases for GSocket (gio/tests/socket.c). It can be removed once the libpurple proxy API is ported to a Gio style (if the proxy connect functions will even still need to exist). diffstat: libpurple/proxy.c | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-) diffs (37 lines): diff --git a/libpurple/proxy.c b/libpurple/proxy.c --- a/libpurple/proxy.c +++ b/libpurple/proxy.c @@ -2330,6 +2330,33 @@ purple_proxy_get_setup(PurpleAccount *ac return gpi; } +/* Grabbed duplicate_fd() from GLib's testcases (gio/tests/socket.c). + * Can be dropped once this API has been converted to Gio. + */ +static int +duplicate_fd (int fd) +{ +#ifdef G_OS_WIN32 + HANDLE newfd; + + if (!DuplicateHandle (GetCurrentProcess (), + (HANDLE)fd, + GetCurrentProcess (), + &newfd, + 0, + FALSE, + DUPLICATE_SAME_ACCESS)) + { + return -1; + } + + return (int)newfd; +#else + return dup (fd); +#endif +} +/* End function grabbed from GLib */ + PurpleProxyConnectData * purple_proxy_connect(void *handle, PurpleAccount *account, const char *host, int port, _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits