0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.1.1766: code for writing session file is spread out

Problem:    Code for writing session file is spread out.
Solution:   Put it in one file. (Yegappan Lakshmanan, closes #4728)
This commit is contained in:
Bram Moolenaar
2019-07-28 14:15:42 +02:00
parent f91aac5e3e
commit 8453807911
16 changed files with 1401 additions and 1422 deletions

View File

@@ -9319,93 +9319,6 @@ script_autoload(
return ret;
}
#if defined(FEAT_VIMINFO) || defined(FEAT_SESSION)
var_flavour_T
var_flavour(char_u *varname)
{
char_u *p = varname;
if (ASCII_ISUPPER(*p))
{
while (*(++p))
if (ASCII_ISLOWER(*p))
return VAR_FLAVOUR_SESSION;
return VAR_FLAVOUR_VIMINFO;
}
else
return VAR_FLAVOUR_DEFAULT;
}
#endif
#if defined(FEAT_SESSION) || defined(PROTO)
int
store_session_globals(FILE *fd)
{
hashitem_T *hi;
dictitem_T *this_var;
int todo;
char_u *p, *t;
todo = (int)globvarht.ht_used;
for (hi = globvarht.ht_array; todo > 0; ++hi)
{
if (!HASHITEM_EMPTY(hi))
{
--todo;
this_var = HI2DI(hi);
if ((this_var->di_tv.v_type == VAR_NUMBER
|| this_var->di_tv.v_type == VAR_STRING)
&& var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION)
{
/* Escape special characters with a backslash. Turn a LF and
* CR into \n and \r. */
p = vim_strsave_escaped(tv_get_string(&this_var->di_tv),
(char_u *)"\\\"\n\r");
if (p == NULL) /* out of memory */
break;
for (t = p; *t != NUL; ++t)
if (*t == '\n')
*t = 'n';
else if (*t == '\r')
*t = 'r';
if ((fprintf(fd, "let %s = %c%s%c",
this_var->di_key,
(this_var->di_tv.v_type == VAR_STRING) ? '"'
: ' ',
p,
(this_var->di_tv.v_type == VAR_STRING) ? '"'
: ' ') < 0)
|| put_eol(fd) == FAIL)
{
vim_free(p);
return FAIL;
}
vim_free(p);
}
#ifdef FEAT_FLOAT
else if (this_var->di_tv.v_type == VAR_FLOAT
&& var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION)
{
float_T f = this_var->di_tv.vval.v_float;
int sign = ' ';
if (f < 0)
{
f = -f;
sign = '-';
}
if ((fprintf(fd, "let %s = %c%f",
this_var->di_key, sign, f) < 0)
|| put_eol(fd) == FAIL)
return FAIL;
}
#endif
}
}
return OK;
}
#endif
/*
* Display script name where an item was last set.
* Should only be invoked when 'verbose' is non-zero.