tweaks: use a cheaper way to detect an end-of-line
There is no need to compute the line length: just avoid overstepping the terminating NUL byte when being forced to advance the index.master
parent
414a1ecc8d
commit
775f007348
13
src/color.c
13
src/color.c
|
@ -414,7 +414,6 @@ void precalc_multicolorinfo(void)
|
|||
|
||||
for (line = openfile->fileage; line != NULL; line = line->next) {
|
||||
int index = 0;
|
||||
int linelen = strlen(line->data);
|
||||
|
||||
alloc_multidata_if_needed(line);
|
||||
/* Assume nothing applies until proven otherwise below. */
|
||||
|
@ -424,11 +423,9 @@ void precalc_multicolorinfo(void)
|
|||
* found, mark all the lines that are affected. */
|
||||
while (regexec(ink->start, line->data + index, 1,
|
||||
&startmatch, (index == 0) ? 0 : REG_NOTBOL) == 0) {
|
||||
/* Begin looking for an end match after the start match. */
|
||||
index += startmatch.rm_eo;
|
||||
|
||||
if (index > linelen)
|
||||
break;
|
||||
|
||||
/* If there is an end match on this line, mark the line, but
|
||||
* continue looking for other starts after it. */
|
||||
if (regexec(ink->end, line->data + index, 1,
|
||||
|
@ -437,8 +434,12 @@ void precalc_multicolorinfo(void)
|
|||
index += endmatch.rm_eo;
|
||||
/* If both start and end are mere anchors, step ahead. */
|
||||
if (startmatch.rm_so == startmatch.rm_eo &&
|
||||
endmatch.rm_so == endmatch.rm_eo)
|
||||
index += 1;
|
||||
endmatch.rm_so == endmatch.rm_eo) {
|
||||
/* When at end-of-line, we're done. */
|
||||
if (line->data[index] == '\0')
|
||||
break;
|
||||
index = move_mbright(line->data, index);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
18
src/winio.c
18
src/winio.c
|
@ -2419,8 +2419,6 @@ void edit_draw(filestruct *fileptr, const char *converted,
|
|||
/* The line that matches 'end'. */
|
||||
regmatch_t startmatch, endmatch;
|
||||
/* The match positions of the start and end regexes. */
|
||||
int linelen;
|
||||
/* The length of the line we are currently looking at. */
|
||||
|
||||
/* First see if the multidata was maybe already calculated. */
|
||||
if (fileptr->multidata[varnish->id] == CNONE)
|
||||
|
@ -2476,8 +2474,6 @@ void edit_draw(filestruct *fileptr, const char *converted,
|
|||
start_line->multidata[varnish->id] == CSTARTENDHERE))
|
||||
goto step_two;
|
||||
|
||||
linelen = strlen(start_line->data);
|
||||
|
||||
/* Now start_line is the first line before fileptr containing
|
||||
* a start match. Is there a start on that line not followed
|
||||
* by an end on that line? */
|
||||
|
@ -2486,9 +2482,9 @@ void edit_draw(filestruct *fileptr, const char *converted,
|
|||
index += startmatch.rm_eo;
|
||||
/* If the start match is of length zero, step ahead. */
|
||||
if (startmatch.rm_so == startmatch.rm_eo) {
|
||||
index = move_mbright(start_line->data, index);
|
||||
if (index > linelen)
|
||||
if (start_line->data[index] == '\0')
|
||||
break;
|
||||
index = move_mbright(start_line->data, index);
|
||||
}
|
||||
/* If there is no end after this last start, good. */
|
||||
if (regexec(varnish->end, start_line->data + index,
|
||||
|
@ -2498,9 +2494,9 @@ void edit_draw(filestruct *fileptr, const char *converted,
|
|||
index += endmatch.rm_eo;
|
||||
/* If the end match is of length zero, step ahead. */
|
||||
if (endmatch.rm_so == endmatch.rm_eo) {
|
||||
index = move_mbright(start_line->data, index);
|
||||
if (index > linelen)
|
||||
if (start_line->data[index] == '\0')
|
||||
break;
|
||||
index = move_mbright(start_line->data, index);
|
||||
}
|
||||
/* If there is no later start on this line, next step. */
|
||||
if (regexec(varnish->start, start_line->data + index,
|
||||
|
@ -2545,8 +2541,6 @@ void edit_draw(filestruct *fileptr, const char *converted,
|
|||
* looking only after an end match, if there is one. */
|
||||
index = (paintlen == 0) ? 0 : endmatch.rm_eo;
|
||||
|
||||
linelen = strlen(fileptr->data);
|
||||
|
||||
while (regexec(varnish->start, fileptr->data + index,
|
||||
1, &startmatch, (index == 0) ?
|
||||
0 : REG_NOTBOL) == 0) {
|
||||
|
@ -2586,9 +2580,9 @@ void edit_draw(filestruct *fileptr, const char *converted,
|
|||
index = endmatch.rm_eo;
|
||||
/* If the end match is of length zero, step ahead. */
|
||||
if (endmatch.rm_so == endmatch.rm_eo) {
|
||||
index = move_mbright(fileptr->data, index);
|
||||
if (index > linelen)
|
||||
if (fileptr->data[index] == '\0')
|
||||
break;
|
||||
index = move_mbright(fileptr->data, index);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue