From 2993ac5fce5450428322ce43aaa5e643e6994443 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 10 Feb 2018 14:12:43 +0100 Subject: patch 8.0.1490: number of spell regions is spread out through the code Problem: Number of spell regions is spread out through the code. Solution: Define MAXREGIONS. --- src/spell.h | 5 ++++- src/spellfile.c | 19 ++++++++++--------- src/version.c | 2 ++ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/spell.h b/src/spell.h index 4c44b546a8..49ec0601e9 100644 --- a/src/spell.h +++ b/src/spell.h @@ -34,6 +34,8 @@ byte, thus it can't be above 255. Must be >= PFD_NOTSPECIAL. */ +#define MAXREGIONS 8 /* Number of regions supported. */ + /* Type used for indexes in the word tree need to be at least 4 bytes. If int * is 8 bytes we could use something smaller, but what? */ #if VIM_SIZEOF_INT > 3 @@ -80,7 +82,8 @@ struct slang_S char_u *sl_info; /* infotext string or NULL */ - char_u sl_regions[17]; /* table with up to 8 region names plus NUL */ + char_u sl_regions[MAXREGIONS * 2 + 1]; + /* table with up to 8 region names plus NUL */ char_u *sl_midword; /* MIDWORD string or NULL */ diff --git a/src/spellfile.c b/src/spellfile.c index f6d7a6432f..e5cc84164b 100644 --- a/src/spellfile.c +++ b/src/spellfile.c @@ -54,8 +54,8 @@ * website, etc) * * sectionID == SN_REGION: ... - * 2 bytes Up to 8 region names: ca, au, etc. Lower case. - * First is region 1. + * 2 bytes Up to MAXREGIONS region names: ca, au, etc. Lower + * case. First is region 1. * * sectionID == SN_CHARFLAGS: * @@ -832,7 +832,7 @@ read_region_section(FILE *fd, slang_T *lp, int len) { int i; - if (len > 16) + if (len > MAXREGIONS * 2) return SP_FORMERROR; for (i = 0; i < len; ++i) lp->sl_regions[i] = getc(fd); /* */ @@ -1952,8 +1952,9 @@ typedef struct spellinfo_S char_u *si_info; /* info text chars or NULL */ int si_region_count; /* number of regions supported (1 when there are no regions) */ - char_u si_region_name[17]; /* region names; used only if - * si_region_count > 1) */ + char_u si_region_name[MAXREGIONS * 2 + 1]; + /* region names; used only if + * si_region_count > 1) */ garray_T si_rep; /* list of fromto_T entries from REP lines */ garray_T si_repsal; /* list of fromto_T entries from REPSAL lines */ @@ -4234,7 +4235,7 @@ spell_read_wordfile(spellinfo_T *spin, char_u *fname) else { line += 8; - if (STRLEN(line) > 16) + if (STRLEN(line) > MAXREGIONS * 2) smsg((char_u *)_("Too many regions in %s line %d: %s"), fname, lnum, line); else @@ -5954,7 +5955,7 @@ mkspell( char_u *wfname; char_u **innames; int incount; - afffile_T *(afile[8]); + afffile_T *(afile[MAXREGIONS]); int i; int len; stat_T st; @@ -6025,8 +6026,8 @@ mkspell( EMSG(_(e_invarg)); /* need at least output and input names */ else if (vim_strchr(gettail(wfname), '_') != NULL) EMSG(_("E751: Output file name must not have region name")); - else if (incount > 8) - EMSG(_("E754: Only up to 8 regions supported")); + else if (incount > MAXREGIONS) + EMSGN(_("E754: Only up to %ld regions supported"), MAXREGIONS); else { /* Check for overwriting before doing things that may take a lot of diff --git a/src/version.c b/src/version.c index ccc10668ae..0a54751895 100644 --- a/src/version.c +++ b/src/version.c @@ -771,6 +771,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1490, /**/ 1489, /**/ -- cgit v1.2.3