Date: Mon, 30 Mar 2009 21:47:25 +0200 From: Daniel Roethlisberger <daniel@roe.ch> To: Manfred Antar <null@pozo.com>, Peter Pentchev <roam@ringlet.net>, ports@freebsd.org, rpaulo@FreeBSD.org Subject: Dangling extern "C" in pcap.h (was: Re: nmap broken on current) Message-ID: <20090330194725.GA10713@hobbes.ustdmz.roe.ch> In-Reply-To: <20090330113215.GA4768@hobbes.ustdmz.roe.ch> References: <200903300223.n2U2N6mO074911@pozo.com> <20090330072620.GA928@straylight.m.ringlet.net> <20090330113215.GA4768@hobbes.ustdmz.roe.ch>
next in thread | previous in thread | raw e-mail | index | archive | help
--qlTNgmc+xy1dBmNv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Daniel Roethlisberger <daniel@roe.ch> 2009-03-30: > Peter Pentchev <roam@ringlet.net> 2009-03-30: > > On Sun, Mar 29, 2009 at 07:23:00PM -0700, Manfred Antar wrote: > > > the nmap port is broken on current: > > > > Shouldn't this be reported to the port's maintainer - Daniel > > Roethlisberger <daniel@roe.ch>? :) I've CC'd him on this message... > > Thanks for CC:-ing me, Peter. > > > > c++ -c -I/usr/local/include/lua51 -I/usr/local/include -I/usr/local/include -I/usr/include -Inbase -Insock/include -O2 -pipe -fno-strict-aliasing -Wall -fno-strict-aliasing -DHAVE_CONFIG_H -DNMAP_NAME=\"Nmap\" -DNMAP_URL=\"http://nmap.org\" -DNMAP_PLATFORM=\"i386-portbld-freebsd8.0\" -DNMAPDATADIR=\"/usr/local/share/nmap\" -DNMAPLIBEXECDIR=\"/usr/local/libexec/nmap\" main.cc -o main.o > > > c++ -c -I/usr/local/include/lua51 -I/usr/local/include -I/usr/local/include -I/usr/include -Inbase -Insock/include -O2 -pipe -fno-strict-aliasing -Wall -fno-strict-aliasing -DHAVE_CONFIG_H -DNMAP_NAME=\"Nmap\" -DNMAP_URL=\"http://nmap.org\" -DNMAP_PLATFORM=\"i386-portbld-freebsd8.0\" -DNMAPDATADIR=\"/usr/local/share/nmap\" -DNMAPLIBEXECDIR=\"/usr/local/libexec/nmap\" nmap.cc -o nmap.o > > > In file included from Target.h:115, > > > from traceroute.h:101, > > > from nmap.cc:111: > > > tcpip.h:458: error: declaration of C function 'int resolve(char*, in_addr*)' conflicts with > > > tcpip.h:453: error: previous declaration 'int resolve(char*, sockaddr_storage*, size_t*, int)' here > > > In file included from nmap.cc:121: > > > utils.h:188: error: template with C linkage > > > nmap.h: In function 'int nmap_main(int, char**)': > > > nmap.h:416: error: previous declaration of 'int nmap_main(int, char**)' with 'C++' linkage > > > nmap.cc:503: error: conflicts with new declaration with 'C' linkage > > > nmap.cc: In function 'int nmap_main(int, char**)': > > > nmap.cc:1167: error: cannot convert 'sockaddr_storage*' to 'in_addr*' for argument '2' to 'int resolve(char*, in_addr*)' > > > nmap.cc:1673: error: cannot convert 'sockaddr_storage*' to 'in_addr*' for argument '2' to 'int resolve(char*, in_addr*)' > > > nmap.h: In function 'void nmap_free_mem()': > > > nmap.h:418: error: previous declaration of 'void nmap_free_mem()' with 'C++' linkage > > > nmap.cc:1907: error: conflicts with new declaration with 'C' linkage > > > nmap.h: In function 'int gather_logfile_resumption_state(char*, int*, char***)': > > > nmap.h:438: error: previous declaration of 'int gather_logfile_resumption_state(char*, int*, char***)' with 'C++' linkage > > > nmap.cc:1932: error: conflicts with new declaration with 'C' linkage > > > nmap.h: In function 'void nmap_free_mem()': > > > nmap.h:413: error: previous declaration of 'void init_socket(int)' with 'C++' linkage > > > nmap.cc:2038: error: conflicts with new declaration with 'C' linkage > > > nmap.h:407: error: previous declaration of 'void getpts(const char*, scan_lists*)' with 'C++' linkage > > > nmap.cc:2128: error: conflicts with new declaration with 'C' linkage > > > nmap.h:409: error: previous declaration of 'void getpts_simple(const char*, int, short unsigned int**, int*)' with 'C++' linkage > > > nmap.cc:2191: error: conflicts with new declaration with 'C' linkage > > > nmap.h:410: error: previous declaration of 'void free_scan_lists(scan_lists*)' with 'C++' linkage > > > nmap.cc:2400: error: conflicts with new declaration with 'C' linkage > > > nmap.h:402: error: previous declaration of 'void printinteractiveusage()' with 'C++' linkage > > > nmap.cc:2410: error: conflicts with new declaration with 'C' linkage > > > nmap.h:426: error: previous declaration of 'char* seqreport(seq_info*)' with 'C++' linkage > > > nmap.cc:2432: error: conflicts with new declaration with 'C' linkage > > > nmap.h:434: error: previous declaration of 'const char* seqidx2difficultystr(long unsigned int)' with 'C++' linkage > > > nmap.cc:2441: error: conflicts with new declaration with 'C' linkage > > > nmap.h:429: error: previous declaration of 'const char* ipidclass2ascii(int)' with 'C++' linkage > > > nmap.cc:2445: error: conflicts with new declaration with 'C' linkage > > > nmap.h:430: error: previous declaration of 'const char* tsseqclass2ascii(int)' with 'C++' linkage > > > nmap.cc:2466: error: conflicts with new declaration with 'C' linkage > > > nmap.h:423: error: previous declaration of 'const char* scantype2str(stype)' with 'C++' linkage > > > nmap.cc:2491: error: conflicts with new declaration with 'C' linkage > > > nmap.h:422: error: previous declaration of 'const char* statenum2str(int)' with 'C++' linkage > > > nmap.cc:2523: error: conflicts with new declaration with 'C' linkage > > > nmap.h:404: error: previous declaration of 'int ftp_anon_connect(ftpinfo*)' with 'C++' linkage > > > nmap.cc:2536: error: conflicts with new declaration with 'C' linkage > > > nmap.h:425: error: previous declaration of 'void reaper(int)' with 'C++' linkage > > > nmap.cc:2614: error: conflicts with new declaration with 'C' linkage > > > nmap.h:424: error: previous declaration of 'void sigdie(int)' with 'C++' linkage > > > nmap.cc:2626: error: conflicts with new declaration with 'C' linkage > > > nmap.h: In function 'int nmap_fileexistsandisreadable(const char*)': > > > nmap.h:437: error: previous declaration of 'int nmap_fileexistsandisreadable(const char*)' with 'C++' linkage > > > nmap.cc:2705: error: conflicts with new declaration with 'C' linkage > > > nmap.h: In function 'int nmap_fetchfile(char*, int, const char*)': > > > nmap.h:436: error: previous declaration of 'int nmap_fetchfile(char*, int, const char*)' with 'C++' linkage > > > nmap.cc:2709: error: conflicts with new declaration with 'C' linkage > > > nmap.cc: At global scope: > > > nmap.cc:2837: error: expected `}' at end of input > > > gmake[1]: *** [nmap.o] Error 1 > > > gmake[1]: Leaving directory `/usr/ports/security/nmap/work/nmap-4.76' > > > gmake: *** [all] Error 2 > > > *** Error code 1 > > > > > > Stop in /usr/ports/security/nmap. > > Manfred, can you file a PR and make sure to also include the date > of your -current sources and the content of your /etc/make.conf? Update: This is caused by a dangling extern "C" in /usr/include/pcap.h, which breaks the use of libpcap from C++. The attached patch fixes the issue for me. I'm Cc:-ing rpaulo@ who committed the recent update to libpcap. -- Daniel Roethlisberger http://daniel.roe.ch/ --qlTNgmc+xy1dBmNv Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="libpcap.h-dangling-extern-C.diff" --- contrib/libpcap/pcap.h.orig 2009-03-27 07:27:01.000000000 +0100 +++ contrib/libpcap/pcap.h 2009-03-30 21:42:31.000000000 +0200 @@ -53,10 +53,6 @@ #include <stdio.h> -#ifdef __cplusplus -extern "C" { -#endif - #define PCAP_VERSION_MAJOR 2 #define PCAP_VERSION_MINOR 4 --qlTNgmc+xy1dBmNv--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090330194725.GA10713>