summaryrefslogtreecommitdiff
path: root/src/option.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/option.c')
-rw-r--r--src/option.c123
1 files changed, 81 insertions, 42 deletions
diff --git a/src/option.c b/src/option.c
index 29ab1efe8..cfca188d9 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2996,35 +2996,44 @@ set_init_1()
* 'maxmemtot' and 'maxmem' may have to be adjusted for available memory
*/
opt_idx = findoption((char_u *)"maxmemtot");
+ if (opt_idx >= 0)
+ {
#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
- if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
+ if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
#endif
- {
+ {
#ifdef HAVE_AVAIL_MEM
- /* Use amount of memory available at this moment. */
- n = (mch_avail_mem(FALSE) >> 11);
+ /* Use amount of memory available at this moment. */
+ n = (mch_avail_mem(FALSE) >> 11);
#else
# ifdef HAVE_TOTAL_MEM
- /* Use amount of memory available to Vim. */
- n = (mch_total_mem(FALSE) >> 11);
+ /* Use amount of memory available to Vim. */
+ n = (mch_total_mem(FALSE) >> 11);
# else
- n = (0x7fffffff >> 11);
+ n = (0x7fffffff >> 11);
# endif
#endif
- options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
- opt_idx = findoption((char_u *)"maxmem");
+ options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+ opt_idx = findoption((char_u *)"maxmem");
+ if (opt_idx >= 0)
+ {
#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
- if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
- || (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
+ if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
+ || (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
#endif
- options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+ options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+ }
+ }
}
#ifdef FEAT_GUI_W32
/* force 'shortname' for Win32s */
if (gui_is_win32s())
- options[findoption((char_u *)"shortname")].def_val[VI_DEFAULT] =
- (char_u *)TRUE;
+ {
+ opt_idx = findoption((char_u *)"shortname");
+ if (opt_idx >= 0)
+ options[opt_idx].def_val[VI_DEFAULT] = (char_u *)TRUE;
+ }
#endif
#ifdef FEAT_SEARCHPATH
@@ -3057,8 +3066,11 @@ set_init_1()
}
buf[j] = NUL;
opt_idx = findoption((char_u *)"cdpath");
- options[opt_idx].def_val[VI_DEFAULT] = buf;
- options[opt_idx].flags |= P_DEF_ALLOCED;
+ if (opt_idx >= 0)
+ {
+ options[opt_idx].def_val[VI_DEFAULT] = buf;
+ options[opt_idx].flags |= P_DEF_ALLOCED;
+ }
}
if (mustfree)
vim_free(cdpath);
@@ -3259,8 +3271,11 @@ set_init_1()
if (mb_init() == NULL)
{
opt_idx = findoption((char_u *)"encoding");
- options[opt_idx].def_val[VI_DEFAULT] = p_enc;
- options[opt_idx].flags |= P_DEF_ALLOCED;
+ if (opt_idx >= 0)
+ {
+ options[opt_idx].def_val[VI_DEFAULT] = p_enc;
+ options[opt_idx].flags |= P_DEF_ALLOCED;
+ }
#if defined(MSDOS) || defined(MSWIN) || defined(OS2) || defined(MACOS) \
|| defined(VMS)
@@ -3278,9 +3293,11 @@ set_init_1()
set_string_option_direct((char_u *)"isk", -1,
ISK_LATIN1, OPT_FREE, SID_NONE);
opt_idx = findoption((char_u *)"isp");
- options[opt_idx].def_val[VIM_DEFAULT] = ISP_LATIN1;
+ if (opt_idx >= 0)
+ options[opt_idx].def_val[VIM_DEFAULT] = ISP_LATIN1;
opt_idx = findoption((char_u *)"isk");
- options[opt_idx].def_val[VIM_DEFAULT] = ISK_LATIN1;
+ if (opt_idx >= 0)
+ options[opt_idx].def_val[VIM_DEFAULT] = ISK_LATIN1;
(void)init_chartab();
}
#endif
@@ -3297,8 +3314,11 @@ set_init_1()
if (p_tenc != NULL)
{
opt_idx = findoption((char_u *)"termencoding");
- options[opt_idx].def_val[VI_DEFAULT] = p_tenc;
- options[opt_idx].flags |= P_DEF_ALLOCED;
+ if (opt_idx >= 0)
+ {
+ options[opt_idx].def_val[VI_DEFAULT] = p_tenc;
+ options[opt_idx].flags |= P_DEF_ALLOCED;
+ }
convert_setup(&input_conv, p_tenc, p_enc);
convert_setup(&output_conv, p_enc, p_tenc);
}
@@ -3436,10 +3456,13 @@ set_string_default(name, val)
if (p != NULL) /* we don't want a NULL */
{
opt_idx = findoption((char_u *)name);
- if (options[opt_idx].flags & P_DEF_ALLOCED)
- vim_free(options[opt_idx].def_val[VI_DEFAULT]);
- options[opt_idx].def_val[VI_DEFAULT] = p;
- options[opt_idx].flags |= P_DEF_ALLOCED;
+ if (opt_idx >= 0)
+ {
+ if (options[opt_idx].flags & P_DEF_ALLOCED)
+ vim_free(options[opt_idx].def_val[VI_DEFAULT]);
+ options[opt_idx].def_val[VI_DEFAULT] = p;
+ options[opt_idx].flags |= P_DEF_ALLOCED;
+ }
}
}
@@ -3452,7 +3475,11 @@ set_number_default(name, val)
char *name;
long val;
{
- options[findoption((char_u *)name)].def_val[VI_DEFAULT] = (char_u *)val;
+ int opt_idx;
+
+ opt_idx = findoption((char_u *)name);
+ if (opt_idx >= 0)
+ options[opt_idx].def_val[VI_DEFAULT] = (char_u *)val;
}
#if defined(EXITFREE) || defined(PROTO)
@@ -3498,7 +3525,7 @@ set_init_2()
*/
set_number_default("scroll", (long)((long_u)Rows >> 1));
idx = findoption((char_u *)"scroll");
- if (!(options[idx].flags & P_WAS_SET))
+ if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
set_option_default(idx, OPT_LOCAL, p_cp);
comp_col();
@@ -3507,7 +3534,7 @@ set_init_2()
* Default is Rows - 1.
*/
idx = findoption((char_u *)"wi");
- if (!(options[idx].flags & P_WAS_SET))
+ if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
p_window = Rows - 1;
set_number_default("window", Rows - 1);
@@ -3519,7 +3546,8 @@ set_init_2()
* with a dark background, that can handle color.
*/
idx = findoption((char_u *)"bg");
- if (!(options[idx].flags & P_WAS_SET) && *term_bg_default() == 'd')
+ if (idx >= 0 && !(options[idx].flags & P_WAS_SET)
+ && *term_bg_default() == 'd')
{
set_string_option_direct(NULL, idx, (char_u *)"dark", OPT_FREE, 0);
/* don't mark it as set, when starting the GUI it may be
@@ -3594,10 +3622,16 @@ set_init_3()
#endif
idx_srr = findoption((char_u *)"srr");
- do_srr = !(options[idx_srr].flags & P_WAS_SET);
+ if (idx_srr < 0)
+ do_srr = FALSE;
+ else
+ do_srr = !(options[idx_srr].flags & P_WAS_SET);
#ifdef FEAT_QUICKFIX
idx_sp = findoption((char_u *)"sp");
- do_sp = !(options[idx_sp].flags & P_WAS_SET);
+ if (idx_sp < 0)
+ do_sp = FALSE;
+ else
+ do_sp = !(options[idx_sp].flags & P_WAS_SET);
#endif
/*
@@ -3692,7 +3726,7 @@ set_init_3()
int idx3;
idx3 = findoption((char_u *)"shcf");
- if (!(options[idx3].flags & P_WAS_SET))
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
{
p_shcf = (char_u *)"-c";
options[idx3].def_val[VI_DEFAULT] = p_shcf;
@@ -3702,14 +3736,14 @@ set_init_3()
# ifdef WIN3264
/* Somehow Win32 requires the quotes around the redirection too */
idx3 = findoption((char_u *)"sxq");
- if (!(options[idx3].flags & P_WAS_SET))
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
{
p_sxq = (char_u *)"\"";
options[idx3].def_val[VI_DEFAULT] = p_sxq;
}
# else
idx3 = findoption((char_u *)"shq");
- if (!(options[idx3].flags & P_WAS_SET))
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
{
p_shq = (char_u *)"\"";
options[idx3].def_val[VI_DEFAULT] = p_shq;
@@ -3738,7 +3772,7 @@ set_helplang_default(lang)
if (lang == NULL || STRLEN(lang) < 2) /* safety check */
return;
idx = findoption((char_u *)"hlg");
- if (!(options[idx].flags & P_WAS_SET))
+ if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
{
if (options[idx].flags & P_ALLOCED)
free_string_option(p_hlg);
@@ -3807,7 +3841,7 @@ set_title_defaults()
* not need to be contacted.
*/
idx1 = findoption((char_u *)"title");
- if (!(options[idx1].flags & P_WAS_SET))
+ if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET))
{
#ifdef FEAT_GUI
if (gui.starting || gui.in_use)
@@ -3819,7 +3853,7 @@ set_title_defaults()
p_title = val;
}
idx1 = findoption((char_u *)"icon");
- if (!(options[idx1].flags & P_WAS_SET))
+ if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET))
{
#ifdef FEAT_GUI
if (gui.starting || gui.in_use)
@@ -5224,7 +5258,7 @@ set_string_option_direct(name, opt_idx, val, opt_flags, set_sid)
if (opt_idx == -1) /* use name */
{
opt_idx = findoption(name);
- if (opt_idx == -1) /* not found (should not happen) */
+ if (opt_idx < 0) /* not found (should not happen) */
{
EMSG2(_(e_intern2), "set_string_option_direct()");
return;
@@ -8127,7 +8161,7 @@ set_option_value(name, number, string, opt_flags)
long_u flags;
opt_idx = findoption(name);
- if (opt_idx == -1)
+ if (opt_idx < 0)
EMSG2(_("E355: Unknown option: %s"), name);
else
{
@@ -9464,7 +9498,8 @@ reset_modifiable()
curbuf->b_p_ma = FALSE;
p_ma = FALSE;
opt_idx = findoption((char_u *)"ma");
- options[opt_idx].def_val[VI_DEFAULT] = FALSE;
+ if (opt_idx >= 0)
+ options[opt_idx].def_val[VI_DEFAULT] = FALSE;
}
/*
@@ -10297,12 +10332,16 @@ vimrc_found(fname, envname)
change_compatible(on)
int on;
{
+ int opt_idx;
+
if (p_cp != on)
{
p_cp = on;
compatible_set();
}
- options[findoption((char_u *)"cp")].flags |= P_WAS_SET;
+ opt_idx = findoption((char_u *)"cp");
+ if (opt_idx >= 0)
+ options[opt_idx].flags |= P_WAS_SET;
}
/*