OSDN Git Service

* net.cc (dup_ent): Move Win 95 misalignment recogition before
authorcorinna <corinna>
Mon, 3 Nov 2003 21:43:32 +0000 (21:43 +0000)
committercorinna <corinna>
Mon, 3 Nov 2003 21:43:32 +0000 (21:43 +0000)
trying to evaluate string length.

winsup/cygwin/ChangeLog
winsup/cygwin/net.cc

index d4cdcc2..8eae557 100644 (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
index 7b09751..f956cbd 100644 (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;
            }