diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-04-11 00:01:43 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2018-04-11 02:41:05 +0200 |
commit | 704ba4151e7f67999510ee0ac19fdabb595d530c (patch) | |
tree | 144b393b12da6379fd36e463339c5ba07adcae42 | |
parent | 507bda1c95cdac2886f64e59aa6bbf85c3fac389 (diff) | |
download | rneovim-704ba4151e7f67999510ee0ac19fdabb595d530c.tar.gz rneovim-704ba4151e7f67999510ee0ac19fdabb595d530c.tar.bz2 rneovim-704ba4151e7f67999510ee0ac19fdabb595d530c.zip |
server: init v:servername if $NVIM_LISTEN_ADDRESS is invalid
Before this change, if $NVIM_LISTEN_ADDRESS was invalid, v:servername
was left empty.
-rw-r--r-- | src/nvim/msgpack_rpc/server.c | 33 | ||||
-rw-r--r-- | test/functional/eval/server_spec.lua | 32 |
2 files changed, 36 insertions, 29 deletions
diff --git a/src/nvim/msgpack_rpc/server.c b/src/nvim/msgpack_rpc/server.c index abff5cfe4f..e5d80aea1d 100644 --- a/src/nvim/msgpack_rpc/server.c +++ b/src/nvim/msgpack_rpc/server.c @@ -32,28 +32,27 @@ static garray_T watchers = GA_EMPTY_INIT_VALUE; #endif /// Initializes the module -bool server_init(const char *listen_address) +bool server_init(const char *listen_addr) { ga_init(&watchers, sizeof(SocketWatcher *), 1); - bool must_free = false; - if (listen_address == NULL) { - // Deprecated: $NVIM_LISTEN_ADDRESS - listen_address = os_getenv(LISTEN_ADDRESS_ENV_VAR); - if (listen_address == NULL) { - must_free = true; - listen_address = server_address_new(); - if (listen_address == NULL) { + // $NVIM_LISTEN_ADDRESS + const char *env_addr = os_getenv(LISTEN_ADDRESS_ENV_VAR); + int rv = listen_addr == NULL ? 1 : server_start(listen_addr); + + if (0 != rv) { + rv = env_addr == NULL ? 1 : server_start(env_addr); + if (0 != rv) { + listen_addr = server_address_new(); + if (listen_addr == NULL) { return false; } + rv = server_start(listen_addr); + xfree((char *)listen_addr); } } - bool ok = (server_start(listen_address) == 0); - if (must_free) { - xfree((char *)listen_address); - } - return ok; + return rv == 0; } /// Teardown a single server @@ -122,8 +121,8 @@ bool server_owns_pipe_address(const char *path) /// @param endpoint Address of the server. Either a 'ip:[port]' string or an /// arbitrary identifier (trimmed to 256 bytes) for the Unix /// socket or named pipe. -/// @returns 0 on success, 1 on a regular error, and negative errno -/// on failure to bind or listen. +/// @returns 0: success, 1: validation error, 2: already listening, +/// -errno: failed to bind or listen. int server_start(const char *endpoint) { if (endpoint == NULL || endpoint[0] == '\0') { @@ -147,7 +146,7 @@ int server_start(const char *endpoint) uv_freeaddrinfo(watcher->uv.tcp.addrinfo); } socket_watcher_close(watcher, free_server); - return 1; + return 2; } } diff --git a/test/functional/eval/server_spec.lua b/test/functional/eval/server_spec.lua index a2644498f2..4e4aed864b 100644 --- a/test/functional/eval/server_spec.lua +++ b/test/functional/eval/server_spec.lua @@ -2,8 +2,9 @@ local helpers = require('test.functional.helpers')(after_each) local eq, neq, eval = helpers.eq, helpers.neq, helpers.eval local command = helpers.command local clear, funcs, meths = helpers.clear, helpers.funcs, helpers.meths +local iswin = helpers.iswin local ok = helpers.ok -local os_name = helpers.os_name +local matches = helpers.matches local function clear_serverlist() for _, server in pairs(funcs.serverlist()) do @@ -25,7 +26,15 @@ describe('server', function() eq('', eval('$NVIM_LISTEN_ADDRESS')) end) - it('serverstart() sets v:servername at startup or if all servers were stopped', + it('sets new v:servername if $NVIM_LISTEN_ADDRESS is invalid', function() + clear({env={NVIM_LISTEN_ADDRESS='.'}}) + eq('.', eval('$NVIM_LISTEN_ADDRESS')) + local servers = funcs.serverlist() + eq(1, #servers) + ok(string.len(servers[1]) > 4) -- Like /tmp/nvim…/… or \\.\pipe\… + end) + + it('sets v:servername at startup or if all servers were stopped', function() local initial_server = meths.get_vvar('servername') assert(initial_server ~= nil and initial_server:len() > 0, @@ -46,9 +55,8 @@ describe('server', function() eq('', meths.get_vvar('servername')) -- v:servername will take the next available server. - local servername = (os_name() == 'windows' - and [[\\.\pipe\Xtest-functional-server-pipe]] - or 'Xtest-functional-server-socket') + local servername = (iswin() and [[\\.\pipe\Xtest-functional-server-pipe]] + or 'Xtest-functional-server-socket') funcs.serverstart(servername) eq(servername, meths.get_vvar('servername')) end) @@ -102,7 +110,7 @@ describe('server', function() local n = eval('len(serverlist())') -- Add some servers. - local servs = (os_name() == 'windows' + local servs = (iswin() and { [[\\.\pipe\Xtest-pipe0934]], [[\\.\pipe\Xtest-pipe4324]] } or { [[Xtest-pipe0934]], [[Xtest-pipe4324]] }) for _, s in ipairs(servs) do @@ -129,18 +137,18 @@ describe('startup --listen', function() local cmd = { unpack(helpers.nvim_argv) } table.insert(cmd, '--listen') - eq('nvim: Argument missing after: "--listen"', - string.match(funcs.system(cmd), '.-n"')) + matches('nvim.*: Argument missing after: "%-%-listen"', funcs.system(cmd)) cmd = { unpack(helpers.nvim_argv) } table.insert(cmd, '--listen2') - eq('nvim: Garbage after option argument: "--listen2"', - string.match(funcs.system(cmd), '.-2"')) + matches('nvim.*: Garbage after option argument: "%-%-listen2"', funcs.system(cmd)) end) it('sets v:servername, overrides $NVIM_LISTEN_ADDRESS', function() + local addr = (iswin() and [[\\.\pipe\Xtest-listen-pipe]] + or 'Xtest-listen-pipe') clear({ env={ NVIM_LISTEN_ADDRESS='Xtest-env-pipe' }, - args={ '--listen', 'Xtest-listen-pipe' } }) - eq('Xtest-listen-pipe', meths.get_vvar('servername')) + args={ '--listen', addr } }) + eq(addr, meths.get_vvar('servername')) end) end) |