Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Dec 2015 19:49:17 +0000
From:      "Heyman, Jerrold" <Jerrold.Heyman@emc.com>
To:        "freebsd-questions@freebsd.org" <freebsd-questions@freebsd.org>
Subject:   <rpc/rpc.h> and rpc_createerr
Message-ID:  <9CDA60925D09954CA4BAD0284E2DFC43024EDE@MX204CL01.corp.emc.com>

next in thread | raw e-mail | index | archive | help
I've just installed FreeBSD 10.2 in order to determine the portability of m=
y companies code.  Built gcc4.6 out of the ports/lang area, but see the sam=
e 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_PMAPFA=
ILURE */
};

__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 s=
ource 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?

Thanks in advance,

jerry

Jerry Heyman                           |
Principal Software Engineer            |    Software is the difference
EMC Data Domain                        |    between hardware and reality
Jerrold.Heyman@emc.com / 919.597.7812  |




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