[Cluster-devel] cluster/group daemon/gd_internal.h daemon/main ...

teigland at sourceware.org teigland at sourceware.org
Thu Jul 13 21:28:47 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-07-13 21:28:45

Modified files:
	group/daemon   : gd_internal.h main.c 
	group/dlm_controld: dlm_daemon.h main.c 
	group/gfs_controld: lock_dlm.h main.c 

Log message:
	- memset to 0 arrays of arg pointers
	- tighten up the splitting of strings into arg arrays
	- reduce the size of the arg pointer arrays since we now know the max
	number of args we're splitting out

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/gd_internal.h.diff?cvsroot=cluster&r1=1.37&r2=1.38
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.39&r2=1.40
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/dlm_controld/dlm_daemon.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/dlm_controld/main.c.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/gfs_controld/lock_dlm.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/gfs_controld/main.c.diff?cvsroot=cluster&r1=1.3&r2=1.4

--- cluster/group/daemon/gd_internal.h	2006/06/30 15:29:17	1.37
+++ cluster/group/daemon/gd_internal.h	2006/07/13 21:28:45	1.38
@@ -43,7 +43,7 @@
 #define MAX_NAMELEN		(32)	/* should match libgroup.h */
 #define MAX_LEVELS		(4)
 #define MAX_NODES		(256)
-#define MAXARGS			(32)
+#define MAXARGS			(16)
 #define MAXCON			(16)
 #define NALLOC			(16)
 #define DUMP_SIZE		(1024 * 1024)
--- cluster/group/daemon/main.c	2006/07/13 18:21:35	1.39
+++ cluster/group/daemon/main.c	2006/07/13 21:28:45	1.40
@@ -538,6 +538,7 @@
 	int argc = 0, rv, act;
 
 	memset(buf, 0, sizeof(buf));
+	memset(argv, 0, sizeof(char *) * MAXARGS);
 
 	rv = read(client[ci].fd, buf, GROUPD_MSGLEN);
 	if (!rv) {
--- cluster/group/dlm_controld/dlm_daemon.h	2006/06/09 20:59:57	1.1
+++ cluster/group/dlm_controld/dlm_daemon.h	2006/07/13 21:28:45	1.2
@@ -44,7 +44,7 @@
 #include "list.h"
 #include "libgroup.h"
 
-#define MAXARGS		64
+#define MAXARGS		8
 #define MAXLINE		256
 #define MAXCON		4
 #define MAXNAME		255
--- cluster/group/dlm_controld/main.c	2006/07/13 19:49:02	1.2
+++ cluster/group/dlm_controld/main.c	2006/07/13 21:28:45	1.3
@@ -48,6 +48,7 @@
 	return NULL;
 }
 
+#if 0
 void make_args(char *buf, int *argc, char **argv, char sep)
 {
 	char *p = buf;
@@ -65,6 +66,38 @@
 	}
 	*argc = i;
 }
+#endif
+
+static char *get_args(char *buf, int *argc, char **argv, char sep, int want)
+{
+	char *p = buf, *rp = NULL;
+	int i;
+
+	argv[0] = p;
+
+	for (i = 1; i < MAXARGS; i++) {
+		p = strchr(buf, sep);
+		if (!p)
+			break;
+		*p = '\0';
+
+		if (want == i) {
+			rp = p + 1;
+			break;
+		}
+
+		argv[i] = p + 1;
+		buf = p + 1;
+	}
+	*argc = i;
+
+	/* we ended by hitting \0, return the point following that */
+	if (!rp)
+		rp = strchr(buf, '\0') + 1;
+
+	return rp;
+}
+
 
 /* recv "online" (join) and "offline" (leave) 
    messages from dlm via uevents and pass them on to groupd */
@@ -77,6 +110,7 @@
 	int rv, argc = 0;
 
 	memset(buf, 0, sizeof(buf));
+	memset(argv, 0, sizeof(char *) * MAXARGS);
 
 	rv = recv(uevent_fd, &buf, sizeof(buf), 0);
 	if (rv < 0) {
@@ -89,7 +123,9 @@
 
 	log_debug("uevent: %s", buf);
 
-	make_args(buf, &argc, argv, '/');
+	get_args(buf, &argc, argv, '/', 4);
+	if (argc != 4)
+		log_error("uevent message has %d args", argc);
 	act = argv[0];
 	sys = argv[2];
 
@@ -291,9 +327,9 @@
 	printf("\n");
 	printf("Options:\n");
 	printf("\n");
-	printf("  -D               Enable debugging code and don't fork\n");
-	printf("  -h               Print this help, then exit\n");
-	printf("  -V               Print program version information, then exit\n");
+	printf("  -D	       Enable debugging code and don't fork\n");
+	printf("  -h	       Print this help, then exit\n");
+	printf("  -V	       Print program version information, then exit\n");
 }
 
 static void decode_arguments(int argc, char **argv)
