From dff017b292aab890b95db9574460801be3fea8ac Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 3 Nov 2003 21:43:32 +0000 Subject: [PATCH] * net.cc (dup_ent): Move Win 95 misalignment recogition before trying to evaluate string length. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/net.cc | 25 +++++++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d4cdcc213..8eae5571c 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2003-11-03 Corinna Vinschen + + * net.cc (dup_ent): Move Win 95 misalignment recogition before + trying to evaluate string length. + 2003-10-31 Thomas Pfaff * thread.cc (pthread::thread_init_wrapper): Initialize exception diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index 7b09751f6..f956cbd8f 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -499,8 +499,21 @@ dup_ent (void *old, void *src0, struct_type type) /* Do servent/hostent specific processing */ int protolen = 0; int addr_list_len = 0; + char *s_proto = NULL; if (type == is_servent) - sz += (protolen = strlen_round (src->s_proto)); + { + if (src->s_proto) + { + /* Windows 95 idiocy. Structure is misaligned on Windows 95. + Kludge around this by trying a different pointer alignment. */ + if (IsBadReadPtr (src->s_proto, sizeof (src->s_proto)) + && !IsBadReadPtr (((pservent *) src)->s_proto, sizeof (src->s_proto))) + s_proto = ((pservent *) src)->s_proto; + else + s_proto = src->s_proto; + } + sz += (protolen = strlen_round (s_proto)); + } else if (type == is_hostent) { /* Calculate the length and storage used for h_addr_list */ @@ -549,16 +562,8 @@ dup_ent (void *old, void *src0, struct_type type) /* Do servent/hostent specific processing. */ if (type == is_servent) { - if (src->s_proto) + if (s_proto) { - char *s_proto; - /* Windows 95 idiocy. Structure is misaligned on Windows 95. - Kludge around this by trying a different pointer alignment. */ - if (IsBadReadPtr (src->s_proto, sizeof (src->s_proto)) - && !IsBadReadPtr (((pservent *) src)->s_proto, sizeof (src->s_proto))) - s_proto = ((pservent *) src)->s_proto; - else - s_proto = src->s_proto; strcpy (dst->s_proto = dp, s_proto); dp += protolen; }