From owner-freebsd-hackers@freebsd.org Fri Dec 11 21:42:16 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 5BE5E9D7A53 for ; Fri, 11 Dec 2015 21:42:16 +0000 (UTC) (envelope-from Jerrold.Heyman@emc.com) Received: from mailuogwdur.emc.com (mailuogwdur.emc.com [128.221.224.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mailuogwprd51.lss.emc.com", Issuer "RSA Corporate Server CA v2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1D12B1E6B for ; Fri, 11 Dec 2015 21:42:15 +0000 (UTC) (envelope-from Jerrold.Heyman@emc.com) Received: from maildlpprd56.lss.emc.com (maildlpprd56.lss.emc.com [10.106.48.160]) by mailuogwprd51.lss.emc.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.0) with ESMTP id tBBLgC3x000786 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Fri, 11 Dec 2015 16:42:13 -0500 X-DKIM: OpenDKIM Filter v2.4.3 mailuogwprd51.lss.emc.com tBBLgC3x000786 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=emc.com; s=jan2013; t=1449870133; bh=GEw4EEMmTFJEZY7xPjzlbr4lqMU=; h=From:To:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:Content-Transfer-Encoding:MIME-Version; b=vCn9LtAZvjNlydjKjRrDwpTM95JlrER4xhq0kRcsTdXxu3D0Nh1BuhcN7yjEbGj6s bSQly19k/BsmMk8+nRvdQ8SwVqDaX0G1GgtvaiLGEz11tYHAssd7wvDTGOZqyGJywv Uy9gdcKZRpObqbuSpcjIs2qbn2ZUTLUiu4C03yUE= X-DKIM: OpenDKIM Filter v2.4.3 mailuogwprd51.lss.emc.com tBBLgC3x000786 Received: from mailusrhubprd51.lss.emc.com (mailusrhubprd51.lss.emc.com [10.106.48.24]) by maildlpprd56.lss.emc.com (RSA Interceptor) for ; Fri, 11 Dec 2015 16:41:04 -0500 Received: from mxhub19.corp.emc.com (mxhub19.corp.emc.com [10.254.93.48]) by mailusrhubprd51.lss.emc.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.0) with ESMTP id tBBLftrv030777 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 11 Dec 2015 16:41:55 -0500 Received: from MXHUB223.corp.emc.com (10.253.68.93) by mxhub19.corp.emc.com (10.254.93.48) with Microsoft SMTP Server (TLS) id 8.3.327.1; Fri, 11 Dec 2015 16:41:55 -0500 Received: from MX204CL01.corp.emc.com ([fe80::b84b:d314:29a2:cd6e]) by MXHUB223.corp.emc.com ([10.253.68.93]) with mapi id 14.03.0266.001; Fri, 11 Dec 2015 16:41:54 -0500 From: "Heyman, Jerrold" To: "freebsd-hackers@freebsd.org" Subject: RE: and rpc_createerr Thread-Topic: and rpc_createerr Thread-Index: AdEzg0yBm3kk7sToTF2+wjgksEN8IAAelUAAAApQJ5AAFnNEgAAJWFIw Date: Fri, 11 Dec 2015 21:41:51 +0000 Message-ID: <9CDA60925D09954CA4BAD0284E2DFC4302585E@MX204CL01.corp.emc.com> References: <9CDA60925D09954CA4BAD0284E2DFC43024EDE@MX204CL01.corp.emc.com> <1449811260.30424.50.camel@michaeleichorn.com> <9CDA60925D09954CA4BAD0284E2DFC43025552@MX204CL01.corp.emc.com> <566B391B.7090100@pix.net> In-Reply-To: <566B391B.7090100@pix.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.226.32] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Sentrion-Hostname: mailusrhubprd51.lss.emc.com X-RSA-Classifications: Source Code, public 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 21:42:16 -0000 > -----Original Message----- > From: owner-freebsd-hackers@freebsd.org [mailto:owner-freebsd-hackers@fre= ebsd.org] On Behalf Of Kurt > Lidl > Sent: Friday, December 11, 2015 3:59 PM > To: freebsd-hackers@freebsd.org > Subject: Re: and rpc_createerr >=20 > 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 =3D=3D > > 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 differ= ent reasons. > > > > gcc complains that a '(' is found where a '{' is expected. > > The cc error message is 'error: declaration of anyonymous struct must b= e 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 / #en= dif block. > > > > Is this an actual error, or is there something on FreeBSD that I need > > to do that is different than the other platforms? >=20 > Well, the rpc_clnt_client(3) manpage says: >=20 > > struct rpc_createerr rpc_createerr; > > A global variable whose value is set by any RPC client ha= ndle > > creation routine that fails. It is used by the routine > > clnt_pcreateerror() to print the reason for the failure. >=20 > As a global variable, I'm not sure how you're going to have multiple diff= erent ones... >=20 > The following code compiles with no warnings -- note that the rpc_createe= rr structure isn't allocated (explictly) in > this code. >=20 > #include > int main(int argc, char *argv[]) > { > CLIENT *client =3D NULL; >=20 > client =3D clnt_create("localhost", 1, 1, "udp"); >=20 > if (client =3D=3D NULL) > return ((int)rpc_createerr.cf_stat); >=20 > return 0; > } Kurt, Compiling the above example code with -E gives the following for the return= ((int)rpc_createerr.cf_stat); line return ((int)(*(__rpc_createerr())).cf_stat); which is what is expected based on the #define. Adding a declaration, 'struct rpc_createerr *ce;' results in the generation= of struct (*(__rpc_createerr())) *ce; Using (-E) compile option. Again, correct textual substitution for the #de= fine, but when compiling with -c I get the following=20 tester.c:6:4 error: declaration of anonymous struct must be a definition struct rpc_createerr *ce; ^ tester.c:6:4: warning: declaration does not declare anything [-Wmissing-dec= larations] struct rpc_createerr *ce; ^^^^^ Jerry Jerry Heyman |=20 Principal Software Engineer | Software is the difference betw= een EMC Data Domain | hardware and reality Jerrold.Heyman@emc.com / 919.597.7812 |