X-Recipient: archive-cygwin@delorie.com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
	:list-unsubscribe:list-subscribe:list-archive:list-post
	:list-help:sender:mime-version:in-reply-to:references:date
	:message-id:subject:from:to:content-type
	:content-transfer-encoding; q=dns; s=default; b=ZrBxDzq/UKxM+ovW
	v34O9cdiZdvd3l5+0ebfQpApYvqlLJ6B70V2yVVZDOzDpPBKy8gfbUFbkHVHW3L9
	w1jFBtna2mabxCvVWrzn3eBbOA8FFb2+Fij0SZWawvQnm6fblivyT9vzYtgqL3nu
	6l4Q+fkYiRg+AhtDmYN02dDLCUs=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
	:list-unsubscribe:list-subscribe:list-archive:list-post
	:list-help:sender:mime-version:in-reply-to:references:date
	:message-id:subject:from:to:content-type
	:content-transfer-encoding; s=default; bh=DmsCVNIlUQsp2CfYTVfMdB
	wvgsg=; b=LsJxbFgCm1W6iYxg6NxEPXO70KhKaMWoJqsQfekghxMPZ+I1dIxIsN
	LCdX91fQhiNSSoba8IVsUGFv20bfHIxMXt4lUqbOgfxeXla4PclP4COPlIk9d0lK
	lQv+2n5mm6TL6u+tyB+Jtgbji737ZUsEdkaZKWUoIJ0UiidMeWfDo=
Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com
X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,SPF_PASS autolearn=ham version=3.3.1
MIME-Version: 1.0
X-Received: by 10.60.60.71 with SMTP id f7mr15062536oer.71.1366839947431; Wed, 24 Apr 2013 14:45:47 -0700 (PDT)
In-Reply-To: <51782672.10509@cygwin.com>
References: <CAEE3Wrm8MwsN2MMNTRGdLgJvSHPnusJN-TXZrJFL-26BtrW_ng@mail.gmail.com>	<20130424154409.GX26397@calimero.vinschen.de>	<CAEE3Wrm4iARi33g3gOqfbyJ_Jwc6phQ8xNZSQ6=Cknj-bUQ1-g@mail.gmail.com>	<CE9C056E12502146A72FD81290379E9A6095C4FA@ENFIRHMBX1.datcon.co.uk>	<CAEE3Wr=cDmAKuJ5rDK0wYoW9hVYzdfTnXCvjVMUhe0qgC4kzGA@mail.gmail.com>	<20130424175107.GZ26397@calimero.vinschen.de>	<20130424175359.GH5968@type.youpi.perso.aquilenet.fr>	<20130424181248.GA26397@calimero.vinschen.de>	<51782672.10509@cygwin.com>
Date: Wed, 24 Apr 2013 23:45:47 +0200
Message-ID: <CAEE3Wr=WXVVZk9eV1M4dXYvRofaMcGFi6nF5n4F6i7PpEEA-iA@mail.gmail.com>
Subject: Re: Redefinition of `struct in6_addr'?
From: Max Balduino <max.balduino@gmail.com>
To: cygwin@cygwin.com
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id r3OLk03O010176

> On 4/24/2013 2:12 PM, Corinna Vinschen wrote:
>>
>> On Apr 24 19:53, Samuel Thibault wrote:
>>>
>>> Corinna Vinschen, le Wed 24 Apr 2013 19:51:07 +0200, a écrit :
>>>>>>
>>>>>> /usr/include/cygwin/in6.h:75:8: error: redefinition of ‘struct
>>>>>> in6_addr’
>>>>>>
>>>>>> /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../include/w32api/in6addr.h:17:16:
>>>>>> note: originally defined here
>>>>
>>>>
>>>> Don't know this file but this is a bug in config.h.  struct in6_addr
>>>> is defined in a system header, so it should not be gratuitously defined
>>>> in a project header, especially if the definition collides with the
>>>> right one from the system header.
>>>
>>>
>>> Mmm, but here it's w32api definition vs cygwin definition.
>>
>>
>> Maybe I didn't read it exactly, but the bottom line here is, when
>> building for Cygwin, either use the POSIX network headers (preferredly),
>> or use winsock.h.  Mixing them is not supported.
>
>
> Yeah, though this case is a bit buried, so it's not obvious.  Also the code
> is from 2008, so I expect it has suffered some bit rot over time with
> respect to Cygwin.  In any case, it looks like removing iphlpapi.h from
> sysdep.c solves the problem.


Hey, I got it! It's not cygwin fault...

It's the inclusion of <netinet/in.h> which is done for the first time
in sysdep.h, AFTER the inclusions of the winapi32, where struct
in6_addr is declared. Actually sysdep.c includes its header at the end
of the inclusion list and sysdep.h in its turn has an inclusion for
<netinet/in.h> . The solution is in the following patch:

--- //ioxp/cygwin/usr/src/vpnc-0.5.3/sysdep.c    mer nov 19 21:02:39 2008
+++ //ioxp/cygwin/usr/src/vpnc-0.5.3.1/sysdep.c    mer apr 24 21:53:29 2013
@@ -28,6 +28,7 @@

 #include <sys/socket.h>
 #include <net/if.h>
+#include <netinet/in.h>

 #ifdef __sun__
 #include <ctype.h>
@@ -38,7 +39,6 @@
 #include <sys/sockio.h>
 #include <signal.h>
 #include <stropts.h>
-#include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
 #include <netinet/tcp.h>

Basically the #include <netinet/in.h> has to be moved up a few lines
to get it out of the

#ifdef __sun__
...
#endif

directive. This way the winapi32 headers don't declare struct
in6_addr, I didn't check, but I guess they do so only #ifndef
_CYGWIN_IN6_H, am I right?

For ease of reading, here are the inclusions in sysdep.c as patched by me:


#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <syslog.h>
#include <sys/ioctl.h>
#include <errno.h>

#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>

#ifdef __sun__
#include <ctype.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <signal.h>
#include <stropts.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#endif

#if defined(__CYGWIN__)
#include <io.h>
#include <w32api/windef.h>
#include <w32api/winbase.h>
#include <w32api/winnt.h>
#include <w32api/winioctl.h>
#include <w32api/iphlpapi.h>
#include <w32api/iptypes.h>
#include <w32api/winreg.h>
#include <sys/cygwin.h>
#endif

#if defined(__DragonFly__)
#include <net/tun/if_tun.h>
#elif defined(__linux__)
#include <linux/if_tun.h>
#elif defined(__APPLE__)
/* no header for tun */
#elif defined(__CYGWIN__)
#include "tap-win32.h"
#else
#include <net/if_tun.h>
#endif

#include "sysdep.h"

#if !defined(HAVE_VASPRINTF) || !defined(HAVE_ASPRINTF) || !defined(HAVE_ERROR)
#include <stdarg.h>
#endif

#if defined(__sun__)
extern char **environ;
static int ip_fd = -1, muxid;
#endif

OK, so that's it, vpnc-0.5.3 will then compile like a charm. Ah, by
the way, you must have perl installed and run ./enum2debug.pl isakmp.h
 >vpnc-debug.c 2>vpnc-debug.h right before to make.

Thanks to all for attention, and once again sorry if I dared to post
in the wrong mailing list. You must be patient I'm just a newcomer...
Didn't mean to bother!!

:-)

BR,
Max

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


