mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:partial:9.1.1050: too many strlen() calls in os_unix.c (#32188)
Problem: too many strlen() calls in os_unix.c
Solution: refactor os_unix.c and remove calls to strlen()
(John Marriott)
closes: vim/vim#16496
efc41a5958
Omit os_expand_wildcards() change: Nvim's code is more complicated and
harder to refactor.
Co-authored-by: John Marriott <basilisk@internode.on.net>
This commit is contained in:
parent
8bc28978b6
commit
2470db02c5
@ -370,8 +370,8 @@ static bool is_executable_in_path(const char *name, char **abspath)
|
||||
char *path = xstrdup(path_env);
|
||||
#endif
|
||||
|
||||
size_t buf_len = strlen(name) + strlen(path) + 2;
|
||||
char *buf = xmalloc(buf_len);
|
||||
const size_t bufsize = strlen(name) + strlen(path) + 2;
|
||||
char *buf = xmalloc(bufsize);
|
||||
|
||||
// Walk through all entries in $PATH to check if "name" exists there and
|
||||
// is an executable file.
|
||||
@ -382,7 +382,7 @@ static bool is_executable_in_path(const char *name, char **abspath)
|
||||
|
||||
// Combine the $PATH segment with `name`.
|
||||
xmemcpyz(buf, p, (size_t)(e - p));
|
||||
(void)append_path(buf, name, buf_len);
|
||||
(void)append_path(buf, name, bufsize);
|
||||
|
||||
#ifdef MSWIN
|
||||
if (is_executable_ext(buf, abspath)) {
|
||||
|
@ -1208,10 +1208,11 @@ static void read_input(StringBuilder *buf)
|
||||
size_t len = 0;
|
||||
linenr_T lnum = curbuf->b_op_start.lnum;
|
||||
char *lp = ml_get(lnum);
|
||||
size_t lplen = (size_t)ml_get_len(lnum);
|
||||
|
||||
while (true) {
|
||||
size_t l = strlen(lp + written);
|
||||
if (l == 0) {
|
||||
lplen -= written;
|
||||
if (lplen == 0) {
|
||||
len = 0;
|
||||
} else if (lp[written] == NL) {
|
||||
// NL -> NUL translation
|
||||
@ -1219,11 +1220,11 @@ static void read_input(StringBuilder *buf)
|
||||
kv_push(*buf, NUL);
|
||||
} else {
|
||||
char *s = vim_strchr(lp + written, NL);
|
||||
len = s == NULL ? l : (size_t)(s - (lp + written));
|
||||
len = s == NULL ? lplen : (size_t)(s - (lp + written));
|
||||
kv_concat_len(*buf, lp + written, len);
|
||||
}
|
||||
|
||||
if (len == l) {
|
||||
if (len == lplen) {
|
||||
// Finished a line, add a NL, unless this line should not have one.
|
||||
if (lnum != curbuf->b_op_end.lnum
|
||||
|| (!curbuf->b_p_bin && curbuf->b_p_fixeol)
|
||||
@ -1236,6 +1237,7 @@ static void read_input(StringBuilder *buf)
|
||||
break;
|
||||
}
|
||||
lp = ml_get(lnum);
|
||||
lplen = (size_t)ml_get_len(lnum);
|
||||
written = 0;
|
||||
} else if (len > 0) {
|
||||
written += len;
|
||||
|
@ -1875,11 +1875,12 @@ void path_fix_case(char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
size_t taillen = strlen(tail);
|
||||
const char *entry;
|
||||
while ((entry = os_scandir_next(&dir))) {
|
||||
// Only accept names that differ in case and are the same byte
|
||||
// length. TODO: accept different length name.
|
||||
if (STRICMP(tail, entry) == 0 && strlen(tail) == strlen(entry)) {
|
||||
if (STRICMP(tail, entry) == 0 && taillen == strlen(entry)) {
|
||||
char newname[MAXPATHL + 1];
|
||||
|
||||
// Verify the inode is equal.
|
||||
@ -2270,14 +2271,12 @@ int append_path(char *path, const char *to_append, size_t max_len)
|
||||
|
||||
// Combine the path segments, separated by a slash.
|
||||
if (current_length > 0 && !vim_ispathsep_nocolon(path[current_length - 1])) {
|
||||
current_length += 1; // Count the trailing slash.
|
||||
|
||||
// +1 for the NUL at the end.
|
||||
if (current_length + 1 > max_len) {
|
||||
return FAIL;
|
||||
if (current_length + STRLEN_LITERAL(PATHSEPSTR) + 1 > max_len) {
|
||||
return FAIL; // No space for trailing slash.
|
||||
}
|
||||
|
||||
xstrlcat(path, PATHSEPSTR, max_len);
|
||||
xstrlcpy(path + current_length, PATHSEPSTR, max_len - current_length);
|
||||
current_length += STRLEN_LITERAL(PATHSEPSTR);
|
||||
}
|
||||
|
||||
// +1 for the NUL at the end.
|
||||
@ -2285,7 +2284,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
xstrlcat(path, to_append, max_len);
|
||||
xstrlcpy(path + current_length, to_append, max_len - current_length);
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user