#ifndef _RPC_NETDB_H
#include <sunrpc/rpc/netdb.h>

extern int __getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
			     char *__buffer, size_t __buflen,
			     struct rpcent **__result);
extern int __old_getrpcbyname_r (const char *__name,
				 struct rpcent *__result_buf,
				 char *__buffer, size_t __buflen,
				 struct rpcent **__result);

extern int __getrpcbynumber_r (int __number, struct rpcent *__result_buf,
			       char *__buffer, size_t __buflen,
			       struct rpcent **__result);
extern int __old_getrpcbynumber_r (int __number, struct rpcent *__result_buf,
				   char *__buffer, size_t __buflen,
				   struct rpcent **__result);

extern int __getrpcent_r (struct rpcent *__result_buf, char *__buffer,
			  size_t __buflen, struct rpcent **__result)
     attribute_hidden;
extern int __old_getrpcent_r (struct rpcent *__result_buf, char *__buffer,
			      size_t __buflen, struct rpcent **__result);

struct parser_data;
extern int _nss_files_parse_rpcent (char *line, struct rpcent *result,
				    struct parser_data *data,
				    size_t datalen, int *errnop);
libnss_files_hidden_proto (_nss_files_parse_rpcent)

#define DECLARE_NSS_PROTOTYPES(service)					      \
extern enum nss_status _nss_ ## service ## _setrpcent (int);		      \
extern enum nss_status _nss_ ## service ## _endrpcent (void);		      \
extern enum nss_status _nss_ ## service ## _getrpcent_r			      \
		       (struct rpcent *rpc, char *buffer, size_t buflen,      \
			int *errnop);					      \
extern enum nss_status _nss_ ## service ## _getrpcbyname_r		      \
		       (const char *name, struct rpcent *rpc,		      \
			char *buffer, size_t buflen, int *errnop);	      \
extern enum nss_status _nss_ ## service ## _getrpcbynumber_r		      \
		       (int number, struct rpcent *rpc,			      \
			char *buffer, size_t buflen, int *errnop);


DECLARE_NSS_PROTOTYPES (files)
DECLARE_NSS_PROTOTYPES (nis)
DECLARE_NSS_PROTOTYPES (nisplus)

#undef DECLARE_NSS_PROTOTYPES

#endif
