nbytes = write (sock, &req, sizeof (request_header));
nbytes = __write (sock, &req, sizeof (request_header));
__nscd_getgr_r (const char *key, request_type type, struct group *resultbuf,		char *buffer, size_t buflen){  int sock = nscd_open_socket ();  request_header req;  gr_response_header gr_resp;  ssize_t nbytes;  if (sock == -1)    {      __nss_not_use_nscd_group = 1;      return 1;    }  req.version = NSCD_VERSION;  req.type = type;  req.key_len = strlen (key);  nbytes = write (sock, &req, sizeof (request_header));  if (nbytes != sizeof (request_header))    {      close (sock);      return 1;    }  nbytes = write (sock, key, req.key_len);  if (nbytes != req.key_len)    {      close (sock);      return 1;    }  nbytes = read (sock, &gr_resp, sizeof (gr_response_header));  if (nbytes != sizeof (gr_response_header))    {      close (sock);      return 1;    }  if (gr_resp.found == -1)    {      /* The daemon does not cache this database.  */      close (sock);      __nss_not_use_nscd_group = 1;      return 1;    }  if (gr_resp.found == 1)    {      size_t i;      char *p = buffer;      if (buflen < gr_resp.gr_name_len + 1)	{	  __set_errno (ERANGE);	  close (sock);	  return -1;	}      resultbuf->gr_name = p;      p += gr_resp.gr_name_len + 1;      buflen -= (gr_resp.gr_name_len + 1);      nbytes = read (sock, resultbuf->gr_name, gr_resp.gr_name_len);      if (nbytes != gr_resp.gr_name_len)	{	  close (sock);	  return 1;	}      resultbuf->gr_name[gr_resp.gr_name_len] = '\0';      if (buflen < gr_resp.gr_passwd_len + 1)	{	  __set_errno (ERANGE);	  close (sock);	  return -1;	}      resultbuf->gr_passwd = p;      p += gr_resp.gr_passwd_len + 1;      buflen -= (gr_resp.gr_passwd_len + 1);      nbytes = read (sock, resultbuf->gr_passwd, gr_resp.gr_passwd_len);      if (nbytes != gr_resp.gr_passwd_len)	{	  close (sock);	  return 1;	}      resultbuf->gr_passwd[gr_resp.gr_passwd_len] = '\0';      resultbuf->gr_gid = gr_resp.gr_gid;      if (buflen < ((gr_resp.gr_mem_len + 1) * sizeof (char *)))	{	  __set_errno (ERANGE);	  close (sock);	  return -1;	}      resultbuf->gr_mem = (char **)p;      p += ((gr_resp.gr_mem_len + 1) * sizeof (char *));      buflen -= ((gr_resp.gr_mem_len + 1) * sizeof (char *));      resultbuf->gr_mem[gr_resp.gr_mem_len] = NULL;      for (i = 0; i < gr_resp.gr_mem_len; ++i)	{	  size_t len;	  nbytes = read (sock, &len, sizeof (len));	  if (nbytes != sizeof (len))	    {	      close (sock);	      return 1;	    }	  if (buflen < (len + 1))	    {	      __set_errno (ERANGE);	      close (sock);	      return -1;	    }	  resultbuf->gr_mem[i] = p;	  p += len + 1;	  buflen -= (len + 1);	  nbytes = read (sock, resultbuf->gr_mem[i], len);	  resultbuf->gr_mem[i][len] = '\0';	  if (nbytes != len)	    {	      close (sock);	      return 1;	    }	}      close (sock);      return 0;    }  else    {      close (sock);      return -1;    }}