version 1.34, 2020/07/30 17:45:44 |
version 1.35, 2020/12/09 20:00:11 |
|
|
static int * |
static int * |
intalloc(size_t n, const char *f) |
intalloc(size_t n, const char *f) |
{ |
{ |
void *p = calloc(n, sizeof(int)); |
int *p = (int *) calloc(n, sizeof(int)); |
if (p == NULL) |
if (p == NULL) |
overflo(f); |
overflo(f); |
return p; |
return p; |
|
|
allocsetvec(const char *f) |
allocsetvec(const char *f) |
{ |
{ |
maxsetvec = MAXLIN; |
maxsetvec = MAXLIN; |
setvec = reallocarray(setvec, maxsetvec, sizeof(*setvec)); |
setvec = (int *) reallocarray(setvec, maxsetvec, sizeof(*setvec)); |
tmpset = reallocarray(tmpset, maxsetvec, sizeof(*tmpset)); |
tmpset = (int *) reallocarray(tmpset, maxsetvec, sizeof(*tmpset)); |
if (setvec == NULL || tmpset == NULL) |
if (setvec == NULL || tmpset == NULL) |
overflo(f); |
overflo(f); |
} |
} |
|
|
static void |
static void |
resizesetvec(const char *f) |
resizesetvec(const char *f) |
{ |
{ |
setvec = reallocarray(setvec, maxsetvec, 4 * sizeof(*setvec)); |
setvec = (int *) reallocarray(setvec, maxsetvec, 4 * sizeof(*setvec)); |
tmpset = reallocarray(tmpset, maxsetvec, 4 * sizeof(*tmpset)); |
tmpset = (int *) reallocarray(tmpset, maxsetvec, 4 * sizeof(*tmpset)); |
if (setvec == NULL || tmpset == NULL) |
if (setvec == NULL || tmpset == NULL) |
overflo(f); |
overflo(f); |
maxsetvec *= 4; |
maxsetvec *= 4; |
|
|
static void |
static void |
resize_state(fa *f, int state) |
resize_state(fa *f, int state) |
{ |
{ |
void *p; |
unsigned int **p; |
|
uschar *p2; |
|
int **p3; |
int i, new_count; |
int i, new_count; |
|
|
if (++state < f->state_count) |
if (++state < f->state_count) |
|
|
|
|
new_count = state + 10; /* needs to be tuned */ |
new_count = state + 10; /* needs to be tuned */ |
|
|
p = reallocarray(f->gototab, new_count, sizeof(f->gototab[0])); |
p = (unsigned int **) reallocarray(f->gototab, new_count, sizeof(f->gototab[0])); |
if (p == NULL) |
if (p == NULL) |
goto out; |
goto out; |
f->gototab = p; |
f->gototab = p; |
|
|
p = reallocarray(f->out, new_count, sizeof(f->out[0])); |
p2 = (uschar *) reallocarray(f->out, new_count, sizeof(f->out[0])); |
if (p == NULL) |
if (p2 == NULL) |
goto out; |
goto out; |
f->out = p; |
f->out = p2; |
|
|
p = reallocarray(f->posns, new_count, sizeof(f->posns[0])); |
p3 = (int **) reallocarray(f->posns, new_count, sizeof(f->posns[0])); |
if (p == NULL) |
if (p3 == NULL) |
goto out; |
goto out; |
f->posns = p; |
f->posns = p3; |
|
|
for (i = f->state_count; i < new_count; ++i) { |
for (i = f->state_count; i < new_count; ++i) { |
f->gototab[i] = calloc(NCHARS, sizeof(**f->gototab)); |
f->gototab[i] = (unsigned int *) calloc(NCHARS, sizeof(**f->gototab)); |
if (f->gototab[i] == NULL) |
if (f->gototab[i] == NULL) |
goto out; |
goto out; |
f->out[i] = 0; |
f->out[i] = 0; |
|
|
|
|
poscnt = 0; |
poscnt = 0; |
penter(p1); /* enter parent pointers and leaf indices */ |
penter(p1); /* enter parent pointers and leaf indices */ |
if ((f = calloc(1, sizeof(fa) + poscnt * sizeof(rrow))) == NULL) |
if ((f = (fa *) calloc(1, sizeof(fa) + poscnt * sizeof(rrow))) == NULL) |
overflo(__func__); |
overflo(__func__); |
f->accept = poscnt-1; /* penter has computed number of positions in re */ |
f->accept = poscnt-1; /* penter has computed number of positions in re */ |
cfoll(f, p1); /* set up follow sets */ |
cfoll(f, p1); /* set up follow sets */ |
|
|
static int bufsz = 100; |
static int bufsz = 100; |
|
|
op = p; |
op = p; |
if (buf == NULL && (buf = malloc(bufsz)) == NULL) |
if (buf == NULL && (buf = (uschar *) malloc(bufsz)) == NULL) |
FATAL("out of space for character class [%.10s...] 1", p); |
FATAL("out of space for character class [%.10s...] 1", p); |
bp = buf; |
bp = buf; |
for (i = 0; (c = *p++) != 0; ) { |
for (i = 0; (c = *p++) != 0; ) { |
|
|
} else if (special_case == REPEAT_ZERO) { |
} else if (special_case == REPEAT_ZERO) { |
size += 2; /* just a null ERE: () */ |
size += 2; /* just a null ERE: () */ |
} |
} |
if ((buf = malloc(size + 1)) == NULL) |
if ((buf = (uschar *) malloc(size + 1)) == NULL) |
FATAL("out of space in reg expr %.10s..", lastre); |
FATAL("out of space in reg expr %.10s..", lastre); |
memcpy(buf, basestr, prefix_length); /* copy prefix */ |
memcpy(buf, basestr, prefix_length); /* copy prefix */ |
j = prefix_length; |
j = prefix_length; |
|
|
rlxval = c; |
rlxval = c; |
return CHAR; |
return CHAR; |
case '[': |
case '[': |
if (buf == NULL && (buf = malloc(bufsz)) == NULL) |
if (buf == NULL && (buf = (uschar *) malloc(bufsz)) == NULL) |
FATAL("out of space in reg expr %.10s..", lastre); |
FATAL("out of space in reg expr %.10s..", lastre); |
bp = buf; |
bp = buf; |
if (*prestr == '^') { |
if (*prestr == '^') { |