aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/event
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-07-08 08:27:39 +0800
committerGitHub <noreply@github.com>2023-07-08 08:27:39 +0800
commit559c4cfd52e385c1b9bd5fa66a0eeb7e8d9e018a (patch)
treea03244eafab3110b07c1895fc8059bf7c85513eb /src/nvim/event
parentc379d72c490544b3a56eb0e52ce3c8ef740051d8 (diff)
downloadrneovim-559c4cfd52e385c1b9bd5fa66a0eeb7e8d9e018a.tar.gz
rneovim-559c4cfd52e385c1b9bd5fa66a0eeb7e8d9e018a.tar.bz2
rneovim-559c4cfd52e385c1b9bd5fa66a0eeb7e8d9e018a.zip
fix(startup): run embedded Nvim with real path (#24282)
fix(startup): run embedded process with real path
Diffstat (limited to 'src/nvim/event')
-rw-r--r--src/nvim/event/libuv_process.c2
-rw-r--r--src/nvim/event/process.c2
-rw-r--r--src/nvim/event/process.h8
3 files changed, 10 insertions, 2 deletions
diff --git a/src/nvim/event/libuv_process.c b/src/nvim/event/libuv_process.c
index e528d21a71..1bb0511f12 100644
--- a/src/nvim/event/libuv_process.c
+++ b/src/nvim/event/libuv_process.c
@@ -24,7 +24,7 @@ int libuv_process_spawn(LibuvProcess *uvproc)
FUNC_ATTR_NONNULL_ALL
{
Process *proc = (Process *)uvproc;
- uvproc->uvopts.file = proc->argv[0];
+ uvproc->uvopts.file = process_get_exepath(proc);
uvproc->uvopts.args = proc->argv;
uvproc->uvopts.flags = UV_PROCESS_WINDOWS_HIDE;
#ifdef MSWIN
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 1219566e9b..95bf4d1c3b 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -131,7 +131,7 @@ int process_spawn(Process *proc, bool in, bool out, bool err)
proc->internal_close_cb = decref;
proc->refcount++;
kl_push(WatcherPtr, proc->loop->children, proc);
- DLOG("new: pid=%d argv=[%s]", proc->pid, proc->argv[0]);
+ DLOG("new: pid=%d exepath=[%s]", proc->pid, process_get_exepath(proc));
return 0;
}
diff --git a/src/nvim/event/process.h b/src/nvim/event/process.h
index 39fed08c77..69fe229b0e 100644
--- a/src/nvim/event/process.h
+++ b/src/nvim/event/process.h
@@ -32,6 +32,7 @@ struct process {
uint64_t stopped_time; // process_stop() timestamp
const char *cwd;
char **argv;
+ const char *exepath;
dict_T *env;
Stream in, out, err;
/// Exit handler. If set, user must call process_free().
@@ -54,6 +55,7 @@ static inline Process process_init(Loop *loop, ProcessType type, void *data)
.stopped_time = 0,
.cwd = NULL,
.argv = NULL,
+ .exepath = NULL,
.in = { .closed = false },
.out = { .closed = false },
.err = { .closed = false },
@@ -66,6 +68,12 @@ static inline Process process_init(Loop *loop, ProcessType type, void *data)
};
}
+/// Get the path to the executable of the process.
+static inline const char *process_get_exepath(Process *proc)
+{
+ return proc->exepath != NULL ? proc->exepath : proc->argv[0];
+}
+
static inline bool process_is_stopped(Process *proc)
{
bool exited = (proc->status >= 0);