Skip site navigation (1)Skip section navigation (2)
Date:      Tue,  6 Jun 2000 16:50:24 -0700 (PDT)
From:      pfeifer@dbai.tuwien.ac.at
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   misc/19077: #define trace _nc_trace in /usr/include/ncurses.h causes collateral damage.
Message-ID:  <20000606235024.DA31337BB9F@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         19077
>Category:       misc
>Synopsis:       #define trace _nc_trace in /usr/include/ncurses.h causes collateral damage.
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jun 06 17:00:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Gerald Pfeifer
>Release:        n/a
>Organization:
Vienna University of Technology
>Environment:
n/a 
(Problem destilled from bug reports of 4.0-STABLE users and inspection)
>Description:
The following change to /usr/include/ncurses.h which adds a
  #define trace _nc_trace
causes problems with our Wine port and probably further software:

  1.1.1.3 (vendor branch) Wed May 24 10:44:45 2000 UTC by peter
  CVS Tags: v5_0_19991023, HEAD; Branch: NCURSES

  Bring in the fix for the trace/_nc_trace issue, without breaking the
  vendor branching.  The author has fixed this also so we can do this
  safely.

  1.1.1.2.2.1 Tue May 23 13:42:17 2000 UTC by ache
  Branch: RELENG_4

  MFC: trace -> _nc_trace

For example, consider the following snippet:

  void _nc_trace() { }
  #define trace _nc_trace

  main() {
   long trace=0;

   if( &trace != &_nc_trace )
       printf("Okay\n");
   }
   
As another example, consider Wine, where this change causes:

  ../libwine.so: undefined reference to `__GET_DEBUGGING__nc_trace'

  due to a new interaction with the TRACE macro in debugtools.h.

  http://cvs.winehq.com/cvsweb/wine/include/debugtools.h?rev=1.9 has
  the source of that Wine include file.

The new #define in ncurses.h clearly breaks ANSI/ISO C compliant code.



>How-To-Repeat:
Try the code snippet from "Full Description".
Compile the Wine port.
>Fix:
a. Remove that #define.
b. Adding a stub instead of that #define.

Andrey A. Chernov <ache@freebsd.org> who introduced the breakage cannot
install a fix by himself, but suggested the following:

--- include/curses.h.in.bak     Wed May 24 14:44:45 2000
+++ include/curses.h.in Mon Jun  5 02:28:33 2000
@@ -1313,8 +1313,7 @@
 extern char *_tracechtype(chtype);
 extern char *_tracechtype2(int, chtype);
 extern char *_tracemouse(const MEVENT *);
-#define trace _nc_trace
-extern void trace(const unsigned int);
+extern void _nc_trace(const unsigned int);
 
 /* trace masks */
 #define TRACE_DISABLE  0x0000  /* turn off tracing */


>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000606235024.DA31337BB9F>