diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-02-16 19:15:07 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-02-16 19:15:07 +0000 |
commit | 8c6d104340c5e18f22943017fb00a6acd43456b3 (patch) | |
tree | 5f7e713d8aa0a9e73bf51a9eae6e527cadaf5e3e /nscd/nscd.c | |
parent | b3715c05d7834a6e755c293d3d9274bd0b71d4df (diff) | |
download | glibc-8c6d104340c5e18f22943017fb00a6acd43456b3.zip glibc-8c6d104340c5e18f22943017fb00a6acd43456b3.tar.gz glibc-8c6d104340c5e18f22943017fb00a6acd43456b3.tar.bz2 |
* nscd/nscd.c (parse_opt): One more conversion to use send instead
of writev.
Diffstat (limited to 'nscd/nscd.c')
-rw-r--r-- | nscd/nscd.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/nscd/nscd.c b/nscd/nscd.c index d0c34eb..ec7fceb 100644 --- a/nscd/nscd.c +++ b/nscd/nscd.c @@ -301,18 +301,18 @@ parse_opt (int key, char *arg, struct argp_state *state) error (4, 0, _("Only root is allowed to use this option!")); { int sock = nscd_open_socket (); - request_header req; - ssize_t nbytes; if (sock == -1) exit (EXIT_FAILURE); + request_header req; req.version = NSCD_VERSION; req.type = SHUTDOWN; req.key_len = 0; - nbytes = TEMP_FAILURE_RETRY (send (sock, &req, - sizeof (request_header), - MSG_NOSIGNAL)); + + ssize_t nbytes = TEMP_FAILURE_RETRY (send (sock, &req, + sizeof (request_header), + MSG_NOSIGNAL)); close (sock); exit (nbytes != sizeof (request_header) ? EXIT_FAILURE : EXIT_SUCCESS); } @@ -331,7 +331,6 @@ parse_opt (int key, char *arg, struct argp_state *state) if (sock == -1) exit (EXIT_FAILURE); - request_header req; dbtype cnt; for (cnt = pwddb; cnt < lastdb; ++cnt) if (strcmp (arg, dbnames[cnt]) == 0) @@ -340,19 +339,24 @@ parse_opt (int key, char *arg, struct argp_state *state) if (cnt == lastdb) return ARGP_ERR_UNKNOWN; - req.key_len = strlen (arg) + 1; - req.version = NSCD_VERSION; - req.type = INVALIDATE; + size_t arg_len = strlen (arg) + 1; + struct + { + request_header req; + char arg[arg_len]; + } reqdata; - struct iovec iov[2]; - iov[0].iov_base = &req; - iov[0].iov_len = sizeof (req); - iov[1].iov_base = arg; - iov[1].iov_len = req.key_len; + reqdata.req.key_len = strlen (arg) + 1; + reqdata.req.version = NSCD_VERSION; + reqdata.req.type = INVALIDATE; + memcpy (reqdata.arg, arg, arg_len); - ssize_t nbytes = TEMP_FAILURE_RETRY (writev (sock, iov, 2)); + ssize_t nbytes = TEMP_FAILURE_RETRY (send (sock, &reqdata, + sizeof (request_header) + + arg_len, + MSG_NOSIGNAL)); - if (nbytes != iov[0].iov_len + iov[1].iov_len) + if (nbytes != sizeof (request_header) + arg_len) { int err = errno; close (sock); |