}
}
+ static int
+set_option_value_err(key, numval, stringval, opt_flags)
+ char_u *key;
+ int numval;
+ char_u *stringval;
+ int opt_flags;
+{
+ char_u *errmsg;
+
+ if ((errmsg = set_option_value(key, numval, stringval, opt_flags)))
+ {
+ if (VimTryEnd())
+ return FAIL;
+ PyErr_SetVim((char *)errmsg);
+ return FAIL;
+ }
+ return OK;
+}
+
static int
set_option_value_for(key, numval, stringval, opt_flags, opt_type, from)
char_u *key;
win_T *save_curwin = NULL;
tabpage_T *save_curtab = NULL;
buf_T *save_curbuf = NULL;
+ int r = 0;
VimTryStart();
switch (opt_type)
PyErr_SetVim("Problem while switching windows.");
return -1;
}
- set_option_value(key, numval, stringval, opt_flags);
+ r = set_option_value_err(key, numval, stringval, opt_flags);
restore_win(save_curwin, save_curtab);
+ if (r == FAIL)
+ return -1;
break;
case SREQ_BUF:
switch_buffer(&save_curbuf, (buf_T *)from);
- set_option_value(key, numval, stringval, opt_flags);
+ r = set_option_value_err(key, numval, stringval, opt_flags);
restore_buffer(save_curbuf);
+ if (r == FAIL)
+ return -1;
break;
case SREQ_GLOBAL:
- set_option_value(key, numval, stringval, opt_flags);
+ r = set_option_value_err(key, numval, stringval, opt_flags);
+ if (r == FAIL)
+ return -1;
break;
}
return VimTryEnd();
if (flags & SOPT_BOOL)
{
int istrue = PyObject_IsTrue(valObject);
+
if (istrue == -1)
return -1;
r = set_option_value_for(key, istrue, NULL,
# define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
#endif
static void set_string_option_global __ARGS((int opt_idx, char_u **varp));
-static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
+static char_u *set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags));
static char_u *set_chars_option __ARGS((char_u **varp));
#ifdef FEAT_SYN_HL
/*
* Set a string option to a new value, and handle the effects.
+ *
+ * Returns NULL on success or error message on error.
*/
- static void
+ static char_u *
set_string_option(opt_idx, value, opt_flags)
int opt_idx;
char_u *value;
char_u *s;
char_u **varp;
char_u *oldval;
+ char_u *r = NULL;
if (options[opt_idx].var == NULL) /* don't set hidden option */
- return;
+ return NULL;
s = vim_strsave(value);
if (s != NULL)
: opt_flags);
oldval = *varp;
*varp = s;
- if (did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
- opt_flags) == NULL)
+ if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
+ opt_flags)) == NULL)
did_set_option(opt_idx, opt_flags, TRUE);
}
+ return r;
}
/*
/*
* Set the value of option "name".
* Use "string" for string options, use "number" for other options.
+ *
+ * Returns NULL on success or error message on error.
*/
- void
+ char_u *
set_option_value(name, number, string, opt_flags)
char_u *name;
long number;
if (sandbox > 0 && (flags & P_SECURE))
{
EMSG(_(e_sandbox));
- return;
+ return NULL;
}
#endif
if (flags & P_STRING)
- set_string_option(opt_idx, string, opt_flags);
+ return set_string_option(opt_idx, string, opt_flags);
else
{
varp = get_varp_scope(&(options[opt_idx]), opt_flags);
* num option using a string. */
EMSG3(_("E521: Number required: &%s = '%s'"),
name, string);
- return; /* do nothing as we hit an error */
+ return NULL; /* do nothing as we hit an error */
}
}
if (flags & P_NUM)
- (void)set_num_option(opt_idx, varp, number,
+ return set_num_option(opt_idx, varp, number,
NULL, 0, opt_flags);
else
- (void)set_bool_option(opt_idx, varp, (int)number,
+ return set_bool_option(opt_idx, varp, (int)number,
opt_flags);
}
}
}
+ return NULL;
}
/*
char_u *check_stl_option __ARGS((char_u *s));
int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from));
-void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
+char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
char_u *get_term_code __ARGS((char_u *tname));
char_u *get_highlight_default __ARGS((void));
char_u *get_encoding_default __ARGS((void));