neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit d79a9dcd422133bc1e4b4ef94444962560d7a6d7
parent cb8c9186e6ff563e23ca8faac5e3148fbdf68d10
Author: Sathya Pramodh <94102031+sathya-pramodh@users.noreply.github.com>
Date:   Sat, 21 Feb 2026 05:11:55 +0530

refactor(net): socket_address_is_tcp #37947


Diffstat:
Msrc/nvim/event/socket.c | 22+++++++++++++++++++++-
Msrc/nvim/main.c | 3++-
Msrc/nvim/ui_client.c | 3++-
3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/src/nvim/event/socket.c b/src/nvim/event/socket.c @@ -23,6 +23,26 @@ #include "event/socket.c.generated.h" +/// Checks if an address string looks like a TCP endpoint. +/// +/// @param address Address string +/// @return true if address looks like a TCP endpoint, false otherwise +bool socket_address_is_tcp(const char *address) +{ + if (address == NULL) { + return false; + } + + // Windows drive letter path: "X:\..." or "X:/..." is a local path, not TCP. + if (ASCII_ISALPHA((uint8_t)address[0]) && address[1] == ':' + && (address[2] == '\\' || address[2] == '/')) { + return false; + } + + const char *colon = strrchr(address, ':'); + return colon != NULL && colon != address; +} + int socket_watcher_init(Loop *loop, SocketWatcher *watcher, const char *endpoint) FUNC_ATTR_NONNULL_ALL { @@ -30,7 +50,7 @@ int socket_watcher_init(Loop *loop, SocketWatcher *watcher, const char *endpoint char *addr = watcher->addr; char *host_end = strrchr(addr, ':'); - if (host_end && addr != host_end) { + if (socket_address_is_tcp(addr)) { // Split user specified address into two strings, addr (hostname) and port. // The port part in watcher->addr will be updated later. *host_end = NUL; diff --git a/src/nvim/main.c b/src/nvim/main.c @@ -47,6 +47,7 @@ #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/proc.h" +#include "nvim/event/socket.h" #include "nvim/event/stream.h" #include "nvim/ex_cmds.h" #include "nvim/ex_docmd.h" @@ -927,7 +928,7 @@ static uint64_t server_connect(char *server_addr, const char **errmsg) } CallbackReader on_data = CALLBACK_READER_INIT; const char *error = NULL; - bool is_tcp = strrchr(server_addr, ':') ? true : false; + bool is_tcp = socket_address_is_tcp(server_addr); // connected to channel uint64_t chan = channel_connect(is_tcp, server_addr, true, on_data, 500, &error); if (error) { diff --git a/src/nvim/ui_client.c b/src/nvim/ui_client.c @@ -12,6 +12,7 @@ #include "nvim/channel_defs.h" #include "nvim/eval/typval_defs.h" #include "nvim/event/multiqueue.h" +#include "nvim/event/socket.h" #include "nvim/globals.h" #include "nvim/highlight.h" #include "nvim/highlight_defs.h" @@ -297,7 +298,7 @@ static void channel_connect_event(void **argv) char *server_addr = argv[0]; const char *err = ""; - bool is_tcp = !!strrchr(server_addr, ':'); + bool is_tcp = socket_address_is_tcp(server_addr); CallbackReader on_data = CALLBACK_READER_INIT; uint64_t chan = channel_connect(is_tcp, server_addr, true, on_data, 50, &err);