diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-09-25 01:14:47 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-09-25 01:14:47 +0000 |
commit | 3900770ed3168aa30c760ab0096ac984d769104e (patch) | |
tree | 8abad26043c0a9ab412ba2f7b068305b640d0de9 | |
parent | 3f80a99b8f5c9b7927a5a77f0c1854f0deeb1b25 (diff) | |
download | glibc-3900770ed3168aa30c760ab0096ac984d769104e.tar glibc-3900770ed3168aa30c760ab0096ac984d769104e.tar.gz glibc-3900770ed3168aa30c760ab0096ac984d769104e.tar.bz2 glibc-3900770ed3168aa30c760ab0096ac984d769104e.zip |
Update.
2004-09-24 Ulrich Drepper <drepper@redhat.com>
* nis/ypclnt.c (yp_bind_file): Optimize a bit. Minimal cleanups.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | nis/ypclnt.c | 27 |
2 files changed, 15 insertions, 16 deletions
@@ -1,3 +1,7 @@ +2004-09-24 Ulrich Drepper <drepper@redhat.com> + + * nis/ypclnt.c (yp_bind_file): Optimize a bit. Minimal cleanups. + 2004-09-23 Andreas Jaeger <aj@suse.de> * locale/weight.h (findidx): Remove static, it's not supported diff --git a/nis/ypclnt.c b/nis/ypclnt.c index ab28e6002b..184e49de6d 100644 --- a/nis/ypclnt.c +++ b/nis/ypclnt.c @@ -74,7 +74,7 @@ yp_bind_client_create (const char *domain, dom_binding *ysd, if (ysd->dom_client != NULL) { /* If the program exits, close the socket */ - if (fcntl (ysd->dom_socket, F_SETFD, 1) == -1) + if (fcntl (ysd->dom_socket, F_SETFD, FD_CLOEXEC) == -1) perror ("fcntl: F_SETFD"); } } @@ -83,23 +83,18 @@ yp_bind_client_create (const char *domain, dom_binding *ysd, static void yp_bind_file (const char *domain, dom_binding *ysd) { - struct ypbind_resp ypbr; - char path[sizeof (BINDINGDIR) + strlen (domain) + 10]; - struct iovec vec[2]; - unsigned short port; - int fd; + char path[sizeof (BINDINGDIR) + strlen (domain) + 3 * sizeof (unsigned) + 3]; - sprintf (path, "%s/%s.%d", BINDINGDIR, domain, YPBINDVERS); - fd = open (path, O_RDONLY); + snprintf (path, sizeof (path), "%s/%s.%u", BINDINGDIR, domain, YPBINDVERS); + int fd = open (path, O_RDONLY); if (fd >= 0) { - /* We have a binding file and could save a RPC call */ - vec[0].iov_base = &port; - vec[0].iov_len = sizeof (port); - vec[1].iov_base = &ypbr; - vec[1].iov_len = sizeof (ypbr); + /* We have a binding file and could save a RPC call. The file + contains a port number and the YPBIND_RESP record. The port + number (16 bits) can be ignored. */ + struct ypbind_resp ypbr; - if (readv (fd, vec, 2) == sizeof (port) + sizeof (ypbr)) + if (pread (fd, &ypbr, sizeof (ypbr), 2) == sizeof (ypbr)) yp_bind_client_create (domain, ysd, &ypbr); close (fd); @@ -183,9 +178,9 @@ __yp_bind (const char *domain, dom_binding **ypdb) } #if USE_BINDINGDIR - /* Try binding dir at first if we have no binding */ + /* Try binding dir at first if we have no binding */ if (ysd->dom_client == NULL) - yp_bind_file (domain, ysd); + yp_bind_file (domain, ysd); #endif /* USE_BINDINGDIR */ if (ysd->dom_client == NULL) |