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;
}
|