@@ -3463,7 +3463,6 @@ f_getwinvar(typval_T *argvars, typval_T *rettv)
34633463f_getbufvar (typval_T * argvars , typval_T * rettv )
34643464{
34653465 buf_T * buf ;
3466- buf_T * save_curbuf ;
34673466 char_u * varname ;
34683467 dictitem_T * v ;
34693468 int done = FALSE;
@@ -3478,12 +3477,13 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
34783477
34793478 if (buf != NULL && varname != NULL )
34803479 {
3481- // set curbuf to be our buf, temporarily
3482- save_curbuf = curbuf ;
3483- curbuf = buf ;
3484-
34853480 if (* varname == '&' )
34863481 {
3482+ buf_T * save_curbuf = curbuf ;
3483+
3484+ // set curbuf to be our buf, temporarily
3485+ curbuf = buf ;
3486+
34873487 if (varname [1 ] == NUL )
34883488 {
34893489 // get all buffer-local options in a dict
@@ -3498,22 +3498,21 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
34983498 else if (get_option_tv (& varname , rettv , TRUE) == OK )
34993499 // buffer-local-option
35003500 done = TRUE;
3501+
3502+ // restore previous notion of curbuf
3503+ curbuf = save_curbuf ;
35013504 }
35023505 else
35033506 {
35043507 // Look up the variable.
35053508 // Let getbufvar({nr}, "") return the "b:" dictionary.
3506- v = find_var_in_ht (& curbuf -> b_vars -> dv_hashtab ,
3507- 'b' , varname , FALSE);
3509+ v = find_var_in_ht (& buf -> b_vars -> dv_hashtab , 'b' , varname , FALSE);
35083510 if (v != NULL )
35093511 {
35103512 copy_tv (& v -> di_tv , rettv );
35113513 done = TRUE;
35123514 }
35133515 }
3514-
3515- // restore previous notion of curbuf
3516- curbuf = save_curbuf ;
35173516 }
35183517
35193518 if (!done && argvars [2 ].v_type != VAR_UNKNOWN )
@@ -3620,11 +3619,11 @@ f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED)
36203619 }
36213620 else
36223621 {
3623- buf_T * save_curbuf = curbuf ;
3624-
36253622 bufvarname = alloc (STRLEN (varname ) + 3 );
36263623 if (bufvarname != NULL )
36273624 {
3625+ buf_T * save_curbuf = curbuf ;
3626+
36283627 curbuf = buf ;
36293628 STRCPY (bufvarname , "b:" );
36303629 STRCPY (bufvarname + 2 , varname );
0 commit comments