From 30fac06891c59a7fb784f6faa4e92921a84c73db Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Sat, 10 Nov 2012 17:29:53 +0100
Subject: [PATCH] Automatically generate XDR header files from .x sources
 using rpcgen

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 Makefile.am           |   23 +-
 src/Makefile.am       |    2 +-
 tirpc/rpc/rpcb_prot.h |  797 -------------------------------------------------
 tirpc/rpcsvc/crypt.h  |  109 -------
 4 files changed, 21 insertions(+), 910 deletions(-)
 delete mode 100644 tirpc/rpc/rpcb_prot.h
 delete mode 100644 tirpc/rpcsvc/crypt.h

diff --git a/Makefile.am b/Makefile.am
index afb4e38..7e63f78 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,9 +1,12 @@
 SUBDIRS = src man doc rpcgen
 ACLOCAL_AMFLAGS = -I m4
 
+GENFILES = \
+			 tirpc/rpcsvc/crypt.h \
+			 tirpc/rpc/rpcb_prot.h
+
 nobase_include_HEADERS = tirpc/netconfig.h \
 			 tirpc/rpcsvc/crypt.x \
-			 tirpc/rpcsvc/crypt.h \
 			 tirpc/rpc/xdr.h \
 			 tirpc/rpc/types.h \
 			 tirpc/rpc/svc_soc.h \
@@ -15,7 +18,6 @@ nobase_include_HEADERS = tirpc/netconfig.h \
 			 tirpc/rpc/rpcent.h \
 			 tirpc/rpc/rpc_com.h \
 			 tirpc/rpc/rpcb_prot.x \
-			 tirpc/rpc/rpcb_prot.h \
 			 tirpc/rpc/rpcb_clnt.h \
 			 tirpc/rpc/raw.h \
 			 tirpc/rpc/pmap_rmt.h \
@@ -32,6 +34,21 @@ nobase_include_HEADERS = tirpc/netconfig.h \
 			 tirpc/rpc/auth.h \
 			 tirpc/rpc/auth_gss.h \
 			 tirpc/rpc/auth_des.h
-    
+
+nobase_nodist_include_HEADERS = $(GENFILES)
+
+BUILT_SOURCES = $(GENFILES)
+
 pkgconfigdir=$(libdir)/pkgconfig
 pkgconfig_DATA = libtirpc.pc
+
+$(GENFILES): %.h: %.x $(top_builddir)/rpcgen/rpcgen
+	mkdir -p $(dir $@)
+	$(top_builddir)/rpcgen/rpcgen -h -o $@ $<
+
+$(top_builddir)/rpcgen/rpcgen: force
+	cd rpcgen && $(MAKE)
+
+force:
+
+CLEANFILES = $(GENFILES)
diff --git a/src/Makefile.am b/src/Makefile.am
index 6dc259e..bd276cf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,7 +7,7 @@
 
 
 INCLUDES = -I$(top_srcdir)/tirpc -DPORTMAP -DVERSION="\"$(VERSION)\"" \
-		-D_GNU_SOURCE -Wall -pipe  
+		-D_GNU_SOURCE -Wall -pipe -I$(top_builddir)/tirpc
 
 lib_LTLIBRARIES = libtirpc.la
 
