<rpc/rpc.h> and rpc_createerr

Heyman, Jerrold Jerrold.Heyman at emc.com
Fri Dec 11 16:07:14 UTC 2015


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?

Thanks in advance,

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




More information about the freebsd-hackers mailing list