nbytes = write (sock, &req, sizeof (request_header));
nbytes = __write (sock, &req, sizeof (request_header));
__nscd_getpw_r (const char *key, request_type type, struct passwd *resultbuf,		char *buffer, size_t buflen){  int sock = nscd_open_socket ();  request_header req;  pw_response_header pw_resp;  ssize_t nbytes;  if (sock == -1)    {      __nss_not_use_nscd_passwd = 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, &pw_resp, sizeof (pw_response_header));  if (nbytes != sizeof (pw_response_header))    {      close (sock);      return 1;    }  if (pw_resp.found == -1)    {      /* The daemon does not cache this database.  */      close (sock);      __nss_not_use_nscd_passwd = 1;      return 1;    }  if (pw_resp.found == 1)    {      struct iovec vec[5];      char *p = buffer;      if (buflen < (pw_resp.pw_name_len + 1 + pw_resp.pw_passwd_len + 1		    + pw_resp.pw_gecos_len + 1 + pw_resp.pw_dir_len + 1		    + pw_resp.pw_shell_len + 1))	{	  __set_errno (ERANGE);	  close (sock);	  return -1;	}      /* get pw_name */      vec[0].iov_base = p;      vec[0].iov_len = pw_resp.pw_name_len;      p += pw_resp.pw_name_len + 1;      buflen -= (pw_resp.pw_name_len + 1);      /* get pw_passwd */      vec[1].iov_base = p;      vec[1].iov_len = pw_resp.pw_passwd_len;      p += pw_resp.pw_passwd_len + 1;      buflen -= (pw_resp.pw_passwd_len + 1);      /* get pw_gecos */      vec[2].iov_base = p;      vec[2].iov_len = pw_resp.pw_gecos_len;      p += pw_resp.pw_gecos_len + 1;      buflen -= (pw_resp.pw_gecos_len + 1);      /* get pw_dir */      vec[3].iov_base = p;      vec[3].iov_len = pw_resp.pw_dir_len;      p += pw_resp.pw_dir_len + 1;      buflen -= (pw_resp.pw_dir_len + 1);      /* get pw_pshell */      vec[4].iov_base = p;      vec[4].iov_len = pw_resp.pw_shell_len;      p += pw_resp.pw_shell_len + 1;      buflen -= (pw_resp.pw_shell_len + 1);      nbytes = __readv (sock, vec, 5);      if (nbytes !=  (pw_resp.pw_name_len + pw_resp.pw_passwd_len		      + pw_resp.pw_gecos_len + pw_resp.pw_dir_len		      + pw_resp.pw_shell_len))	{	  close (sock);	  return 1;	}      resultbuf->pw_name = vec[0].iov_base;      resultbuf->pw_name[pw_resp.pw_name_len] = '\0';      resultbuf->pw_passwd = vec[1].iov_base;      resultbuf->pw_passwd[pw_resp.pw_passwd_len] = '\0';      resultbuf->pw_uid = pw_resp.pw_uid;      resultbuf->pw_gid = pw_resp.pw_gid;      resultbuf->pw_gecos = vec[2].iov_base;      resultbuf->pw_gecos[pw_resp.pw_gecos_len] = '\0';      resultbuf->pw_dir = vec[3].iov_base;      resultbuf->pw_dir[pw_resp.pw_dir_len] = '\0';      resultbuf->pw_shell = vec[4].iov_base;      resultbuf->pw_shell[pw_resp.pw_shell_len] = '\0';      close (sock);      return 0;    }  else    {      close (sock);      return -1;    }}