diff --git a/tirpc/rpc/rpcb_prot.h b/tirpc/rpc/rpcb_prot.h
deleted file mode 100644
index 7ae48b8..0000000
--- a/tirpc/rpc/rpcb_prot.h
+++ /dev/null
@@ -1,797 +0,0 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
-#ifndef _RPCB_PROT_H_RPCGEN
-#define _RPCB_PROT_H_RPCGEN
-
-#include <rpc/rpc.h>
-
-#ifndef IXDR_GET_INT32
-#define IXDR_GET_INT32(buf) IXDR_GET_LONG((buf))
-#endif
-#ifndef IXDR_PUT_INT32
-#define IXDR_PUT_INT32(buf, v) IXDR_PUT_LONG((buf), (v))
-#endif
-#ifndef IXDR_GET_U_INT32
-#define IXDR_GET_U_INT32(buf) IXDR_GET_U_LONG((buf))
-#endif
-#ifndef IXDR_PUT_U_INT32
-#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_U_LONG((buf), (v))
-#endif
-/*
- * $FreeBSD: src/include/rpc/rpcb_prot.x,v 1.3 2002/03/13 10:29:06 obrien Exp $
- *
- * Copyright (c) 2009, Sun Microsystems, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * - Redistributions of source code must retain the above copyright notice,
- *   this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the name of Sun Microsystems, Inc. nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * Copyright (c) 1988 by Sun Microsystems, Inc.
- */
-/* from rpcb_prot.x */
-
-/* #pragma ident	"@(#)rpcb_prot.x	1.5	94/04/29 SMI" */
-
-#ifndef _KERNEL
-
-
-/*
- * The following procedures are supported by the protocol in version 3:
- *
- * RPCBPROC_NULL() returns ()
- * 	takes nothing, returns nothing
- *
- * RPCBPROC_SET(rpcb) returns (bool_t)
- * 	TRUE is success, FALSE is failure.  Registers the tuple
- *	[prog, vers, address, owner, netid].
- *	Finds out owner and netid information on its own.
- *
- * RPCBPROC_UNSET(rpcb) returns (bool_t)
- *	TRUE is success, FALSE is failure.  Un-registers tuple
- *	[prog, vers, netid].  addresses is ignored.
- *	If netid is NULL, unregister all.
- *
- * RPCBPROC_GETADDR(rpcb) returns (string).
- *	0 is failure.  Otherwise returns the universal address where the
- *	triple [prog, vers, netid] is registered.  Ignore address and owner.
- *
- * RPCBPROC_DUMP() RETURNS (rpcblist_ptr)
- *	used to dump the entire rpcbind maps
- *
- * RPCBPROC_CALLIT(rpcb_rmtcallargs)
- * 	RETURNS (rpcb_rmtcallres);
- * 	Calls the procedure on the remote machine.  If it is not registered,
- *	this procedure is quiet; i.e. it does not return error information!!!
- *	This routine only passes null authentication parameters.
- *	It has no interface to xdr routines for RPCBPROC_CALLIT.
- *
- * RPCBPROC_GETTIME() returns (int).
- *	Gets the remote machines time
- *
- * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf)
- *	Returns the netbuf address from universal address.
- *
- * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string)
- *	Returns the universal address from netbuf address.
- *
- * END OF RPCBIND VERSION 3 PROCEDURES
- */
-/*
- * Except for RPCBPROC_CALLIT, the procedures above are carried over to
- * rpcbind version 4.  Those below are added or modified for version 4.
- * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER
- * AS RPCBPROC_CALLIT.
- *
- * RPCBPROC_BCAST(rpcb_rmtcallargs)
- * 	RETURNS (rpcb_rmtcallres);
- * 	Calls the procedure on the remote machine.  If it is not registered,
- *	this procedure IS quiet; i.e. it DOES NOT return error information!!!
- *	This routine should be used for broadcasting and nothing else.
- *
- * RPCBPROC_GETVERSADDR(rpcb) returns (string).
- *	0 is failure.  Otherwise returns the universal address where the
- *	triple [prog, vers, netid] is registered.  Ignore address and owner.
- *	Same as RPCBPROC_GETADDR except that if the given version number
- *	is not available, the address is not returned.
- *
- * RPCBPROC_INDIRECT(rpcb_rmtcallargs)
- * 	RETURNS (rpcb_rmtcallres);
- * 	Calls the procedure on the remote machine.  If it is not registered,
- *	this procedure is NOT quiet; i.e. it DOES return error information!!!
- * 	as any normal application would expect.
- *
- * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr).
- *	Same as RPCBPROC_GETADDR except that it returns a list of all the
- *	addresses registered for the combination (prog, vers) (for all
- *	transports).
- *
- * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers)
- *	Returns the statistics about the kind of requests received by rpcbind.
- */
-
-/*
- * A mapping of (program, version, network ID) to address
- */
-
-struct rpcb {
-	rpcprog_t r_prog;
-	rpcvers_t r_vers;
-	char *r_netid;
-	char *r_addr;
-	char *r_owner;
-};
-typedef struct rpcb rpcb;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb(XDR *, rpcb*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb(XDR *, rpcb*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb();
-#endif /* Old Style C */ 
-
-
-typedef rpcb RPCB;
-
-
-/*
- * A list of mappings
- *
- * Below are two definitions for the rpcblist structure.  This is done because
- * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a
- * struct rpcblist * that rpcgen would produce.  One version of the rpcblist
- * structure (actually called rp__list) is used with rpcgen, and the other is
- * defined only in the header file for compatibility with the specified
- * interface.
- */
-
-struct rp__list {
-	rpcb rpcb_map;
-	struct rp__list *rpcb_next;
-};
-typedef struct rp__list rp__list;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rp__list(XDR *, rp__list*);
-#elif __STDC__ 
-extern  bool_t xdr_rp__list(XDR *, rp__list*);
-#else /* Old Style C */ 
-bool_t xdr_rp__list();
-#endif /* Old Style C */ 
-
-
-typedef rp__list *rpcblist_ptr;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcblist_ptr(XDR *, rpcblist_ptr*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcblist_ptr(XDR *, rpcblist_ptr*);
-#else /* Old Style C */ 
-bool_t xdr_rpcblist_ptr();
-#endif /* Old Style C */ 
-
-
-typedef struct rp__list rpcblist;
-typedef struct rp__list RPCBLIST;
-
-#ifndef __cplusplus
-struct rpcblist {
- RPCB rpcb_map;
- struct rpcblist *rpcb_next;
-};
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern bool_t xdr_rpcblist(XDR *, rpcblist**);
-#ifdef __cplusplus
-}
-#endif
-
-
-/*
- * Arguments of remote calls
- */
-
-struct rpcb_rmtcallargs {
-	rpcprog_t prog;
-	rpcvers_t vers;
-	rpcproc_t proc;
-	struct {
-		u_int args_len;
-		char *args_val;
-	} args;
-};
-typedef struct rpcb_rmtcallargs rpcb_rmtcallargs;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_rmtcallargs(XDR *, rpcb_rmtcallargs*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_rmtcallargs(XDR *, rpcb_rmtcallargs*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_rmtcallargs();
-#endif /* Old Style C */ 
-
-
-/*
- * Client-side only representation of rpcb_rmtcallargs structure.
- *
- * The routine that XDRs the rpcb_rmtcallargs structure must deal with the
- * opaque arguments in the "args" structure.  xdr_rpcb_rmtcallargs() needs to
- * be passed the XDR routine that knows the args' structure.  This routine
- * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
- * the application being called already knows the args structure.  So we use a
- * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which
- * includes the args' XDR routine.
- */
-struct r_rpcb_rmtcallargs {
- rpcprog_t prog;
- rpcvers_t vers;
- rpcproc_t proc;
- struct {
- u_int args_len;
- char *args_val;
- } args;
- xdrproc_t xdr_args; /* encodes args */
-};
-
-
-/*
- * Results of the remote call
- */
-
-struct rpcb_rmtcallres {
-	char *addr;
-	struct {
-		u_int results_len;
-		char *results_val;
-	} results;
-};
-typedef struct rpcb_rmtcallres rpcb_rmtcallres;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_rmtcallres(XDR *, rpcb_rmtcallres*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_rmtcallres(XDR *, rpcb_rmtcallres*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_rmtcallres();
-#endif /* Old Style C */ 
-
-
-/*
- * Client-side only representation of rpcb_rmtcallres structure.
- */
-struct r_rpcb_rmtcallres {
- char *addr;
- struct {
- u_int32_t results_len;
- char *results_val;
- } results;
- xdrproc_t xdr_res; /* decodes results */
-};
-
-/*
- * rpcb_entry contains a merged address of a service on a particular
- * transport, plus associated netconfig information.  A list of rpcb_entrys
- * is returned by RPCBPROC_GETADDRLIST.  See netconfig.h for values used
- * in r_nc_* fields.
- */
-
-struct rpcb_entry {
-	char *r_maddr;
-	char *r_nc_netid;
-	u_int r_nc_semantics;
-	char *r_nc_protofmly;
-	char *r_nc_proto;
-};
-typedef struct rpcb_entry rpcb_entry;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_entry(XDR *, rpcb_entry*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_entry(XDR *, rpcb_entry*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_entry();
-#endif /* Old Style C */ 
-
-
-/*
- * A list of addresses supported by a service.
- */
-
-struct rpcb_entry_list {
-	rpcb_entry rpcb_entry_map;
-	struct rpcb_entry_list *rpcb_entry_next;
-};
-typedef struct rpcb_entry_list rpcb_entry_list;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_entry_list(XDR *, rpcb_entry_list*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_entry_list(XDR *, rpcb_entry_list*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_entry_list();
-#endif /* Old Style C */ 
-
-
-typedef rpcb_entry_list *rpcb_entry_list_ptr;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_entry_list_ptr(XDR *, rpcb_entry_list_ptr*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_entry_list_ptr(XDR *, rpcb_entry_list_ptr*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_entry_list_ptr();
-#endif /* Old Style C */ 
-
-
-/*
- * rpcbind statistics
- */
-
-#define rpcb_highproc_2 RPCBPROC_CALLIT
-#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR
-#define rpcb_highproc_4 RPCBPROC_GETSTAT
-#define RPCBSTAT_HIGHPROC 13
-#define RPCBVERS_STAT 3
-#define RPCBVERS_4_STAT 2
-#define RPCBVERS_3_STAT 1
-#define RPCBVERS_2_STAT 0
-
-/* Link list of all the stats about getport and getaddr */
-
-struct rpcbs_addrlist {
-	rpcprog_t prog;
-	rpcvers_t vers;
-	int success;
-	int failure;
-	char *netid;
-	struct rpcbs_addrlist *next;
-};
-typedef struct rpcbs_addrlist rpcbs_addrlist;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcbs_addrlist(XDR *, rpcbs_addrlist*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcbs_addrlist(XDR *, rpcbs_addrlist*);
-#else /* Old Style C */ 
-bool_t xdr_rpcbs_addrlist();
-#endif /* Old Style C */ 
-
-
-/* Link list of all the stats about rmtcall */
-
-struct rpcbs_rmtcalllist {
-	rpcprog_t prog;
-	rpcvers_t vers;
-	rpcproc_t proc;
-	int success;
-	int failure;
-	int indirect;
-	char *netid;
-	struct rpcbs_rmtcalllist *next;
-};
-typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcbs_rmtcalllist(XDR *, rpcbs_rmtcalllist*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcbs_rmtcalllist(XDR *, rpcbs_rmtcalllist*);
-#else /* Old Style C */ 
-bool_t xdr_rpcbs_rmtcalllist();
-#endif /* Old Style C */ 
-
-
-typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcbs_proc(XDR *, rpcbs_proc);
-#elif __STDC__ 
-extern  bool_t xdr_rpcbs_proc(XDR *, rpcbs_proc);
-#else /* Old Style C */ 
-bool_t xdr_rpcbs_proc();
-#endif /* Old Style C */ 
-
-
-typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcbs_addrlist_ptr(XDR *, rpcbs_addrlist_ptr*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcbs_addrlist_ptr(XDR *, rpcbs_addrlist_ptr*);
-#else /* Old Style C */ 
-bool_t xdr_rpcbs_addrlist_ptr();
-#endif /* Old Style C */ 
-
-
-typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *, rpcbs_rmtcalllist_ptr*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *, rpcbs_rmtcalllist_ptr*);
-#else /* Old Style C */ 
-bool_t xdr_rpcbs_rmtcalllist_ptr();
-#endif /* Old Style C */ 
-
-
-struct rpcb_stat {
-	rpcbs_proc info;
-	int setinfo;
-	int unsetinfo;
-	rpcbs_addrlist_ptr addrinfo;
-	rpcbs_rmtcalllist_ptr rmtinfo;
-};
-typedef struct rpcb_stat rpcb_stat;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_stat(XDR *, rpcb_stat*);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_stat(XDR *, rpcb_stat*);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_stat();
-#endif /* Old Style C */ 
-
-
-/*
- * One rpcb_stat structure is returned for each version of rpcbind
- * being monitored.
- */
-
-typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
-#ifdef __cplusplus 
-extern "C" bool_t xdr_rpcb_stat_byvers(XDR *, rpcb_stat_byvers);
-#elif __STDC__ 
-extern  bool_t xdr_rpcb_stat_byvers(XDR *, rpcb_stat_byvers);
-#else /* Old Style C */ 
-bool_t xdr_rpcb_stat_byvers();
-#endif /* Old Style C */ 
-
-
-/*
- * We don't define netbuf in RPCL, since it would contain structure member
- * names that would conflict with the definition of struct netbuf in
- * <tiuser.h>.  Instead we merely declare the XDR routine xdr_netbuf() here,
- * and implement it ourselves in rpc/rpcb_prot.c.
- */
-#ifdef __cplusplus
-extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *);
-
-#else /* __STDC__ */
-extern bool_t xdr_netbuf(XDR *, struct netbuf *);
-
-#endif
-
-#define RPCBVERS_3 RPCBVERS
-#define RPCBVERS_4 RPCBVERS4
-
-#define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock"
-
-#else /* ndef _KERNEL */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * A mapping of (program, version, network ID) to address
- */
-struct rpcb {
- rpcprog_t r_prog; /* program number */
- rpcvers_t r_vers; /* version number */
- char *r_netid; /* network id */
- char *r_addr; /* universal address */
- char *r_owner; /* owner of the mapping */
-};
-typedef struct rpcb RPCB;
-
-/*
- * A list of mappings
- */
-struct rpcblist {
- RPCB rpcb_map;
- struct rpcblist *rpcb_next;
-};
-typedef struct rpcblist RPCBLIST;
-typedef struct rpcblist *rpcblist_ptr;
-
-/*
- * Remote calls arguments
- */
-struct rpcb_rmtcallargs {
- rpcprog_t prog; /* program number */
- rpcvers_t vers; /* version number */
- rpcproc_t proc; /* procedure number */
- u_int32_t arglen; /* arg len */
- caddr_t args_ptr; /* argument */
- xdrproc_t xdr_args; /* XDR routine for argument */
-};
-typedef struct rpcb_rmtcallargs rpcb_rmtcallargs;
-
-/*
- * Remote calls results
- */
-struct rpcb_rmtcallres {
- char *addr_ptr; /* remote universal address */
- u_int32_t resultslen; /* results length */
- caddr_t results_ptr; /* results */
- xdrproc_t xdr_results; /* XDR routine for result */
-};
-typedef struct rpcb_rmtcallres rpcb_rmtcallres;
-
-struct rpcb_entry {
- char *r_maddr;
- char *r_nc_netid;
- unsigned int r_nc_semantics;
- char *r_nc_protofmly;
- char *r_nc_proto;
-};
-typedef struct rpcb_entry rpcb_entry;
-
-/*
- * A list of addresses supported by a service.
- */
-
-struct rpcb_entry_list {
- rpcb_entry rpcb_entry_map;
- struct rpcb_entry_list *rpcb_entry_next;
-};
-typedef struct rpcb_entry_list rpcb_entry_list;
-
-typedef rpcb_entry_list *rpcb_entry_list_ptr;
-
-/*
- * rpcbind statistics
- */
-
-#define rpcb_highproc_2 RPCBPROC_CALLIT
-#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR
-#define rpcb_highproc_4 RPCBPROC_GETSTAT
-#define RPCBSTAT_HIGHPROC 13
-#define RPCBVERS_STAT 3
-#define RPCBVERS_4_STAT 2
-#define RPCBVERS_3_STAT 1
-#define RPCBVERS_2_STAT 0
-
-/* Link list of all the stats about getport and getaddr */
-
-struct rpcbs_addrlist {
- rpcprog_t prog;
- rpcvers_t vers;
- int success;
- int failure;
- char *netid;
- struct rpcbs_addrlist *next;
-};
-typedef struct rpcbs_addrlist rpcbs_addrlist;
-
-/* Link list of all the stats about rmtcall */
-
-struct rpcbs_rmtcalllist {
- rpcprog_t prog;
- rpcvers_t vers;
- rpcproc_t proc;
- int success;
- int failure;
- int indirect;
- char *netid;
- struct rpcbs_rmtcalllist *next;
-};
-typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist;
-
-typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
-
-typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
-
-typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
-
-struct rpcb_stat {
- rpcbs_proc info;
- int setinfo;
- int unsetinfo;
- rpcbs_addrlist_ptr addrinfo;
- rpcbs_rmtcalllist_ptr rmtinfo;
-};
-typedef struct rpcb_stat rpcb_stat;
-
-/*
- * One rpcb_stat structure is returned for each version of rpcbind
- * being monitored.
- */
-
-typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ndef _KERNEL */
-
-#define RPCBPROG ((u_int32_t)100000)
-#define RPCBVERS ((u_int32_t)3)
-
-#ifdef __cplusplus
-#define RPCBPROC_SET ((u_int32_t)1)
-extern "C" bool_t * rpcbproc_set_3(rpcb *, CLIENT *);
-extern "C" bool_t * rpcbproc_set_3_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_UNSET ((u_int32_t)2)
-extern "C" bool_t * rpcbproc_unset_3(rpcb *, CLIENT *);
-extern "C" bool_t * rpcbproc_unset_3_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_GETADDR ((u_int32_t)3)
-extern "C" char ** rpcbproc_getaddr_3(rpcb *, CLIENT *);
-extern "C" char ** rpcbproc_getaddr_3_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_DUMP ((u_int32_t)4)
-extern "C" rpcblist_ptr * rpcbproc_dump_3(void *, CLIENT *);
-extern "C" rpcblist_ptr * rpcbproc_dump_3_svc(void *, struct svc_req *);
-#define RPCBPROC_CALLIT ((u_int32_t)5)
-extern "C" rpcb_rmtcallres * rpcbproc_callit_3(rpcb_rmtcallargs *, CLIENT *);
-extern "C" rpcb_rmtcallres * rpcbproc_callit_3_svc(rpcb_rmtcallargs *, struct svc_req *);
-#define RPCBPROC_GETTIME ((u_int32_t)6)
-extern "C" u_int * rpcbproc_gettime_3(void *, CLIENT *);
-extern "C" u_int * rpcbproc_gettime_3_svc(void *, struct svc_req *);
-#define RPCBPROC_UADDR2TADDR ((u_int32_t)7)
-extern "C" struct netbuf * rpcbproc_uaddr2taddr_3(char **, CLIENT *);
-extern "C" struct netbuf * rpcbproc_uaddr2taddr_3_svc(char **, struct svc_req *);
-#define RPCBPROC_TADDR2UADDR ((u_int32_t)8)
-extern "C" char ** rpcbproc_taddr2uaddr_3(struct netbuf *, CLIENT *);
-extern "C" char ** rpcbproc_taddr2uaddr_3_svc(struct netbuf *, struct svc_req *);
-
-#elif __STDC__
-#define RPCBPROC_SET ((u_int32_t)1)
-extern  bool_t * rpcbproc_set_3(rpcb *, CLIENT *);
-extern  bool_t * rpcbproc_set_3_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_UNSET ((u_int32_t)2)
-extern  bool_t * rpcbproc_unset_3(rpcb *, CLIENT *);
-extern  bool_t * rpcbproc_unset_3_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_GETADDR ((u_int32_t)3)
-extern  char ** rpcbproc_getaddr_3(rpcb *, CLIENT *);
-extern  char ** rpcbproc_getaddr_3_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_DUMP ((u_int32_t)4)
-extern  rpcblist_ptr * rpcbproc_dump_3(void *, CLIENT *);
-extern  rpcblist_ptr * rpcbproc_dump_3_svc(void *, struct svc_req *);
-#define RPCBPROC_CALLIT ((u_int32_t)5)
-extern  rpcb_rmtcallres * rpcbproc_callit_3(rpcb_rmtcallargs *, CLIENT *);
-extern  rpcb_rmtcallres * rpcbproc_callit_3_svc(rpcb_rmtcallargs *, struct svc_req *);
-#define RPCBPROC_GETTIME ((u_int32_t)6)
-extern  u_int * rpcbproc_gettime_3(void *, CLIENT *);
-extern  u_int * rpcbproc_gettime_3_svc(void *, struct svc_req *);
-#define RPCBPROC_UADDR2TADDR ((u_int32_t)7)
-extern  struct netbuf * rpcbproc_uaddr2taddr_3(char **, CLIENT *);
-extern  struct netbuf * rpcbproc_uaddr2taddr_3_svc(char **, struct svc_req *);
-#define RPCBPROC_TADDR2UADDR ((u_int32_t)8)
-extern  char ** rpcbproc_taddr2uaddr_3(struct netbuf *, CLIENT *);
-extern  char ** rpcbproc_taddr2uaddr_3_svc(struct netbuf *, struct svc_req *);
-
-#else /* Old Style C */ 
-#define RPCBPROC_SET ((u_int32_t)1)
-extern  bool_t * rpcbproc_set_3();
-extern  bool_t * rpcbproc_set_3_svc();
-#define RPCBPROC_UNSET ((u_int32_t)2)
-extern  bool_t * rpcbproc_unset_3();
-extern  bool_t * rpcbproc_unset_3_svc();
-#define RPCBPROC_GETADDR ((u_int32_t)3)
-extern  char ** rpcbproc_getaddr_3();
-extern  char ** rpcbproc_getaddr_3_svc();
-#define RPCBPROC_DUMP ((u_int32_t)4)
-extern  rpcblist_ptr * rpcbproc_dump_3();
-extern  rpcblist_ptr * rpcbproc_dump_3_svc();
-#define RPCBPROC_CALLIT ((u_int32_t)5)
-extern  rpcb_rmtcallres * rpcbproc_callit_3();
-extern  rpcb_rmtcallres * rpcbproc_callit_3_svc();
-#define RPCBPROC_GETTIME ((u_int32_t)6)
-extern  u_int * rpcbproc_gettime_3();
-extern  u_int * rpcbproc_gettime_3_svc();
-#define RPCBPROC_UADDR2TADDR ((u_int32_t)7)
-extern  struct netbuf * rpcbproc_uaddr2taddr_3();
-extern  struct netbuf * rpcbproc_uaddr2taddr_3_svc();
-#define RPCBPROC_TADDR2UADDR ((u_int32_t)8)
-extern  char ** rpcbproc_taddr2uaddr_3();
-extern  char ** rpcbproc_taddr2uaddr_3_svc();
-#endif /* Old Style C */ 
-#define RPCBVERS4 ((u_int32_t)4)
-
-#ifdef __cplusplus
-extern "C" bool_t * rpcbproc_set_4(rpcb *, CLIENT *);
-extern "C" bool_t * rpcbproc_set_4_svc(rpcb *, struct svc_req *);
-extern "C" bool_t * rpcbproc_unset_4(rpcb *, CLIENT *);
-extern "C" bool_t * rpcbproc_unset_4_svc(rpcb *, struct svc_req *);
-extern "C" char ** rpcbproc_getaddr_4(rpcb *, CLIENT *);
-extern "C" char ** rpcbproc_getaddr_4_svc(rpcb *, struct svc_req *);
-extern "C" rpcblist_ptr * rpcbproc_dump_4(void *, CLIENT *);
-extern "C" rpcblist_ptr * rpcbproc_dump_4_svc(void *, struct svc_req *);
-#define RPCBPROC_BCAST ((u_int32_t)RPCBPROC_CALLIT)
-extern "C" rpcb_rmtcallres * rpcbproc_bcast_4(rpcb_rmtcallargs *, CLIENT *);
-extern "C" rpcb_rmtcallres * rpcbproc_bcast_4_svc(rpcb_rmtcallargs *, struct svc_req *);
-extern "C" u_int * rpcbproc_gettime_4(void *, CLIENT *);
-extern "C" u_int * rpcbproc_gettime_4_svc(void *, struct svc_req *);
-extern "C" struct netbuf * rpcbproc_uaddr2taddr_4(char **, CLIENT *);
-extern "C" struct netbuf * rpcbproc_uaddr2taddr_4_svc(char **, struct svc_req *);
-extern "C" char ** rpcbproc_taddr2uaddr_4(struct netbuf *, CLIENT *);
-extern "C" char ** rpcbproc_taddr2uaddr_4_svc(struct netbuf *, struct svc_req *);
-#define RPCBPROC_GETVERSADDR ((u_int32_t)9)
-extern "C" char ** rpcbproc_getversaddr_4(rpcb *, CLIENT *);
-extern "C" char ** rpcbproc_getversaddr_4_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_INDIRECT ((u_int32_t)10)
-extern "C" rpcb_rmtcallres * rpcbproc_indirect_4(rpcb_rmtcallargs *, CLIENT *);
-extern "C" rpcb_rmtcallres * rpcbproc_indirect_4_svc(rpcb_rmtcallargs *, struct svc_req *);
-#define RPCBPROC_GETADDRLIST ((u_int32_t)11)
-extern "C" rpcb_entry_list_ptr * rpcbproc_getaddrlist_4(rpcb *, CLIENT *);
-extern "C" rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_GETSTAT ((u_int32_t)12)
-extern "C" rpcb_stat * rpcbproc_getstat_4(void *, CLIENT *);
-extern "C" rpcb_stat * rpcbproc_getstat_4_svc(void *, struct svc_req *);
-
-#elif __STDC__
-extern  bool_t * rpcbproc_set_4(rpcb *, CLIENT *);
-extern  bool_t * rpcbproc_set_4_svc(rpcb *, struct svc_req *);
-extern  bool_t * rpcbproc_unset_4(rpcb *, CLIENT *);
-extern  bool_t * rpcbproc_unset_4_svc(rpcb *, struct svc_req *);
-extern  char ** rpcbproc_getaddr_4(rpcb *, CLIENT *);
-extern  char ** rpcbproc_getaddr_4_svc(rpcb *, struct svc_req *);
-extern  rpcblist_ptr * rpcbproc_dump_4(void *, CLIENT *);
-extern  rpcblist_ptr * rpcbproc_dump_4_svc(void *, struct svc_req *);
-#define RPCBPROC_BCAST ((u_int32_t)RPCBPROC_CALLIT)
-extern  rpcb_rmtcallres * rpcbproc_bcast_4(rpcb_rmtcallargs *, CLIENT *);
-extern  rpcb_rmtcallres * rpcbproc_bcast_4_svc(rpcb_rmtcallargs *, struct svc_req *);
-extern  u_int * rpcbproc_gettime_4(void *, CLIENT *);
-extern  u_int * rpcbproc_gettime_4_svc(void *, struct svc_req *);
-extern  struct netbuf * rpcbproc_uaddr2taddr_4(char **, CLIENT *);
-extern  struct netbuf * rpcbproc_uaddr2taddr_4_svc(char **, struct svc_req *);
-extern  char ** rpcbproc_taddr2uaddr_4(struct netbuf *, CLIENT *);
-extern  char ** rpcbproc_taddr2uaddr_4_svc(struct netbuf *, struct svc_req *);
-#define RPCBPROC_GETVERSADDR ((u_int32_t)9)
-extern  char ** rpcbproc_getversaddr_4(rpcb *, CLIENT *);
-extern  char ** rpcbproc_getversaddr_4_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_INDIRECT ((u_int32_t)10)
-extern  rpcb_rmtcallres * rpcbproc_indirect_4(rpcb_rmtcallargs *, CLIENT *);
-extern  rpcb_rmtcallres * rpcbproc_indirect_4_svc(rpcb_rmtcallargs *, struct svc_req *);
-#define RPCBPROC_GETADDRLIST ((u_int32_t)11)
-extern  rpcb_entry_list_ptr * rpcbproc_getaddrlist_4(rpcb *, CLIENT *);
-extern  rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc(rpcb *, struct svc_req *);
-#define RPCBPROC_GETSTAT ((u_int32_t)12)
-extern  rpcb_stat * rpcbproc_getstat_4(void *, CLIENT *);
-extern  rpcb_stat * rpcbproc_getstat_4_svc(void *, struct svc_req *);
-
-#else /* Old Style C */ 
-extern  bool_t * rpcbproc_set_4();
-extern  bool_t * rpcbproc_set_4_svc();
-extern  bool_t * rpcbproc_unset_4();
-extern  bool_t * rpcbproc_unset_4_svc();
-extern  char ** rpcbproc_getaddr_4();
-extern  char ** rpcbproc_getaddr_4_svc();
-extern  rpcblist_ptr * rpcbproc_dump_4();
-extern  rpcblist_ptr * rpcbproc_dump_4_svc();
-#define RPCBPROC_BCAST ((u_int32_t)RPCBPROC_CALLIT)
-extern  rpcb_rmtcallres * rpcbproc_bcast_4();
-extern  rpcb_rmtcallres * rpcbproc_bcast_4_svc();
-extern  u_int * rpcbproc_gettime_4();
-extern  u_int * rpcbproc_gettime_4_svc();
-extern  struct netbuf * rpcbproc_uaddr2taddr_4();
-extern  struct netbuf * rpcbproc_uaddr2taddr_4_svc();
-extern  char ** rpcbproc_taddr2uaddr_4();
-extern  char ** rpcbproc_taddr2uaddr_4_svc();
-#define RPCBPROC_GETVERSADDR ((u_int32_t)9)
-extern  char ** rpcbproc_getversaddr_4();
-extern  char ** rpcbproc_getversaddr_4_svc();
-#define RPCBPROC_INDIRECT ((u_int32_t)10)
-extern  rpcb_rmtcallres * rpcbproc_indirect_4();
-extern  rpcb_rmtcallres * rpcbproc_indirect_4_svc();
-#define RPCBPROC_GETADDRLIST ((u_int32_t)11)
-extern  rpcb_entry_list_ptr * rpcbproc_getaddrlist_4();
-extern  rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc();
-#define RPCBPROC_GETSTAT ((u_int32_t)12)
-extern  rpcb_stat * rpcbproc_getstat_4();
-extern  rpcb_stat * rpcbproc_getstat_4_svc();
-#endif /* Old Style C */ 
-
-#endif /* !_RPCB_PROT_H_RPCGEN */
diff --git a/tirpc/rpcsvc/crypt.h b/tirpc/rpcsvc/crypt.h
deleted file mode 100644
index da1f9cc..0000000
--- a/tirpc/rpcsvc/crypt.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
-#ifndef _CRYPT_H_RPCGEN
-#define _CRYPT_H_RPCGEN
-
-#include <rpc/rpc.h>
-
-#ifndef IXDR_GET_INT32
-#define IXDR_GET_INT32(buf) IXDR_GET_LONG((buf))
-#endif
-#ifndef IXDR_PUT_INT32
-#define IXDR_PUT_INT32(buf, v) IXDR_PUT_LONG((buf), (v))
-#endif
-#ifndef IXDR_GET_U_INT32
-#define IXDR_GET_U_INT32(buf) IXDR_GET_U_LONG((buf))
-#endif
-#ifndef IXDR_PUT_U_INT32
-#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_U_LONG((buf), (v))
-#endif
-
-enum des_dir {
-	ENCRYPT_DES = 0,
-	DECRYPT_DES = 1,
-};
-typedef enum des_dir des_dir;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_des_dir(XDR *, des_dir*);
-#elif __STDC__ 
-extern  bool_t xdr_des_dir(XDR *, des_dir*);
-#else /* Old Style C */ 
-bool_t xdr_des_dir();
-#endif /* Old Style C */ 
-
-
-enum des_mode {
-	CBC_DES = 0,
-	ECB_DES = 1,
-};
-typedef enum des_mode des_mode;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_des_mode(XDR *, des_mode*);
-#elif __STDC__ 
-extern  bool_t xdr_des_mode(XDR *, des_mode*);
-#else /* Old Style C */ 
-bool_t xdr_des_mode();
-#endif /* Old Style C */ 
-
-
-struct desargs {
-	u_char des_key[8];
-	des_dir des_dir;
-	des_mode des_mode;
-	u_char des_ivec[8];
-	struct {
-		u_int desbuf_len;
-		char *desbuf_val;
-	} desbuf;
-};
-typedef struct desargs desargs;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_desargs(XDR *, desargs*);
-#elif __STDC__ 
-extern  bool_t xdr_desargs(XDR *, desargs*);
-#else /* Old Style C */ 
-bool_t xdr_desargs();
-#endif /* Old Style C */ 
-
-
-struct desresp {
-	struct {
-		u_int desbuf_len;
-		char *desbuf_val;
-	} desbuf;
-	u_char des_ivec[8];
-	int stat;
-};
-typedef struct desresp desresp;
-#ifdef __cplusplus 
-extern "C" bool_t xdr_desresp(XDR *, desresp*);
-#elif __STDC__ 
-extern  bool_t xdr_desresp(XDR *, desresp*);
-#else /* Old Style C */ 
-bool_t xdr_desresp();
-#endif /* Old Style C */ 
-
-
-#define CRYPT_PROG ((u_int32_t)600100029)
-#define CRYPT_VERS ((u_int32_t)1)
-
-#ifdef __cplusplus
-#define DES_CRYPT ((u_int32_t)1)
-extern "C" desresp * des_crypt_1(desargs *, CLIENT *);
-extern "C" desresp * des_crypt_1_svc(desargs *, struct svc_req *);
-
-#elif __STDC__
-#define DES_CRYPT ((u_int32_t)1)
-extern  desresp * des_crypt_1(desargs *, CLIENT *);
-extern  desresp * des_crypt_1_svc(desargs *, struct svc_req *);
-
-#else /* Old Style C */ 
-#define DES_CRYPT ((u_int32_t)1)
-extern  desresp * des_crypt_1();
-extern  desresp * des_crypt_1_svc();
-#endif /* Old Style C */ 
-
-#endif /* !_CRYPT_H_RPCGEN */
-- 
1.7.9.5

