Problem: Setting the local value of 'backupcopy' empty gives an error.
(Peter Mattern)
Solution: When using an empty value set the flags to zero. (Hirohito
Higashi)
https://code.google.com/p/vim/source/detail?r=v7-4-462
Regarding dict_lookup() in eval.c: both definitions are the same, the
only difference being the spacing between the indirection operator and
the indentation level.
Problem : getdigits() currently returns a long, but at most places,
return value is casted (unsafely) into an int. Making casts
safe would introduce a lot of fuss in the form of assertions
checking for limits.
Note : We cannot just change return type to int, because, at some
places, legitimate long values are used. For example, in
diff.c, for line numbers.
Solution : Introduce new functions:
- get_digits() : Gets an intmax_t from a string.
- get_int_digits() : Wrapper for ints.
- get_long_digits() : Wrapper for longs.
And replace getdigits() invocations by the appropiate
wrapper invocations.
A similar macro is defined in the Linux kernel [1].
To refactor the code I used a slightly modified Coccinelle script I found in
[2].
```diff
// Use the macro ARRAY_SIZE when possible
//
// Confidence: High
// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2.
// URL: http://www.emn.fr/x-info/coccinelle/rules/array.html
// Options: -I ... -all_includes can give more complete results
@@
type T;
T[] E;
@@
- (sizeof(E)/sizeof(*E))
+ ARRAY_SIZE(E)
@@
type T;
T[] E;
@@
- (sizeof(E)/sizeof(E[...]))
+ ARRAY_SIZE(E)
@@
type T;
T[] E;
@@
- (sizeof(E)/sizeof(T))
+ ARRAY_SIZE(E)
@n@
identifier AS,E;
@@
- #define AS(E) ARRAY_SIZE(E)
@@
expression E;
identifier n.AS;
@@
- AS(E)
+ ARRAY_SIZE(E)
```
`spatch --in-place --sp-file array_size.cocci -I src/ -I build/include/ -I build/src/nvim/auto/ src/nvim/*.c`
[1] http://lxr.free-electrons.com/source/include/linux/kernel.h#L54
[2] http://www.emn.fr/z-info/coccinelle/rules/#macros
Problems : Dereference of null pointer @ 6251.
Dereference of null pointer @ 6267.
Dereference of null pointer @ 6351.
Diagnostic : False positive.
Rationale : Problems occur if varp is null after
`varp = get_varp_scope(p, opt_flags);`.
That can only happen if option is hidden. Those are options
that can be set (for backwards compatibility reasons) but
that do nothing (see `:h hidden-options`,
`:h missing-options`). In particular, even if setting them
is allowed, value is not stored, so these options have no
real value.
So, suggested error paths should not occur, as checks
comparing option value and default value should discard
them.
Resolution : We could just `assert(varp)` before line 6235
`varp_local = varp;`. That was tried and worked.
But we prefer modifying the code to explicitly skip hidden
options.
A redundant `!istermoption(p)` is removed too (it's already
checked by for loop condition).
Even when this was finally removed 6 months ago in b2b920f, it had
already been disabled for a while. Due to this, just remove all remnants
of the option as opposed to putting a placeholder like what was done for
'shortname'and 'cryptmethod'.
Problem : Dead assignment @ 2566.
Diagnostic : Harmless issue.
Rationale : `nextchar` is used as a lookahead buffer for the character
next to the currently examined token. Sometimes it also
saves that char while original string is modified (original
position of nextchar is nullified for the string to
terminate there). In summary, it's an auxiliary variable
with no particular complex meaning. Safe to remove if not
used.
Resolution : Remove dead assignment.
Problem: After splitting a window and setting 'breakindent' the default
minimum with is not respected.
Solution: Call briopt_check() when copying options to a new window.
https://code.google.com/p/vim/source/detail?r=v7-4-417
- Providers for features are now registered as a unit. For example, instead of
calling `register_provider("clipboard_get")` and
`register_provider("clipboard_set")`, clients call
`register_provider("clipboard")` and nvim will assume it implements all
methods of the "clipboard" feature
- Bootstrapping code was removed. With the `api_spawn` function exposed to
vimscript, it's no longer necessary and will be handled by plugins
distributed with nvim.
- Now the `has` function will return true if there's a live channel that
has registered as a provider for the feature.
- 'initpython'/'initclipboard' options were removed
- A new API function was exposed: `vim_discover_features` which returns an
object with information about pluggable features such as 'python' or
'clipboard'
libuv provide uv_get_total_mem_kib. So HAVE_TOTAL_MEM should always be
true.
Before that commit in neovim maxmem=5120 and maxmemtot=10240. Now
both equal to half of system memory.