A blocking call job_wait(job, -1) can only return after job is finished
and all handles of job are closed. But hitting CTRL-C makes job_wait()
return early while handles can still be open. This can lead to problems
with the job/handle callbacks if the caller (of job_wait()) already
freed the memory that is used in the job callbacks.
To fix this, only return after all handles of the job are closed.
At 31c8440fee, some variables were changed
from int to long, to avoid -Wconversion errors. Long type was the
appropiate one because getdigits() was returning a long.
Now that we have get_int_digits() and get_long_digits(), we can revert
mentioned variables to int, and use get_int_digits() without having
-Wconversion warnings.
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.
- <color_related_stuff>: long_u --> uint32_t
Everywhere long_u was used to hold a color value.
Color values are supposed to be 32 bits at most.
Supported architectures have 32 bits ints, so we could have used plain
ints. But this wouldn't be future-proof, and would be wasteful if a
future architecture has ints bigger than 32 bits.
So, uint32_t is perfect to achieve optimal packing no matter the
architecture.
- bytes_to_print/bytes_printed: long_u --> size_t
Seems like the correct thing, and gets rid of some casts.
Problem : Out-of-bound read from a buffer.
Diagnostic : False positive.
Rationale : nv_max_linear should always be less than nv_cmd_idx size
(NV_CMDS_SIZE).
Resolution : Assert rationale.
Problem : Out-of-bounds-write to a buffer.
Diagnostic : False positive.
Diagnostic : Suggested error location is under isupper(c) condition,
which makes suggested error impossible. Coverity just fails
to take isupper() postcondition into account.
Resolution : Assert isupper() postcondition.
Problem : Out-of-bounds read from a buffer.
Diagnostic : False positive.
Rationale : Suggested error path implies isupper(*str) being true,
which makes error vanish. Coverity just fails to take into
account isupper() postcondition.
Resolution : Assert isupper() postcondition.
Problem: Appending a block in the middle of a tab does not work correctly
when virtualedit is set.
Solution: Decrement spaces and count, don't reset them. (James McCoy)
https://code.google.com/p/vim/source/detail?r=v7-4-559
* Add sha256.c/h to clint-files.txt.
* Add sha256.c to CONV_SRCS in src/nvim/CMakeLists.txt.
* Use size_t for lengths and const for read-only parameters.
* Use restrict keyword.
* Refine #includes.
For garbage collection all lists are kept in first_list, a list of all
lists.
free_unref_items() searches through first_list and removes unreferenced
lists from it (by calling list_free(..., FALSE)). But after a list was
removed, the search continues from the beginning of first_list (not sure
how many lists were really removed and where to continue in first_list).
This is not necessary anymore since vim-patch 7.0.135, because a call to
list_free(...,FALSE) makes sure, that no other lists (and dictionaries)
are freed. So we always know, that the next list in first_list is
still valid (allocated or NULL) and can be used to continue the search.
Likewise for dictionaries.
Original patch by Ariya Mizutani
https://groups.google.com/forum/#!searchin/vim_dev/GC/vim_dev/DBYOdHQWvqY/1WH04_dwETIJ
Problem: ":sign jump" may use another window even though the file is
already edited in the current window.
Solution: First check if the file is in the current window. (James McCoy)
https://code.google.com/p/vim/source/detail?r=v7-4-487