commit 39b7189a134d870d0fd3dd7599891a2ce34c7b80
parent 8f6fb3c6b6af777d08abaa844f791fd32dc17b30
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Sat, 15 Apr 2006 16:02:02 +0000
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
Diffstat:
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -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)
diff --git a/src/rcfile.c b/src/rcfile.c
@@ -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;
}
}