From: rpeterso@sourceware.org <rpeterso@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/group daemon/main.c lib/libgroup.c too ...
Date: 21 Oct 2006 17:15:13 -0000 [thread overview]
Message-ID: <20061021171513.22554.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: rpeterso at sourceware.org 2006-10-21 17:15:12
Modified files:
group/daemon : main.c
group/lib : libgroup.c
group/tool : main.c
Log message:
This is the fix for Bugzilla Bug 210344: group_tool does not
handle short reads.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.49&r2=1.50
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/lib/libgroup.c.diff?cvsroot=cluster&r1=1.22&r2=1.23
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/tool/main.c.diff?cvsroot=cluster&r1=1.20&r2=1.21
--- cluster/group/daemon/main.c 2006/10/20 15:42:44 1.49
+++ cluster/group/daemon/main.c 2006/10/21 17:15:12 1.50
@@ -490,30 +490,24 @@
{
group_t *g;
group_data_t *data;
- int i, rv, len, count = 0, max = atoi(argv[1]);
+ int rv, count = 0, max = atoi(argv[1]);
- list_for_each_entry(g, &gd_groups, list)
- count++;
- if (count > max)
- count = max;
- /* if no groups, send back one empty data struct */
- if (!count)
- count = 1;
-
- len = count * sizeof(group_data_t);
- data = malloc(len);
- memset(data, 0, len);
-
- i = 0;
+ data = malloc(sizeof(group_data_t));
+ count = 0;
list_for_each_entry(g, &gd_groups, list) {
- copy_group_data(g, &data[i]);
- i++;
+ copy_group_data(g, data);
+ rv = do_write(client[ci].fd, data, sizeof(group_data_t));
+ if (rv < 0) {
+ log_print("do_get_groups write error");
+ break;
+ }
+ count++;
+ if (count >= max)
+ break;
}
-
- rv = do_write(client[ci].fd, data, len);
- if (rv < 0)
- log_print("do_get_groups write error");
-
+ /* Now write an empty one indicating there aren't anymore: */
+ memset(data, 0, sizeof(group_data_t));
+ rv = do_write(client[ci].fd, data, sizeof(group_data_t));
free(data);
return 0;
}
--- cluster/group/lib/libgroup.c 2006/10/13 17:15:26 1.22
+++ cluster/group/lib/libgroup.c 2006/10/21 17:15:12 1.23
@@ -446,11 +446,11 @@
return rv;
}
-int group_get_groups(int max, int *count, group_data_t *data)
+int group_get_groups(int max, int *count, group_data_t *data)
{
char buf[GROUPD_MSGLEN];
group_data_t empty;
- int fd, rv, maxlen;
+ int fd, rv;
fd = connect_groupd();
if (fd < 0)
@@ -461,21 +461,20 @@
snprintf(buf, sizeof(buf), "get_groups %d", max);
rv = do_write(fd, &buf, GROUPD_MSGLEN);
- if (rv < 0)
- goto out;
-
- maxlen = max * sizeof(group_data_t);
-
- rv = read(fd, data, maxlen);
- if (rv > 0) {
- /* a blank data struct is returned when there are none */
- if (rv == sizeof(empty) && !memcmp(data, &empty, rv))
- *count = 0;
- else
- *count = rv / sizeof(group_data_t);
- rv = 0;
+ *count = 0;
+ if (!rv) {
+ while (1) {
+ rv = read(fd, &data[*count], sizeof(group_data_t));
+ /* a blank data struct is returned when there are none */
+ if (rv <= 0 || (rv == sizeof(group_data_t) &&
+ !memcmp(&data[*count], &empty, rv))) {
+ rv = 0;
+ break;
+ }
+ else
+ (*count)++;
+ }
}
- out:
close(fd);
return rv;
}
--- cluster/group/tool/main.c 2006/08/14 19:38:20 1.20
+++ cluster/group/tool/main.c 2006/10/21 17:15:12 1.21
@@ -247,6 +247,10 @@
} else
rv = group_get_groups(MAX_GROUPS, &count, data);
+ if (rv < 0) {
+ fprintf(stderr,"Unable to connect to groupd. Is it running?\n");
+ return rv;
+ }
for (i = 0; i < count; i++) {
len = strlen(data[i].name);
if (len > max_name)
reply other threads:[~2006-10-21 17:15 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061021171513.22554.qmail@sourceware.org \
--to=rpeterso@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).