From peter@vk2pj.alcatel.com.au  Mon Jan  6 01:36:33 1997
Received: from gatekeeper.alcatel.com.au (gatekeeper.alcatel.com.au [203.17.66.1])
          by freefall.freebsd.org (8.8.4/8.8.4) with ESMTP id BAA23136
          for <FreeBSD-gnats-submit@freebsd.org>; Mon, 6 Jan 1997 01:36:27 -0800 (PST)
Received: from 139.188.22.50 (139.188.22.50) by gatekeeper.alcatel.com.au
 (PMDF V5.0-5 #11861) id <01IDWMDZNH0G0008T9@gatekeeper.alcatel.com.au> for
 FreeBSD-gnats-submit@freebsd.org; Mon, 06 Jan 1997 20:35:11 +1000
Received: from vk2pj.alcatel.com.au (vk2pj.alcatel.com.au)
 by cbd.alcatel.com.au (PMDF V5.0-5 #9241)
 id <01IDWMCW78JK9QVIX4@cbd.alcatel.com.au> for
 FreeBSD-gnats-submit@freebsd.org; Mon, 06 Jan 1997 20:34:21 +1100
Received: (from peter@localhost) by vk2pj.alcatel.com.au (8.7.5/8.7.3)
 id UAA27320; Mon, 06 Jan 1997 20:35:41 +1100 (EST)
Message-Id: <199701060935.UAA27320@vk2pj.alcatel.com.au>
Date: Mon, 06 Jan 1997 20:35:41 +1100 (EST)
From: peter.jeremy@alcatel.com.au
Reply-To: peter.jeremy@alcatel.com.au
To: FreeBSD-gnats-submit@freebsd.org
Subject: curses.h / -lcurses incompatible with C++
X-Send-Pr-Version: 3.2

>Number:         2382
>Category:       bin
>Synopsis:       curses.h / -lcurses incompatible with C++
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jan  6 01:40:03 PST 1997
>Closed-Date:    Sun May 31 13:13:22 PDT 1998
>Last-Modified:  Sun May 31 13:13:48 PDT 1998
>Originator:     Peter Jeremy
>Release:        FreeBSD 2.1-STABLE i386
>Organization:
Peter Jeremy (VK2PJ)			peter.jeremy@alcatel.com.au
Alcatel Australia Limited
41 Mandible St				Phone: +61 2 9690 5019
ALEXANDRIA  NSW  2015			Fax:   +61 2 9690 5247
>Environment:

none

>Description:

The prototypes in /usr/include/curses.h are not protected in an extern "C" {}
block.  This causes C++ programs using -lcurses to report undefined symbols
during linking.

>How-To-Repeat:

$ cat > x.C <<__EOF__
#include "curses.h"	// since > < gets eaten

int main(int argc, char **argv)
{
	WINDOW	*w;

	w = initscr();
}
__EOF__
$ gcc x.C -lcurses
/tmp/cc0142051.o: Undefined symbol `_initscr__Fv' referenced from text segment
$

>Fix:
	
*** /cdrom/usr/src/lib/libcurses/curses.h	Sat Sep  2 13:41:59 1995
--- /usr/src/lib/libcurses/curses.h	Wed Dec 11 20:43:18 1996
***************
*** 277,282 ****
--- 277,283 ----
  #define	winch(w) \
  	((w)->lines[(w)->cury]->line[(w)->curx].ch & 0377)
  
+ __BEGIN_DECLS
  /* Public function prototypes. */
  int	 box __P((WINDOW *, int, int));
  int	 cbreak __P((void));
***************
*** 388,392 ****
--- 389,394 ----
  int      tgetflag __P((const char *));
  char    *tgetstr __P((const char *, char **));
  char    *tgoto __P((const char *, int, int));
+ __END_DECLS
  
  #endif /* !_CURSES_H_ */

(And the same change to /usr/include/curses.h)
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: steve 
State-Changed-When: Sun May 31 13:13:22 PDT 1998 
State-Changed-Why:  
Patch committed to both -stable and -current.  Thanks! 
>Unformatted:
