/*
**  Copyright 2002 University of Illinois Board of Trustees
**  Copyright 2002 Mark D. Roth
**  All rights reserved.
**
**  getservbyname_r.c - getservbyname_r() function for compatibility library
**
**  Mark D. Roth <roth@uiuc.edu>
**  Campus Information Technologies and Educational Services
**  University of Illinois at Urbana-Champaign
*/

#include <config.h>

#include <stdio.h>
#include <sys/types.h>
#include <netdb.h>


int
compat_getservbyname_r(const char *name, const char *proto,
		       struct servent *sp, char *buf, size_t buflen,
		       struct servent **spp)
{
#if GETSERVBYNAME_R_NUM_ARGS == 5
	*spp = getservbyname_r(name, proto, sp, buf, buflen);

	if (*spp == NULL)
		return -1;
	return 0;
#elif GETSERVBYNAME_R_NUM_ARGS == 4
	struct servent_data sdata;

	if (getservbyname_r(name, proto, sp, &sdata) == -1)
		return -1;
	*spp = sp;
	return 0;
#endif /* GETSERVBYNAME_R_NUM_ARGS == 5 */
}


