diff options
Diffstat (limited to 'gconf/gconf-gram.y')
-rw-r--r-- | gconf/gconf-gram.y | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/gconf/gconf-gram.y b/gconf/gconf-gram.y index a1d9f2a..f7ee710 100644 --- a/gconf/gconf-gram.y +++ b/gconf/gconf-gram.y @@ -506,19 +506,23 @@ string_to_host (struct in_addr *in, const char *string) } static int -string_to_sockaddr (sockaddr_union_t *s, const char *string) +string_to_sockaddr (struct gconf_sockaddr *sp, const char *string) { if (string[0] == '/') { - if (strlen (string) >= sizeof (s->s_un.sun_path)) + struct sockaddr_un s_un; + if (strlen (string) >= sizeof (s_un.sun_path)) { gconf_error (&gconf_current_locus, 0, _("%s: UNIX socket name too long"), string); return 1; } - s->s_un.sun_family = AF_UNIX; - strcpy (s->s_un.sun_path, string); + s_un.sun_family = AF_UNIX; + strcpy (s_un.sun_path, string); + sp->len = sizeof (s_un); + sp->sa = xmalloc (sp->len); + memcpy (sp->sa, &s_un, sp->len); } else { @@ -583,7 +587,9 @@ string_to_sockaddr (sockaddr_union_t *s, const char *string) gconf_error (&gconf_current_locus, 0, _("missing port number")); return 1; } - s->s_in = sa; + sp->len = sizeof (sa); + sp->sa = xmalloc (sp->len); + memcpy (sp->sa, &sa, sp->len); } return 0; } @@ -689,7 +695,7 @@ string_convert (void *target, enum gconf_data_type type, const char *string) break; case gconf_type_sockaddr: - return string_to_sockaddr ((sockaddr_union_t*)target, string); + return string_to_sockaddr ((struct gconf_sockaddr *)target, string); /* FIXME: */ case gconf_type_cidr: @@ -720,7 +726,7 @@ size_t gconf_type_size_tab[] = { sizeof (struct in_addr) /* gconf_type_ipv4 */, 0 /* FIXME: gconf_type_cidr */, sizeof (struct in_addr) /* gconf_type_host */, - sizeof (sockaddr_union_t) /* gconf_type_sockaddr */, + sizeof (struct gconf_sockaddr) /* gconf_type_sockaddr */, 0 /* gconf_type_section */ }; #define gconf_type_size_count \ |