if (res != NULL) nis_freeresult (res);
nis_getservlist (const_nis_name dir){  nis_result *res;  nis_server **serv;  res = nis_lookup (dir, FOLLOW_LINKS);  if (NIS_RES_STATUS (res) == NIS_SUCCESS)    {      unsigned long i;      nis_server *server;      serv =	malloc (sizeof (nis_server *) *		(NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len + 1));      if (serv == NULL)	return NULL;      for (i = 0; i < NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len;	   ++i)	{	  server =	    &NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_val[i];	  serv[i] = calloc (1, sizeof (nis_server));	  if (server->name != NULL)            serv[i]->name = strdup (server->name);          serv[i]->ep.ep_len = server->ep.ep_len;          if (serv[i]->ep.ep_len > 0)            {              unsigned long int j;              serv[i]->ep.ep_val =		malloc (server->ep.ep_len * sizeof (endpoint));	      if (serv[i]->ep.ep_val == NULL)		return NULL;              for (j = 0; j < serv[i]->ep.ep_len; ++j)                {                  if (server->ep.ep_val[j].uaddr)                    serv[i]->ep.ep_val[j].uaddr =		      strdup (server->ep.ep_val[j].uaddr);                  else                    serv[i]->ep.ep_val[j].uaddr = NULL;                  if (server->ep.ep_val[j].family)		    serv[i]->ep.ep_val[j].family =		      strdup (server->ep.ep_val[j].family);                  else                    serv[i]->ep.ep_val[j].family = NULL;                  if (server->ep.ep_val[j].proto)		    serv[i]->ep.ep_val[j].proto =		      strdup (server->ep.ep_val[j].proto);                  else		    serv[i]->ep.ep_val[j].proto = NULL;                }            }          else	    serv[i]->ep.ep_val = NULL;          serv[i]->key_type = server->key_type;          serv[i]->pkey.n_len = server->pkey.n_len;          if (server->pkey.n_len > 0)            {              serv[i]->pkey.n_bytes =                malloc (server->pkey.n_len);              if (serv[i]->pkey.n_bytes == NULL)                return NULL;              memcpy (serv[i]->pkey.n_bytes, server->pkey.n_bytes,                      server->pkey.n_len);            }          else            serv[i]->pkey.n_bytes = NULL;        }      serv[i] = NULL;      nis_freeresult (res);    }  else    {      serv = malloc (sizeof (nis_server *));      if (serv != NULL)	serv[0] = NULL;    }  return serv;}