summaryrefslogtreecommitdiffstats
path: root/source/a/sysklogd/sysklogd-1.4.1-owl-syslogd-crunch_list.diff
blob: 2683092970f74639b7f26becd9d0076c90071257 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
--- ./syslogd.c.orig	2007-04-09 18:17:05.000000000 -0500
+++ ./syslogd.c	2007-04-09 18:25:22.000000000 -0500
@@ -1273,61 +1273,55 @@
 crunch_list(list)
 	char *list;
 {
-	int count, i;
+	int i, m, n;
 	char *p, *q;
 	char **result = NULL;
 
 	p = list;
 	
 	/* strip off trailing delimiters */
-	while (p[strlen(p)-1] == LIST_DELIMITER) {
-		count--;
+	while (*p && p[strlen(p)-1] == LIST_DELIMITER)
 		p[strlen(p)-1] = '\0';
-	}
 	/* cut off leading delimiters */
-	while (p[0] == LIST_DELIMITER) {
-		count--;
-		p++; 
-	}
-	
-	/* count delimiters to calculate elements */
-	for (count=i=0; p[i]; i++)
-		if (p[i] == LIST_DELIMITER) count++;
-	
-	if ((result = (char **)malloc(sizeof(char *) * (count+2))) == NULL) {
+	while (p[0] == LIST_DELIMITER)
+		p++;
+
+	/* count delimiters to calculate the number of elements */
+	for (n = i = 0; p[i]; i++)
+		if (p[i] == LIST_DELIMITER) n++;
+
+	if ((result = (char **)malloc(sizeof(char *) * (n + 2))) == NULL) {
 		printf ("Sorry, can't get enough memory, exiting.\n");
-		exit(0);
+		exit(1);
 	}
-	
+
 	/*
 	 * We now can assume that the first and last
 	 * characters are different from any delimiters,
 	 * so we don't have to care about this.
 	 */
-	count = 0;
-	while ((q=strchr(p, LIST_DELIMITER))) {
-		result[count] = (char *) malloc((q - p + 1) * sizeof(char));
-		if (result[count] == NULL) {
+	m = 0;
+	while ((q = strchr(p, LIST_DELIMITER)) && m < n) {
+		result[m] = (char *) malloc((q - p + 1) * sizeof(char));
+		if (result[m] == NULL) {
 			printf ("Sorry, can't get enough memory, exiting.\n");
-			exit(0);
+			exit(1);
 		}
-		strncpy(result[count], p, q - p);
-		result[count][q - p] = '\0';
+		memcpy(result[m], p, q - p);
+		result[m][q - p] = '\0';
 		p = q; p++;
-		count++;
+		m++;
 	}
-	if ((result[count] = \
-	     (char *)malloc(sizeof(char) * strlen(p) + 1)) == NULL) {
+	if ((result[m] = strdup(p)) == NULL) {
 		printf ("Sorry, can't get enough memory, exiting.\n");
-		exit(0);
+		exit(1);
 	}
-	strcpy(result[count],p);
-	result[++count] = NULL;
+	result[++m] = NULL;
 
 #if 0
-	count=0;
-	while (result[count])
-		dprintf ("#%d: %s\n", count, StripDomains[count++]);
+	m = 0;
+	while (result[m])
+		dprintf ("#%d: %s\n", m, result[m++]);
 #endif
 	return result;
 }