struct servent * getservbyport_r(int port, const char *proto, struct servent *sp, struct servent_data *sd) { setservent_r(sd->flags & _SV_STAYOPEN, sd); sp = _servent_getbyport(sd, sp, port, proto); if (!(sd->flags & _SV_STAYOPEN)) _servent_close(sd); return sp; }
void endservent_r(struct servent_data *sd) { _servent_close(sd); free(sd->aliases); sd->aliases = NULL; sd->maxaliases = 0; free(sd->line); sd->line = NULL; free(sd->cdb_buf); sd->cdb_buf = NULL; sd->cdb_buf_len = 0; }
struct servent * getservbyname_r(const char *name, const char *proto, struct servent *sp, struct servent_data *sd) { assert(name != NULL); /* proto may be NULL */ setservent_r(sd->flags & _SV_STAYOPEN, sd); sp = _servent_getbyname(sd, sp, name, proto); if (!(sd->flags & _SV_STAYOPEN)) _servent_close(sd); return sp; }