From 9c1035ac450fd7b983ffc28192c9f587a1b5ce18 Mon Sep 17 00:00:00 2001 From: Samuel CORMIER-IIJIMA Date: Wed, 30 Jan 2008 17:08:36 -0500 Subject: [PATCH] Make to_string virtual, fix some warnings --- gnio/ginet4address.c | 29 +++++++++++++++-------------- gnio/ginet4address.h | 2 -- gnio/ginet6address.c | 33 +++++++++++++++++++++++++++------ gnio/ginet6address.h | 2 -- gnio/ginetaddress.c | 8 ++++++++ gnio/ginetaddress.h | 26 ++++++++++++++------------ gnio/gresolver.c | 2 ++ test/test-stuff.c | 10 +++++----- 8 files changed, 71 insertions(+), 41 deletions(-) diff --git a/gnio/ginet4address.c b/gnio/ginet4address.c index 7ab6361..12919b1 100644 --- a/gnio/ginet4address.c +++ b/gnio/ginet4address.c @@ -43,6 +43,18 @@ struct _GInet4AddressPrivate { } addr; }; +static gchar * +g_inet4_address_to_string (GInetAddress *address) +{ + guint8 *addr; + + g_return_val_if_fail (G_IS_INET4_ADDRESS (address), NULL); + + addr = G_INET4_ADDRESS (address)->priv->addr.u4_addr8; + + return g_strdup_printf ("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); +} + static gboolean g_inet4_address_is_any (GInetAddress *address) { @@ -156,6 +168,7 @@ g_inet4_address_class_init (GInet4AddressClass *klass) gobject_class->finalize = g_inet4_address_finalize; gobject_class->dispose = g_inet4_address_dispose; + ginetaddress_class->to_string = g_inet4_address_to_string; ginetaddress_class->is_any = g_inet4_address_is_any; ginetaddress_class->is_linklocal = g_inet4_address_is_linklocal; ginetaddress_class->is_loopback = g_inet4_address_is_loopback; @@ -202,18 +215,6 @@ g_inet4_address_from_string (const gchar *string) return g_inet4_address_from_bytes ((guint8 *) &(addr.s_addr)); } -char * -g_inet4_address_to_string (GInet4Address *address) -{ - guint8 *addr; - - g_return_val_if_fail (G_IS_INET4_ADDRESS (address), NULL); - - addr = address->priv->addr.u4_addr8; - - return g_strdup_printf ("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); -} - GInet4Address * g_inet4_address_from_bytes (guint8 bytes[]) { @@ -240,7 +241,7 @@ g_inet4_address_to_bytes (GInet4Address *address) GInet4Address * g_inet4_address_new_loopback (void) { - guint8 addr[8] = {127, 0, 0, 1}; + guint8 addr[4] = {127, 0, 0, 1}; return g_inet4_address_from_bytes (addr); } @@ -248,7 +249,7 @@ g_inet4_address_new_loopback (void) GInet4Address * g_inet4_address_new_any (void) { - guint8 addr[8] = {0, 0, 0, 0}; + guint8 addr[4] = {0, 0, 0, 0}; return g_inet4_address_from_bytes (addr); } diff --git a/gnio/ginet4address.h b/gnio/ginet4address.h index cee9812..8e2793d 100644 --- a/gnio/ginet4address.h +++ b/gnio/ginet4address.h @@ -56,8 +56,6 @@ GType g_inet4_address_get_type (void) G_GNUC_CONST; GInet4Address * g_inet4_address_from_string (const char *string); -char * g_inet4_address_to_string (GInet4Address *address); - GInet4Address * g_inet4_address_from_bytes (guint8 bytes[]); const guint8 * g_inet4_address_to_bytes (GInet4Address *address); diff --git a/gnio/ginet6address.c b/gnio/ginet6address.c index e46ff76..c8c1a39 100644 --- a/gnio/ginet6address.c +++ b/gnio/ginet6address.c @@ -25,6 +25,9 @@ #include #include +#include +#include + #include "ginet6address.h" G_DEFINE_TYPE (GInet6Address, g_inet6_address, G_TYPE_INET_ADDRESS); @@ -37,6 +40,18 @@ struct _GInet6AddressPrivate { } addr; }; +static gchar * +g_inet6_address_to_string (GInetAddress *address) +{ + gchar *addr = g_malloc (48); + + g_return_val_if_fail (G_IS_INET6_ADDRESS (address), NULL); + + inet_ntop (AF_INET6, G_INET6_ADDRESS (address)->priv->addr.u6_addr8, addr, 48); + + return addr; +} + static void g_inet6_address_finalize (GObject *object) { @@ -59,11 +74,23 @@ static void g_inet6_address_class_init (GInet6AddressClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GInetAddressClass *ginetaddress_class = G_INET_ADDRESS_CLASS (klass); g_type_class_add_private (klass, sizeof (GInet6AddressPrivate)); gobject_class->finalize = g_inet6_address_finalize; gobject_class->dispose = g_inet6_address_dispose; + ginetaddress_class->to_string = g_inet6_address_to_string; +/* ginetaddress_class->is_any = g_inet6_address_is_any; + ginetaddress_class->is_linklocal = g_inet6_address_is_linklocal; + ginetaddress_class->is_loopback = g_inet6_address_is_loopback; + ginetaddress_class->is_sitelocal = g_inet6_address_is_sitelocal; + ginetaddress_class->is_multicast = g_inet6_address_is_multicast; + ginetaddress_class->is_mc_global = g_inet6_address_is_mc_global; + ginetaddress_class->is_mc_linklocal = g_inet6_address_is_mc_linklocal; + ginetaddress_class->is_mc_nodelocal = g_inet6_address_is_mc_nodelocal; + ginetaddress_class->is_mc_orglocal = g_inet6_address_is_mc_orglocal; + ginetaddress_class->is_mc_sitelocal = g_inet6_address_is_mc_sitelocal;*/ } static void @@ -83,12 +110,6 @@ g_inet6_address_from_string (const char *string) return NULL; } -char * -g_inet6_address_to_string (GInet6Address *address) -{ - return NULL; -} - GInet6Address * g_inet6_address_from_bytes (guint8 bytes[]) { diff --git a/gnio/ginet6address.h b/gnio/ginet6address.h index 951e604..ba791b6 100644 --- a/gnio/ginet6address.h +++ b/gnio/ginet6address.h @@ -56,8 +56,6 @@ GType g_inet6_address_get_type (void) G_GNUC_CONST; GInet6Address * g_inet6_address_from_string (const char *string); -char * g_inet6_address_to_string (GInet6Address *address); - GInet6Address * g_inet6_address_from_bytes (guint8 bytes[]); const guint8 * g_inet6_address_to_bytes (GInet6Address *address); diff --git a/gnio/ginetaddress.c b/gnio/ginetaddress.c index 4ee20de..809aaca 100644 --- a/gnio/ginetaddress.c +++ b/gnio/ginetaddress.c @@ -172,6 +172,14 @@ g_inet_address_init (GInetAddress *address) } +gchar * +g_inet_address_to_string (GInetAddress *address) +{ + g_return_val_if_fail (G_IS_INET_ADDRESS (address), NULL); + + return G_INET_ADDRESS_GET_CLASS (address)->to_string (address); +} + /* ******************************************* */ /* Getters for properties */ diff --git a/gnio/ginetaddress.h b/gnio/ginetaddress.h index cdc8048..305ded2 100644 --- a/gnio/ginetaddress.h +++ b/gnio/ginetaddress.h @@ -48,6 +48,7 @@ struct _GInetAddressClass { GObjectClass parent_class; + gchar * (*to_string) (GInetAddress *address); gboolean (*is_any) (GInetAddress *address); gboolean (*is_linklocal) (GInetAddress *address); gboolean (*is_loopback) (GInetAddress *address); @@ -60,28 +61,29 @@ struct _GInetAddressClass gboolean (*is_mc_sitelocal) (GInetAddress *address); }; -GType g_inet_address_get_type (void) G_GNUC_CONST; +GType g_inet_address_get_type (void) G_GNUC_CONST; -/* accessors to gobject properties that get overridden by subclasses */ -gboolean g_inet_address_is_any (GInetAddress *address); +gchar * g_inet_address_to_string (GInetAddress *address); -gboolean g_inet_address_is_linklocal (GInetAddress *address); +gboolean g_inet_address_is_any (GInetAddress *address); -gboolean g_inet_address_is_loopback (GInetAddress *address); +gboolean g_inet_address_is_linklocal (GInetAddress *address); -gboolean g_inet_address_is_sitelocal (GInetAddress *address); +gboolean g_inet_address_is_loopback (GInetAddress *address); -gboolean g_inet_address_is_multicast (GInetAddress *address); +gboolean g_inet_address_is_sitelocal (GInetAddress *address); -gboolean g_inet_address_is_mc_global (GInetAddress *address); +gboolean g_inet_address_is_multicast (GInetAddress *address); -gboolean g_inet_address_is_mc_linklocal (GInetAddress *address); +gboolean g_inet_address_is_mc_global (GInetAddress *address); -gboolean g_inet_address_is_mc_nodelocal (GInetAddress *address); +gboolean g_inet_address_is_mc_linklocal (GInetAddress *address); -gboolean g_inet_address_is_mc_orglocal (GInetAddress *address); +gboolean g_inet_address_is_mc_nodelocal (GInetAddress *address); -gboolean g_inet_address_is_mc_sitelocal (GInetAddress *address); +gboolean g_inet_address_is_mc_orglocal (GInetAddress *address); + +gboolean g_inet_address_is_mc_sitelocal (GInetAddress *address); G_END_DECLS diff --git a/gnio/gresolver.c b/gnio/gresolver.c index ee9fd0b..8f76633 100644 --- a/gnio/gresolver.c +++ b/gnio/gresolver.c @@ -174,6 +174,7 @@ winsock_error_message (int number) } #endif +#if !defined(HAVE_GETADDRINFO) static void g_set_error_from_last_error (GError **error) { @@ -203,6 +204,7 @@ g_set_error_from_last_error (GError **error) g_set_error (error, G_IO_ERROR, code, hstrerror (err)); #endif } +#endif #if !defined(HAVE_GETADDRINFO) static GList * diff --git a/test/test-stuff.c b/test/test-stuff.c index e741f96..b92b209 100644 --- a/test/test-stuff.c +++ b/test/test-stuff.c @@ -16,7 +16,7 @@ void print_address (GInetAddress *address, gpointer data); void print_address (GInetAddress *address, gpointer data) { - gchar *string = g_inet4_address_to_string (G_INET4_ADDRESS (address)); + gchar *string = g_inet_address_to_string (G_INET_ADDRESS (address)); g_printf ("%s\n", string); @@ -72,7 +72,7 @@ int main (int argc, char *argv[]) address = (GInetAddress *) g_inet4_address_from_string ("127.0.0.1"); - g_printf ("%s:\n", g_inet4_address_to_string (G_INET4_ADDRESS (address))); + g_printf ("%s:\n", g_inet_address_to_string (address)); g_printf ("is_any: %d, is_linklocal: %d, is_loopback: %d\n", g_inet_address_is_any (address), g_inet_address_is_linklocal (address), g_inet_address_is_loopback (address)); @@ -80,7 +80,7 @@ int main (int argc, char *argv[]) address = (GInetAddress *) g_inet4_address_from_string ("0.0.0.0"); - g_printf ("\n%s:\n", g_inet4_address_to_string (G_INET4_ADDRESS (address))); + g_printf ("\n%s:\n", g_inet_address_to_string (address)); g_printf ("is_any: %d, is_linklocal: %d, is_loopback: %d\n", g_inet_address_is_any (address), g_inet_address_is_linklocal (address), g_inet_address_is_loopback (address)); @@ -88,7 +88,7 @@ int main (int argc, char *argv[]) address = (GInetAddress *) g_inet4_address_from_string ("169.254.0.0"); - g_printf ("\n%s:\n", g_inet4_address_to_string (G_INET4_ADDRESS (address))); + g_printf ("\n%s:\n", g_inet_address_to_string (address)); g_printf ("is_any: %d, is_linklocal: %d, is_loopback: %d\n", g_inet_address_is_any (address), g_inet_address_is_linklocal (address), g_inet_address_is_loopback (address)); @@ -103,7 +103,7 @@ int main (int argc, char *argv[]) return 0; } - g_printf ("\nwww.yahoo.com: %s\n", g_inet4_address_to_string (G_INET4_ADDRESS (address))); + g_printf ("\nwww.yahoo.com: %s\n", g_inet_address_to_string (address)); g_printf ("is_any: %d, is_linklocal: %d, is_loopback: %d\n", g_inet_address_is_any (address), g_inet_address_is_linklocal (address), g_inet_address_is_loopback (address)); -- 2.20.1