From 4d53694a271b3c05b85a85fa3238366081965ebe Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Fri, 26 Feb 2016 16:37:23 +0000 Subject: [PATCH] Factoring out a triple repetition into found_in_list(). git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5686 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 1 + src/color.c | 87 ++++++++++++++++++++++------------------------------- 2 files changed, 37 insertions(+), 51 deletions(-) diff --git a/ChangeLog b/ChangeLog index f17944f5..9707a43a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ * src/color.c (color_update): Look for a default syntax only when all else failed -- forego the small, complicating optimization. * src/color.c (color_update): Strip things bare to see the sameness. + * src/color.c (found_in_list): Factor out this triple repetition. GNU nano 2.5.3 - 2016.02.25 diff --git a/src/color.c b/src/color.c index 446055b5..bd670031 100644 --- a/src/color.c +++ b/src/color.c @@ -149,12 +149,36 @@ void nfreeregex(regex_t **r) *r = NULL; } +/* Try to match the given shibboleth string with one of the regexes in + * the list starting at head. Return TRUE upon success. */ +bool found_in_list(regexlisttype *head, const char *shibboleth) +{ + regexlisttype *item; + bool not_compiled; + + for (item = head; item != NULL; item = item->next) { + not_compiled = (item->ext == NULL); + + if (not_compiled) { + item->ext = (regex_t *)nmalloc(sizeof(regex_t)); + regcomp(item->ext, fixbounds(item->ext_regex), REG_EXTENDED); + } + + if (regexec(item->ext, shibboleth, 0, NULL, 0) == 0) + return TRUE; + + if (not_compiled) + nfreeregex(&item->ext); + } + + return FALSE; +} + /* Update the color information based on the current filename. */ void color_update(void) { syntaxtype *tmpsyntax; colortype *tmpcolor; - regexlisttype *e; assert(openfile != NULL); @@ -209,22 +233,9 @@ void color_update(void) for (tmpsyntax = syntaxes; tmpsyntax != NULL; tmpsyntax = tmpsyntax->next) { - for (e = tmpsyntax->extensions; e != NULL; e = e->next) { - bool not_compiled = (e->ext == NULL); - - if (not_compiled) { - e->ext = (regex_t *)nmalloc(sizeof(regex_t)); - regcomp(e->ext, fixbounds(e->ext_regex), REG_EXTENDED); - } - - if (regexec(e->ext, fullname, 0, NULL, 0) == 0) { - openfile->syntax = tmpsyntax; - openfile->colorstrings = tmpsyntax->color; - break; - } - - if (not_compiled) - nfreeregex(&e->ext); + if (found_in_list(tmpsyntax->extensions, fullname)) { + openfile->syntax = tmpsyntax; + openfile->colorstrings = tmpsyntax->color; } } @@ -239,22 +250,9 @@ void color_update(void) for (tmpsyntax = syntaxes; tmpsyntax != NULL; tmpsyntax = tmpsyntax->next) { - for (e = tmpsyntax->headers; e != NULL; e = e->next) { - bool not_compiled = (e->ext == NULL); - - if (not_compiled) { - e->ext = (regex_t *)nmalloc(sizeof(regex_t)); - regcomp(e->ext, fixbounds(e->ext_regex), REG_EXTENDED); - } - - if (regexec(e->ext, openfile->fileage->data, 0, NULL, 0) == 0) { - openfile->syntax = tmpsyntax; - openfile->colorstrings = tmpsyntax->color; - break; - } - - if (not_compiled) - nfreeregex(&e->ext); + if (found_in_list(tmpsyntax->headers, openfile->fileage->data)) { + openfile->syntax = tmpsyntax; + openfile->colorstrings = tmpsyntax->color; } } } @@ -290,30 +288,17 @@ void color_update(void) } /* Now try and find a syntax that matches the magicstring. */ - for (tmpsyntax = syntaxes; tmpsyntax != NULL; - tmpsyntax = tmpsyntax->next) { - - for (e = tmpsyntax->magics; e != NULL; e = e->next) { - bool not_compiled = (e->ext == NULL); - - if (not_compiled) { - e->ext = (regex_t *)nmalloc(sizeof(regex_t)); - regcomp(e->ext, fixbounds(e->ext_regex), REG_EXTENDED); - } - - if (magicstring && regexec(e->ext, magicstring, 0, NULL, 0) == 0) { + if (magicstring != NULL) { + for (tmpsyntax = syntaxes; tmpsyntax != NULL; + tmpsyntax = tmpsyntax->next) { + if (found_in_list(tmpsyntax->magics, magicstring)) { openfile->syntax = tmpsyntax; openfile->colorstrings = tmpsyntax->color; break; } - - if (not_compiled) - nfreeregex(&e->ext); } - - if (openfile->syntax != NULL) - break; } + if (stat(openfile->filename, &fileinfo) == 0) magic_close(cookie); }