** complete copyright information.
*/
+#include <sysexits.h>
#include <h/mh.h>
#include <h/utils.h>
/* allocate initial space for pointers on first call */
if (!broken) {
len = NUMBROKEN;
- broken = (char **)mh_xmalloc((size_t)(len * sizeof(*broken)));
+ broken = mh_xcalloc(len, sizeof(*broken));
}
/*
/* enlarge pointer array, if necessary */
if (i >= len) {
len += NUMBROKEN;
- broken = mh_xrealloc(broken,
- (size_t)(len * sizeof(*broken)));
+ broken = mh_xrealloc(broken, len * sizeof(*broken));
}
/* handle separators */
- while ((c=*s) && strchr(brksep, c)) {
+ while ((c=*s) && brksep && strchr(brksep, c)) {
*s++ = '\0';
}
** we are either at the end of the string, or the
** terminator found has been found, so finish up.
*/
- if (!c || strchr(brkterm, c)) {
+ if (!c || (brkterm && strchr(brkterm, c))) {
*s = '\0';
broken[i] = NULL;
return broken;
/* set next start addr and walk over word */
broken[i] = s;
- while ((c=*++s) && !strchr(brksep, c) && !strchr(brkterm, c)) {
- continue;
+ while ((c = *++s)) {
+ if (brksep && strchr(brksep, c)) {
+ break;
+ }
+ if (brkterm && strchr(brkterm, c)) {
+ break;
+ }
}
}
- adios("brkstring()", "reached unreachable point");
+ adios(EX_SOFTWARE, "brkstring()", "reached unreachable point");
}