diff --git a/ChangeLog b/ChangeLog index 67fc84ba..4a581eae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,8 @@ these functions, to be more distinguishable. * src/rcfile.c (parse_colors): Reduce the indentation. * src/rcfile.c (parse_colors): Rename a variable. + * src/rcfile.c (parse_colors, parse_rcfile): Refind the tail of + the colors list only when extending, not for every added color. 2016-03-11 Benno Schulenberg * src/browser.c (do_browser): Fix compilation when configured with diff --git a/src/rcfile.c b/src/rcfile.c index e1f1a27e..26bd0fea 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -705,13 +705,8 @@ void parse_colors(char *ptr, bool icase) #endif if (endcolor == NULL) live_syntax->color = newcolor; - else { - /* Need to recompute endcolor now so we can extend - * colors to syntaxes. */ - for (endcolor = live_syntax->color; endcolor->next != NULL;) - endcolor = endcolor->next; + else endcolor->next = newcolor; - } endcolor = newcolor; } @@ -963,6 +958,12 @@ void parse_rcfile(FILE *rcstream live_syntax = sint; opensyntax = TRUE; + /* Refind the tail of the color list for this syntax. */ + endcolor = sint->color; + if (endcolor != NULL) + while (endcolor->next != NULL) + endcolor = endcolor->next; + keyword = ptr; ptr = parse_next_word(ptr); }