From owner-freebsd-bugs@FreeBSD.ORG Fri Apr 4 08:24:33 2014 Return-Path: Delivered-To: freebsd-bugs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 73005F9F; Fri, 4 Apr 2014 08:24:33 +0000 (UTC) Received: from mail106.syd.optusnet.com.au (mail106.syd.optusnet.com.au [211.29.132.42]) by mx1.freebsd.org (Postfix) with ESMTP id 36306D42; Fri, 4 Apr 2014 08:24:32 +0000 (UTC) Received: from c122-106-147-133.carlnfd1.nsw.optusnet.com.au (c122-106-147-133.carlnfd1.nsw.optusnet.com.au [122.106.147.133]) by mail106.syd.optusnet.com.au (Postfix) with ESMTPS id 129BB3C609E; Fri, 4 Apr 2014 18:57:42 +1100 (EST) Date: Fri, 4 Apr 2014 18:57:41 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Yasuhiro KIMURA Subject: Re: kern/188247: [PATCH] include/rpcsvc/yp_prot.h: remove typedef of bool. In-Reply-To: <20140404011841.71EEB7591D@eastasia.home.utahime.org> Message-ID: <20140404183502.H1489@besplex.bde.org> References: <20140404011841.71EEB7591D@eastasia.home.utahime.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=PqKqMW83 c=1 sm=1 tr=0 a=7NqvjVvQucbO2RlWB8PEog==:117 a=PO7r1zJSAAAA:8 a=ilVbdA4Jew8A:10 a=kj9zAlcOel0A:10 a=JzwRw_2MAAAA:8 a=6I5d2MoRAAAA:8 a=wbs4crwehIlGOVoNk8QA:9 a=CjuIK1q_8ugA:10 Cc: freebsd-bugs@freebsd.org, FreeBSD-gnats-submit@freebsd.org X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Apr 2014 08:24:33 -0000 On Fri, 4 Apr 2014, Yasuhiro KIMURA wrote: >> Description: > > There have been typedef of bool in rpcsvc/yp_prot.h since it > is added to source tree in August 1994. But there is also > definition of bool in stdbool.h, and they conflict when both > headers are used. An acutual example of conflict is building > Zsh on NIS client of 10.x or later. It is already repoted as > following PR. > > ports/183253: [PATCH] shells/zsh: fail to build on 10.0-BETA1 > http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/183253 > > While stdbool.h and bool definition in it are requirement of > C99 standard, it seems bool typedef in ryp_prot.h is not > necessarily required. So removing the latter is a solution. rpc seems to have been only partly converted from using bool to using bool_t. > There are some reasons that removing bool typedef from > yp_prot.h doesn't seems to cause problem. Many places still use bool. E.g.: rpc/rpcb_prot.x rpcsvc/klm_prot.x rpcsvc/nfx_prot.x rpcsvc/nis.x rpcsvc/nis_callback.x rpcsvc/nlm_prot.x rpcsvc/rquota.x rpcsvc/yp.x rpcsvc/ypprot.h (this definition) rpcsvc/ypxfrd.x None of these places include stdbool.h, and neither does your patch, so it is unclear how anything works. > * Building and installing FreeBSD seems to work fine without > it. I applied attached patch to 8.4-RELEASE, 9.2-RELEASE and > 10.0-RELEASE source tree and tried regular rebuilding steps > described in /usr/src/Makefile. All rebuild succeeded > without error, and all of reinstalled systems seems to work > fine. > * NetBSD have already removed it in October 2007, and since > then they have been done well. > > --- patch-src_include_rpcsvc_yp_prot.h begins here --- > Index: include/rpcsvc/yp_prot.h > =================================================================== > --- include/rpcsvc/yp_prot.h (revision 260673) > +++ include/rpcsvc/yp_prot.h (working copy) > @@ -67,11 +67,6 @@ > * YPPROC_MAPLIST takes (char *), returns (struct ypmaplist *). > */ > > -#ifndef BOOL_DEFINED > -typedef u_int bool; > -#define BOOL_DEFINED > -#endif > - > /* Program and version symbols, magic numbers */ > > #define YPPROG ((u_long)100004) > --- patch-src_include_rpcsvc_yp_prot.h ends here --- Including stdbool.h should work in most cases, but the standard bool can be almost anything. It might have a different size. Then there might be ABI breakage from using it. The fake version in stdbool.h for compilers that don't support it has type int. This has the same size, but different signedness. Bruce