mirror of
https://github.com/neovim/neovim.git
synced 2025-10-12 12:56:04 +00:00
option: Also escape commas in options other then &runtimepath
This commit is contained in:
@@ -100,18 +100,30 @@ char *stdpaths_user_conf_subpath(const char *fname)
|
||||
///
|
||||
/// @param[in] fname New component of the path.
|
||||
/// @param[in] trailing_pathseps Amount of trailing path separators to add.
|
||||
/// @param[in] escape_commas If true, all commas will be escaped.
|
||||
///
|
||||
/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`
|
||||
/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`.
|
||||
char *stdpaths_user_data_subpath(const char *fname,
|
||||
const size_t trailing_pathseps)
|
||||
const size_t trailing_pathseps,
|
||||
const bool escape_commas)
|
||||
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
|
||||
{
|
||||
char *ret = concat_fnames_realloc(get_xdg_home(kXDGDataHome), fname, true);
|
||||
if (trailing_pathseps) {
|
||||
const size_t len = strlen(ret);
|
||||
ret = xrealloc(ret, len + trailing_pathseps + 1);
|
||||
memset(ret + len, PATHSEP, trailing_pathseps);
|
||||
ret[len + trailing_pathseps] = NUL;
|
||||
const size_t len = strlen(ret);
|
||||
const size_t numcommas = (escape_commas ? memcnt(ret, ',', len) : 0);
|
||||
if (numcommas || trailing_pathseps) {
|
||||
ret = xrealloc(ret, len + trailing_pathseps + numcommas + 1);
|
||||
for (size_t i = 0 ; i < len + numcommas ; i++) {
|
||||
if (ret[i] == ',') {
|
||||
memmove(ret + i + 1, ret + i, len - i + numcommas);
|
||||
ret[i] = '\\';
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (trailing_pathseps) {
|
||||
memset(ret + len + numcommas, PATHSEP, trailing_pathseps);
|
||||
}
|
||||
ret[len + trailing_pathseps + numcommas] = NUL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user