aboutsummaryrefslogtreecommitdiff
path: root/nscd
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-02-16 19:15:07 +0000
committerUlrich Drepper <drepper@redhat.com>2007-02-16 19:15:07 +0000
commit8c6d104340c5e18f22943017fb00a6acd43456b3 (patch)
tree5f7e713d8aa0a9e73bf51a9eae6e527cadaf5e3e /nscd
parentb3715c05d7834a6e755c293d3d9274bd0b71d4df (diff)
downloadglibc-8c6d104340c5e18f22943017fb00a6acd43456b3.tar
glibc-8c6d104340c5e18f22943017fb00a6acd43456b3.tar.gz
glibc-8c6d104340c5e18f22943017fb00a6acd43456b3.tar.bz2
glibc-8c6d104340c5e18f22943017fb00a6acd43456b3.zip
* nscd/nscd.c (parse_opt): One more conversion to use send instead
of writev.
Diffstat (limited to 'nscd')
-rw-r--r--nscd/nscd.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/nscd/nscd.c b/nscd/nscd.c
index d0c34eb010..ec7fceb3fa 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);