--- cluster/group/gfs_controld/lock_dlm.h	2006/06/15 20:41:46	1.3
+++ cluster/group/gfs_controld/lock_dlm.h	2006/07/13 21:28:45	1.4
@@ -37,7 +37,7 @@
 #include "linux_endian.h"
 #include "libgroup.h"
 
-#define MAXARGS			64
+#define MAXARGS			16
 #define MAXLINE			256
 #define MAXNAME			255
 #define MAX_CLIENTS		8
--- cluster/group/gfs_controld/main.c	2006/06/15 20:41:46	1.3
+++ cluster/group/gfs_controld/main.c	2006/07/13 21:28:45	1.4
@@ -35,6 +35,7 @@
 extern struct list_head withdrawn_mounts;
 int no_withdraw;
 
+#if 0
 static void make_args(char *buf, int *argc, char **argv, char sep)
 {
 	char *p = buf;
@@ -52,6 +53,37 @@
 	}
 	*argc = i;
 }
+#endif
+
+static char *get_args(char *buf, int *argc, char **argv, char sep, int want)
+{
+	char *p = buf, *rp = NULL;
+	int i;
+
+	argv[0] = p;
+
+	for (i = 1; i < MAXARGS; i++) {
+		p = strchr(buf, sep);
+		if (!p)
+			break;
+		*p = '\0';
+
+		if (want == i) { 
+			rp = p + 1;
+			break;
+		}
+
+		argv[i] = p + 1;
+		buf = p + 1;
+	}
+	*argc = i;
+
+	/* we ended by hitting \0, return the point following that */
+	if (!rp)
+		rp = strchr(buf, '\0') + 1;
+
+	return rp;
+}
 
 static int client_add(int fd, int *maxi)
 {
@@ -102,6 +134,7 @@
 	cmd = dir = type = proto = table = extra = NULL;
 	memset(buf, 0, MAXLINE);
 	memset(out, 0, MAXLINE);
+	memset(argv, 0, sizeof(char *) * MAXARGS);
 
 	rv = read(client[ci].fd, buf, MAXLINE);
 	if (!rv) {
@@ -116,7 +149,7 @@
 
 	log_debug("client %d: %s", ci, buf);
 
-	make_args(buf, &argc, argv, ' ');
+	get_args(buf, &argc, argv, ' ', 6);
 	cmd = argv[0];
 	dir = argv[1];
 	type = argv[2];
@@ -184,6 +217,7 @@
 	int rv, argc = 0;
 
 	memset(buf, 0, sizeof(buf));
+	memset(argv, 0, sizeof(char *) * MAXARGS);
 
 	rv = recv(uevent_fd, &buf, sizeof(buf), 0);
 	if (rv < 0) {
@@ -194,7 +228,9 @@
 	if (!strstr(buf, "gfs") || !strstr(buf, "lock_module"))
 		return 0;
 
-	make_args(buf, &argc, argv, '/');
+	get_args(buf, &argc, argv, '/', 4);
+	if (argc != 4)
+		log_error("uevent message has %d args", argc);
 	act = argv[0];
 
 	log_debug("kernel: %s %s", act, argv[3]);
@@ -286,7 +322,7 @@
 				log_debug("accept error %d %d", f, errno);
 			else
 				client_add(f, &maxi);
-                }
+		}
 
 		for (i = 1; i <= maxi; i++) {
 			if (client[i].fd < 0)
@@ -389,9 +425,9 @@
 	printf("\n");
 	printf("Options:\n");
 	printf("\n");
-	printf("  -D               Enable debugging code and don't fork\n");
-	printf("  -h               Print this help, then exit\n");
-	printf("  -V               Print program version information, then exit\n");
+	printf("  -D	       Enable debugging code and don't fork\n");
+	printf("  -h	       Print this help, then exit\n");
+	printf("  -V	       Print program version information, then exit\n");
 }
 
 static void decode_arguments(int argc, char **argv)




More information about the Cluster-devel mailing list