diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-07-08 08:27:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-08 08:27:39 +0800 |
commit | 559c4cfd52e385c1b9bd5fa66a0eeb7e8d9e018a (patch) | |
tree | a03244eafab3110b07c1895fc8059bf7c85513eb /src/nvim/event | |
parent | c379d72c490544b3a56eb0e52ce3c8ef740051d8 (diff) | |
download | rneovim-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.c | 2 | ||||
-rw-r--r-- | src/nvim/event/process.c | 2 | ||||
-rw-r--r-- | src/nvim/event/process.h | 8 |
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); |