[gnu.g++.bug] trouble including <rpc/rpc.h> trouble including <rpc/rpc.h>

sja@CS.PURDUE.EDU (10/13/89)

I have trouble including C file <rpc/rpc.h>. The g++ receives a fatal
signal if I try compiling following program. I am compiling on Sun3
running Sun 4.0 OS. I am enclosing the program, version number and 
C preprocessor output. I would appreciate  any information in this regard.

Thanks,

Jags
sja@cs.purdue.edu

--------------------
extern "C" {
#include "/usr/include/rpc/rpc.h"
}

main()
{
   printf("done\n");
}

--------------------
version info:
/usr/local/gnu/lib/g++-1.35.1.lib/g++-include -DBSD -I/usr/local/gnu/lib/g++-1.35.1.lib/g++-include -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 dbgtest.cc

--------------------
g++ output:
g++ -c -g  -I/usr/local/gnu/lib/g++-1.35.1.lib/g++-include -DBSD dbgtest.cc
/usr/include/rpc/auth.h:47: Segmentation violation
g++: Program cc1plus got fatal signal 11.
*** Error code 1
--------------------
output of C preprocessor:
# 1 "dbgtest.cc"
 
extern "C" {
# 1 "/usr/include/rpc/rpc.h"
 

 








# 1 "/usr/include/rpc/types.h"
 

 






















extern char *malloc();








# 1 "/usr/include/sys/types.h"
 

 








 



# 1 "/usr/include/sys/sysmacros.h"
 

 





 


 


 



# 16 "/usr/include/sys/types.h"


typedef	unsigned char	u_char;
typedef	unsigned short	u_short;
typedef	unsigned int	u_int;
typedef	unsigned long	u_long;
typedef	unsigned short	ushort;		 
typedef	unsigned int	uint;		 








typedef	struct	_physadr { short r[1]; } *physadr;
typedef	struct	label_t	{
	int	val[13];
} label_t;













typedef	struct	_quad { long val[2]; } quad;
typedef	long	daddr_t;
typedef	char *	caddr_t;
typedef	u_long	ino_t;
typedef	long	swblk_t;
typedef	int	size_t;
typedef	long	time_t;
typedef	short	dev_t;
typedef	long	off_t;
typedef	u_short	uid_t;
typedef	u_short	gid_t;
typedef	long	key_t;


 









typedef	long	fd_mask;









typedef	struct fd_set {
	fd_mask	fds_bits[(((256 )+(( (sizeof(fd_mask) * 8		)	)-1))/( (sizeof(fd_mask) * 8		)	)) ];
} fd_set;

typedef	char *	addr_t;






# 107 "/usr/include/sys/types.h"



# 35 "/usr/include/rpc/types.h"

# 1 "/usr/include/sys/time.h"
 

 








 



struct timeval {
	long	tv_sec;		 
	long	tv_usec;	 
};

struct timezone {
	int	tz_minuteswest;	 
	int	tz_dsttime;	 
};












 










 







struct	itimerval {
	struct	timeval it_interval;	 
	struct	timeval it_value;	 
};


# 1 "/usr/include/time.h"
 

 


struct tm {
	int	tm_sec;
	int	tm_min;
	int	tm_hour;
	int	tm_mday;
	int	tm_mon;
	int	tm_year;
	int	tm_wday;
	int	tm_yday;
	int	tm_isdst;
	char	*tm_zone;
	long	tm_gmtoff;
};

extern	struct tm *gmtime(), *localtime();
extern	char *asctime(), *ctime();
extern	void tzset(), tzsetwall();
# 62 "/usr/include/sys/time.h"




# 36 "/usr/include/rpc/types.h"



# 12 "/usr/include/rpc/rpc.h"

# 1 "/usr/include/netinet/in.h"
 







 






 
















 















 








 







 






 








 






 






struct in_addr {
	union {
		struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
		struct { u_short s_w1,s_w2; } S_un_w;
		u_long S_addr;
	} S_un;






};

 

































 





 


struct sockaddr_in {
	short	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
};

 





 













# 188 "/usr/include/netinet/in.h"



# 13 "/usr/include/rpc/rpc.h"


 
# 1 "/usr/include/rpc/xdr.h"
 

 








 




























 





enum xdr_op {
	XDR_ENCODE=0,
	XDR_DECODE=1,
	XDR_FREE=2
};

 






 








typedef	int  (*xdrproc_t)();

 





typedef struct {
	enum xdr_op	x_op;		 
	struct xdr_ops {
		int 	(*x_getlong)();	 
		int 	(*x_putlong)();	 
		int 	(*x_getbytes)(); 
		int 	(*x_putbytes)(); 
		u_int	(*x_getpostn)(); 
		int   (*x_setpostn)(); 
		long *	(*x_inline)();	 
		void	(*x_destroy)();	 
	} *x_ops;
	caddr_t 	x_public;	 
	caddr_t		x_private;	 
	caddr_t 	x_base;		 
	int		x_handy;	 
} XDR;

 















































 










struct xdr_discrim {
	int	value;
	xdrproc_t proc;
};

 





























 


extern int 	xdr_void();
extern int 	xdr_int();
extern int 	xdr_u_int();
extern int 	xdr_long();
extern int 	xdr_u_long();
extern int 	xdr_short();
extern int 	xdr_u_short();
extern int 	xdr_bool();
extern int 	xdr_enum();
extern int 	xdr_array();
extern int 	xdr_bytes();
extern int 	xdr_opaque();
extern int 	xdr_string();
extern int 	xdr_union();

extern int 	xdr_char();
extern int 	xdr_u_char();
extern int 	xdr_vector();
extern int 	xdr_float();
extern int 	xdr_double();
extern int 	xdr_reference();
extern int 	xdr_pointer();
extern int 	xdr_wrapstring();


 




struct netobj {
	u_int	n_len;
	char	*n_bytes;
};
typedef struct netobj netobj;
extern int    xdr_netobj();

 



extern void   xdrmem_create();		 

extern void   xdrstdio_create();	 
extern void   xdrrec_create();		 
extern int  xdrrec_endofrecord();	 
extern int  xdrrec_skiprecord();	 
extern int  xdrrec_eof();		 





# 16 "/usr/include/rpc/rpc.h"


 
# 1 "/usr/include/rpc/auth.h"
 

 













 


enum auth_stat {
	AUTH_OK=0,
	 


	AUTH_BADCRED=1,			 
	AUTH_REJECTEDCRED=2,		 
	AUTH_BADVERF=3,			 
	AUTH_REJECTEDVERF=4,		 
	AUTH_TOOWEAK=5,			 
	 


	AUTH_INVALIDRESP=6,		 
	AUTH_FAILED=7			 
};


typedef u_long u_int32;	 


union des_block {
	struct {
		u_int32 high;
		u_int32 low;
	} key;
	char c[8];
};
typedef union des_block des_block;
extern int  xdr_des_block();

 


struct opaque_auth {
	int 	oa_flavor;		 
	caddr_t	oa_base;		 
	u_int	oa_length;		 
};


 


typedef struct {
	struct	opaque_auth	ah_cred;
	struct	opaque_auth	ah_verf;
	union	des_block	ah_key;
	struct auth_ops {
		void	(*ah_nextverf)();
		int	(*ah_marshal)();	 
		int	(*ah_validate)();	 
		int	(*ah_refresh)();	 
		void	(*ah_destroy)();	 
	} *ah_ops;
	caddr_t ah_private;
} AUTH;


 

































extern struct opaque_auth _null_auth;


 



 











extern AUTH *authunix_create();
extern AUTH *authunix_create_default();	 
extern AUTH *authnone_create();		 

extern AUTH *authdes_create();	






# 19 "/usr/include/rpc/rpc.h"


 
# 1 "/usr/include/rpc/clnt.h"
 

 








 




enum clnt_stat {
	RPC_SUCCESS=0,			 
	 


	RPC_CANTENCODEARGS=1,		 
	RPC_CANTDECODERES=2,		 
	RPC_CANTSEND=3,			 
	RPC_CANTRECV=4,			 
	RPC_TIMEDOUT=5,			 
	 


	RPC_VERSMISMATCH=6,		 
	RPC_AUTHERROR=7,		 
	RPC_PROGUNAVAIL=8,		 
	RPC_PROGVERSMISMATCH=9,		 
	RPC_PROCUNAVAIL=10,		 
	RPC_CANTDECODEARGS=11,		 
	RPC_SYSTEMERROR=12,		 

	 


	RPC_UNKNOWNHOST=13,		 
	RPC_UNKNOWNPROTO=17,		 

	 


	RPC_PMAPFAILURE=14,		 
	RPC_PROGNOTREGISTERED=15,	 
	 


	RPC_FAILED=16
};


 


struct rpc_err {
	enum clnt_stat re_status;
	union {
		int RE_errno;		 
		enum auth_stat RE_why;	 
		struct {
			u_long low;	 
			u_long high;	 
		} RE_vers;
		struct {		 
			long s1;
			long s2;
		} RE_lb;		 
	} ru;




};


 




typedef struct {
	AUTH	*cl_auth;			 
	struct clnt_ops {
		enum clnt_stat	(*cl_call)();	 
		void		(*cl_abort)();	 
		void		(*cl_geterr)();	 
		int 		(*cl_freeres)();  
		void		(*cl_destroy)(); 
		int           (*cl_control)(); 
	} *cl_ops;
	caddr_t			cl_private;	 
} CLIENT;


 






 















 







 








 









 









 





 





 








 










 





 






 






extern CLIENT *clntraw_create();


 


extern CLIENT *
clnt_create( );  






	
	

 










extern CLIENT *clnttcp_create();

 




















extern CLIENT *clntudp_create();
extern CLIENT *clntudp_bufcreate();

 


void clnt_pcreateerror( );	 
char *clnt_spcreateerror( );	 

 

 
void clnt_perrno( );	 

 


void clnt_perror( ); 	 
char *clnt_sperror( );	 

 


struct rpc_createerr {
	enum clnt_stat cf_stat;
	struct rpc_err cf_error;  
};

extern struct rpc_createerr rpc_createerr;




 


char *clnt_sperrno( );	 


# 311 "/usr/include/rpc/clnt.h"






# 22 "/usr/include/rpc/rpc.h"


 
# 1 "/usr/include/rpc/rpc_msg.h"
 

 









 





enum msg_type {
	CALL=0,
	REPLY=1
};

enum reply_stat {
	MSG_ACCEPTED=0,
	MSG_DENIED=1
};

enum accept_stat {
	SUCCESS=0,
	PROG_UNAVAIL=1,
	PROG_MISMATCH=2,
	PROC_UNAVAIL=3,
	GARBAGE_ARGS=4,
	SYSTEM_ERR=5
};

enum reject_stat {
	RPC_MISMATCH=0,
	AUTH_ERROR=1
};

 



 




struct accepted_reply {
	struct opaque_auth	ar_verf;
	enum accept_stat	ar_stat;
	union {
		struct {
			u_long	low;
			u_long	high;
		} AR_versions;
		struct {
			caddr_t	where;
			xdrproc_t proc;
		} AR_results;
		 
	} ru;


};

 


struct rejected_reply {
	enum reject_stat rj_stat;
	union {
		struct {
			u_long low;
			u_long high;
		} RJ_versions;
		enum auth_stat RJ_why;   
	} ru;


};

 


struct reply_body {
	enum reply_stat rp_stat;
	union {
		struct accepted_reply RP_ar;
		struct rejected_reply RP_dr;
	} ru;


};

 


struct call_body {
	u_long cb_rpcvers;	 
	u_long cb_prog;
	u_long cb_vers;
	u_long cb_proc;
	struct opaque_auth cb_cred;
	struct opaque_auth cb_verf;  
};

 


struct rpc_msg {
	u_long			rm_xid;
	enum msg_type		rm_direction;
	union {
		struct call_body RM_cmb;
		struct reply_body RM_rmb;
	} ru;


};




 





extern int 	xdr_callmsg();

 





extern int 	xdr_callhdr();

 





extern int 	xdr_replymsg();

 





extern void	_seterr_reply();
# 25 "/usr/include/rpc/rpc.h"

# 1 "/usr/include/rpc/auth_unix.h"
 

 





 






 


 


 


struct authunix_parms {
	u_long	 aup_time;
	char	*aup_machname;
	int	 aup_uid;
	int	 aup_gid;
	u_int	 aup_len;
	int	*aup_gids;
};

extern int  xdr_authunix_parms();

 




struct short_hand_verf {
	struct opaque_auth new_cred;
};
# 26 "/usr/include/rpc/rpc.h"

# 1 "/usr/include/rpc/auth_des.h"
 

 








 


enum authdes_namekind {
	ADN_FULLNAME, 
	ADN_NICKNAME
};

 



struct authdes_fullname {
	char *name;		 
	des_block key;		 
	u_long window;		 
};


 


struct authdes_cred {
	enum authdes_namekind adc_namekind;
	struct authdes_fullname adc_fullname;
	u_long adc_nickname;
};



 


struct authdes_verf {
	union {
		struct timeval adv_ctime;	 
		des_block adv_xtime;		 
	} adv_time_u;
	u_long adv_int_u;
};

 










 











# 27 "/usr/include/rpc/rpc.h"


 
# 1 "/usr/include/rpc/svc.h"
 










 





















enum xprt_stat {
	XPRT_DIED,
	XPRT_MOREREQS,
	XPRT_IDLE
};

 


typedef struct {



	int		xp_sock;

	u_short		xp_port;	  
	struct xp_ops {
	    int 	(*xp_recv)();	  
	    enum xprt_stat (*xp_stat)();  
	    int 	(*xp_getargs)();  
	    int 	(*xp_reply)();	  
	    int 	(*xp_freeargs)(); 
	    void	(*xp_destroy)();  
	} *xp_ops;
	int		xp_addrlen;	  
	struct sockaddr_in xp_raddr;	  
	struct opaque_auth xp_verf;	  
	caddr_t		xp_p1;		  
	caddr_t		xp_p2;		  
} SVCXPRT;

 




 






































 


struct svc_req {
	u_long		rq_prog;	 
	u_long		rq_vers;	 
	u_long		rq_proc;	 
	struct opaque_auth rq_cred;	 
	caddr_t		rq_clntcred;	 
	SVCXPRT	*rq_xprt;		 
};


 









extern int 	svc_register();

 






extern void	svc_unregister();

 





extern void	xprt_register();


 





extern void	xprt_unregister();





 

























extern int 	svc_sendreply();
extern void	svcerr_decode();
extern void	svcerr_weakauth();
extern void	svcerr_noproc();
extern void	svcerr_progvers();
extern void	svcerr_auth();
extern void	svcerr_noprog();

extern void	svcerr_systemerr();

    
 











 



extern fd_set svc_fdset;


 



extern void rpctest_service();


extern void	svc_getreq();

extern void	svc_getreqset();	 

extern void	svc_run(); 	  

 




 




 


extern SVCXPRT *svcraw_create();

 


extern SVCXPRT *svcudp_create();
extern SVCXPRT *svcudp_bufcreate();

 


extern SVCXPRT *svctcp_create();











# 30 "/usr/include/rpc/rpc.h"

# 1 "/usr/include/rpc/svc_auth.h"
 

 






 


extern enum auth_stat _authenticate();
# 31 "/usr/include/rpc/rpc.h"



# 3 "dbgtest.cc"

}

main()
{
   printf("done\n");
}