in parse_syntax(), don't generate an error if we find a duplicate syntax

name, since we might be trying to override a syntax in the global nanorc
with one in our local nanorc; instead, free any duplicate syntaxes we
find, so that we always use the last syntax with a given name


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3382 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
David Lawrence Ramsey 2006-04-15 16:02:02 +00:00
parent 8f6fb3c6b6
commit 39b7189a13
2 changed files with 13 additions and 3 deletions

View File

@ -67,6 +67,11 @@ CVS code -
parse_syntax()
- Properly generate an error if we've read in a previous syntax
without any associated color commands. (DLR)
- Don't generate an error if we find a duplicate syntax name,
since we might be trying to override a syntax in the global
nanorc with one in our local nanorc. Instead, free any
duplicate syntaxes we find, so that we always use the last
syntax with a given name. (DLR)
parse_colors()
- Check for a color command's not following a syntax line before
anything else. (DLR)

View File

@ -276,7 +276,7 @@ bool nregcomp(const char *regex, int eflags)
void parse_syntax(char *ptr)
{
const char *fileregptr = NULL, *nameptr = NULL;
const syntaxtype *tmpsyntax;
syntaxtype *tmpsyntax;
exttype *endext = NULL;
/* The end of the extensions list for this syntax. */
@ -306,11 +306,16 @@ void parse_syntax(char *ptr)
if (ptr == NULL)
return;
/* Search for a duplicate syntax name. If we find one, free it, so
* that we always use the last syntax with a given name. */
for (tmpsyntax = syntaxes; tmpsyntax != NULL;
tmpsyntax = tmpsyntax->next) {
if (strcmp(nameptr, tmpsyntax->desc) == 0) {
rcfile_error(N_("Duplicate syntax name %s"), nameptr);
return;
syntaxtype *prev_syntax = tmpsyntax;
tmpsyntax = tmpsyntax->next;
free(prev_syntax);
break;
}
}