diff options
Diffstat (limited to 'source/a/sysklogd/sysklogd-1.4.1-owl-syslogd-crunch_list.diff')
-rw-r--r-- | source/a/sysklogd/sysklogd-1.4.1-owl-syslogd-crunch_list.diff | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/source/a/sysklogd/sysklogd-1.4.1-owl-syslogd-crunch_list.diff b/source/a/sysklogd/sysklogd-1.4.1-owl-syslogd-crunch_list.diff new file mode 100644 index 00000000..26830929 --- /dev/null +++ b/source/a/sysklogd/sysklogd-1.4.1-owl-syslogd-crunch_list.diff @@ -0,0 +1,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; + } |