From owner-freebsd-hackers@freebsd.org Fri Dec 11 20:59:09 2015 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8834AA04F6F for ; Fri, 11 Dec 2015 20:59:09 +0000 (UTC) (envelope-from lidl@pix.net) Received: from hydra.pix.net (hydra.pix.net [IPv6:2001:470:e254::4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.pix.net", Issuer "Pix.Com Technologies, LLC CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4107C1E43 for ; Fri, 11 Dec 2015 20:59:09 +0000 (UTC) (envelope-from lidl@pix.net) Received: from torb.pix.net (torb.pix.net [192.168.16.32]) (authenticated bits=0) by hydra.pix.net (8.15.2/8.15.2) with ESMTPA id tBBKx76Q046540; Fri, 11 Dec 2015 15:59:07 -0500 (EST) (envelope-from lidl@pix.net) Subject: Re: and rpc_createerr To: freebsd-hackers@freebsd.org References: <9CDA60925D09954CA4BAD0284E2DFC43024EDE@MX204CL01.corp.emc.com> <1449811260.30424.50.camel@michaeleichorn.com> <9CDA60925D09954CA4BAD0284E2DFC43025552@MX204CL01.corp.emc.com> From: Kurt Lidl Message-ID: <566B391B.7090100@pix.net> Date: Fri, 11 Dec 2015 15:59:07 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <9CDA60925D09954CA4BAD0284E2DFC43025552@MX204CL01.corp.emc.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Dec 2015 20:59:09 -0000 On 12/11/15 10:22 AM, Heyman, Jerrold wrote: > Originally posted to freebsd-questions, which recommended I come here > > I've just installed FreeBSD 10.2 in order to determine the portability > of my companies code. Built gcc4.6 out of the ports/lang area, but > see the same issue using /usr/bin/cc (clang 3.4.1). > > in /usr/include/rpc/clnt.h the following snippet: > > /* > * If a creation fails, the following allows the user to figure out why. > */ > struct rpc_createerr { > enum clnt_stat cf_stat; > struct rpc_err cf_error; /* userful when cf_stat == RPC_PMAPFAILURE */ > }; > > __BEGIN_DECLS > extern struct rpc_createerr *__rpc_createeer(void); > __END_DECLS > #define rpc_createerr (*(__rpc_createeerr())) > > Note that the #define becomes active once the file is included, and in > my source code I have multiple > > struct rpc_createerr *ce; > > declarations. Both cc and gcc cite this as an error, though for different reasons. > > gcc complains that a '(' is found where a '{' is expected. > The cc error message is 'error: declaration of anyonymous struct must be a definition'. > > My other ports - Linux, AIX, Solaris, Mac OSX, do not have the #define in /usr/include/rpc/clnt.h. > The HP-UX does, but it is encapsulated within a #ifdef _REENTRANT / #endif block. > > Is this an actual error, or is there something on FreeBSD that I need > to do that is different than the other platforms? Well, the rpc_clnt_client(3) manpage says: > struct rpc_createerr rpc_createerr; > A global variable whose value is set by any RPC client handle > creation routine that fails. It is used by the routine > clnt_pcreateerror() to print the reason for the failure. As a global variable, I'm not sure how you're going to have multiple different ones... The following code compiles with no warnings -- note that the rpc_createerr structure isn't allocated (explictly) in this code. #include int main(int argc, char *argv[]) { CLIENT *client = NULL; client = clnt_create("localhost", 1, 1, "udp"); if (client == NULL) return ((int)rpc_createerr.cf_stat); return 0; } -Kurt