* net.cc (dup_ent): Move Win 95 misalignment recogition before

trying to evaluate string length.
This commit is contained in:
Corinna Vinschen 2003-11-03 21:43:32 +00:00
parent 79c5244017
commit dff017b292
2 changed files with 20 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2003-11-03 Corinna Vinschen <corinna@vinschen.de>
* net.cc (dup_ent): Move Win 95 misalignment recogition before
trying to evaluate string length.
2003-10-31 Thomas Pfaff <tpfaff@gmx.net>
* thread.cc (pthread::thread_init_wrapper): Initialize exception

View File

@ -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;
}