This change implicitly adds IPv6 support.
If the address contains ":", we try to use a TCP socket instead of a Unix domain
socket. Everything in front of the last occurrence of ":" is the hostname and
everything after it the port.
If the hostname lookup fails, we fall back to using a Unix domain socket.
If the port is empty ("localhost:"), a random port will be assigned.
Examples:
NVIM_LISTEN_ADDRESS=localhost:12345 -> TCP (IPv4 or IPv6), port: 12345
NVIM_LISTEN_ADDRESS=localhost: -> TCP (IPv4 or IPv6), port: random (> 1024)
NVIM_LISTEN_ADDRESS=localhost:0 -> TCP (IPv4 or IPv6), port: random (> 1024)
NVIM_LISTEN_ADDRESS=localhost -> Unix domain socket "localhost" in current dir
`blocksize` was checked against UINT_MAX after it was checked against
MAX_SWAP_PAGE_SIZE which makes it always pass the check. Better use
STATIC_ASSERT instead.
AFAIK there is no way NULL can be there, including from the line it points to.
Dunno what analyser was thinking, but dereferencing of `argv[0]` happened just
before `get_number_arg()` call: in `ascii_isdigit()` two lines above. And `idx`
cannot possibly be NULL ever, it comes from `&varname`, this could not ever give
anything, but a valid pointer.
Could not be uninitialized because `func_or_func_caller_profiling` is true only
if `do_profiling` is `YES`, and if `do_profiling` is `YES` then
`script_prof_save()` was called to initialize the variable.
Based on comments it appears that some non-printable characters intended to be
shown as `|x` (0xA0..0xFE) and some as `~x` (0x80..0x9F, 0xFF, excluding
previous). But this never happens because this is being catched by condition `c
>= 0x80` above which makes them be represented as `<A0>`. Since I find this
variant more useful and it additionally is backwards compatible (Vim does the
same thing) I just dropped dead branches.
This should better allow distributing the load among PRs, while getting
critical feedback to the submitter sooner.
First stage runs the ASAN/UBSAN/TSAN since any failures in those are
gating issues.
Second stage runs the rest of the normal builds in parallel.
Remaining stages provide lower priority feedback. The lint build runs
fast locally, so it's better to run that locally than wait on CI. The
coverage build is pretty fickle, so it is only run once all other jobs
are green.