Commit Graph

2595 Commits

Author SHA1 Message Date
oni-link
5f98c32725 event.c: Simplify timer use in event_poll()
event_poll() always leaves the libuv I/O loop after one iteration. The
duration for how long the loop polls for I/O is given by the shortest
timeout of all active timers. Is no timer active, I/O is/could be polled
indefinitely.

To make sure our timer is still active when I/O polling begins,
a prepare handle is used to start the timer right before the polling.

But by only using a timer that restarts after its timeout was reached,
we also can assure that polling is done with (nearly) the same finite
timeout.

For a short explanation how the I/O loop is working, see
http://docs.libuv.org/en/latest/design.html#the-i-o-loop.
2015-04-08 09:46:14 -03:00
Eliseo Martínez
3c57f5a0e1 Fix warnings: window.c: close_last_window_tabpage(): Np deref: RI.
Problem    : Dereference of null pointer @ 1769.
Diagnostic : Real issue.
Rationale  : It seems buffer could be null. Not sure, though.
Resolution : Check for buffer null.
             This resolution was chosen as it will always work.
             But it could be that buffer can't really be null at that
             point. autocmd_win is ruled out by close_window, so that
             can't be the case. I'm not sure if other windows without
             buffers are possible, so leaving it this way.
             If it's confirmed buffer can't be null, resolution through
             an assert would be possible and this would be FP, not RI.
2015-04-07 20:04:34 -04:00
Eliseo Martínez
af8adc2d8c Fix warnings: terminal.c: get_config_int(): Dead init: RI.
Problem    : Dead initialization @ 1119.
Diagnostic : Real issue.
Rationale  : `obj` is immediately assigned another value through
             GET_CONFIG_VALUE macro.
Resolution : Don't initialize.

Helped-by: oni-link <knil.ino@gmail.com>
2015-04-07 20:04:34 -04:00
Eliseo Martínez
1b4dbdf45b Fix warnings: terminal.c: get_config_string(): Dead init: RI.
Problem    : Dead initialization @ 1109.
Diagnostic : Real issue.
Rationale  : `obj` is immediately assigned another value through
             GET_CONFIG_VALUE macro.
Resolution : Don't initialize.

Helped-by: oni-link <knil.ino@gmail.com>
2015-04-07 20:04:33 -04:00
Eliseo Martínez
3465a945e1 Fix warnings: terminal.c: redraw(): Np dereference: RI.
Problem    : Dereference of null pointer @ 1053.
Diagnostic : Real issue.
Rationale  : Branch "Exiting focused terminal" can actually be executed
             when term is NULL.
Resolution : Guard branch with term check.
2015-04-07 20:04:33 -04:00
Eliseo Martínez
bddba93949 Fix warnings: eval.c: f_termopen(): Use-after-free: MI.
Problem    : Use-after-free @ 15081.
Diagnostic : Multithreading issue.
Rationale  : `get_dict_callback` can return NULL on two different
             cases: 1) when the dict doesn't contain the given key;
             this case is not considered an error. 2) when the key
             exists but there's some problem with its value; this is
             considered an error.
             Then, code calling `get_dict_callback` in
             `common_job_callbacks`, as well as code calling
             `common_job_callbacks`, uses `did_emsg` to distinguish
             between error/non-error cases.
             Suggested error path presumes an error condition within
             `common_job_callbacks`, with `did_emsg` being true, but
             then being false just after returning to calling code in
             `f_termopen`.
             That, clearly, could only happen if another thread run in
             between those points.
Resolution : Refactor `get_dict_callback` and `common_job_callbacks`, so
             that they clearly distinguish between error/non-error
             situations, without recurring to globals.
2015-04-07 20:04:33 -04:00
Eliseo Martínez
31581bd750 Fix warnings: eval.c: f_jobstart(): Np dereference: FP.
Problem    : Dereference of null pointer @ 10812.
Diagnostic : False positive.
Rationale  : `args->lv_first` can't be NULL, as we have just stated
             above that that there's at least one item.
Resolution : Assert.
2015-04-07 20:04:33 -04:00
Murali Suresh
ee3af18640 legacy tests: migrate test38 #2367 2015-04-07 19:21:55 -04:00
David Bürgin
9a6a311f35 tests: Migrate legacy tests 44 and 99 #2366
Consolidates the old test44 and test99 tests into one busted spec.
2015-04-07 18:54:27 -04:00
Scott Prager
8cac2eea75 term: ensure term->buf is valid
The fallowing test (reduced), submitted by @mhinz may free term->buf,
leaving the pointer dangling.

```vim
let s:buf  = -1

function! s:exit_handler()
  execute 'bdelete!' s:buf
endfunction

vnew
let s:buf = bufnr('%')
let id = termopen('sleep 1', { 'on_exit': function('s:exit_handler') })

call s:test()
```

When the buffer is known to be closing, set term->buf to NULL, and check
buf_valid() in on_refresh().

Helped-by: Marco Hinz (@mhinz)
2015-04-07 16:05:00 -04:00
Eliseo Martínez
402c6fd939 Enable -Wconversion: move.c. 2015-04-07 12:56:28 +02:00
Eliseo Martínez
fa2fcf13aa Enable -Wconversion: fold.c.
Refactor summary:
- foldinfo_T.fi_lnum: int --> linenr_T
                      Reorder field for optimal packing.
- foldAddMarker(..., markerlen): int --> size_t
    * foldstartmarkerlen: int --> size_t
        - foldDelMarker(..., markerlen): int --> size_t
            * foldendmarkerlen: int --> size_t

Helped-by: oni-link <knil.ino@gmail.com>
2015-04-07 12:56:28 +02:00
Eliseo Martínez
c5d7fa615d Enable -Wconversion: popupmnu.c.
Helped-by: oni-link <knil.ino@gmail.com>
2015-04-07 12:56:27 +02:00
Eliseo Martínez
2cd78638d4 Enable -Wconversion: farsi.c: Cleanup.
No semantic changes. Just some reformatting to save lines.
2015-04-07 12:56:27 +02:00
Eliseo Martínez
0601da3ef1 Enable -Wconversion: farsi.c: Solve issues.
Refactor summary:
- toF_TyB: int fn(int) --> char_u fn(int)
- put_and_redo: void fn(int) --> void fn(char_u)
    * put_curr_and_l_to_X: void fn(int) --> void fn(char_u)
        - toF_TyA: int fn(int) --> char_u fn(char_u)
    * toF_Xor_X_: int fn(int) --> char_u fn(int)
- toF_leading: int fn(int) --> char_u fn(char_u)
- toF_Rjoin: int fn(int) --> char_u fn(char_u)
- toF_ending: int fn(int) --> char_u fn(char_u)
- canF_Ljoin: bool fn(int) --> bool fn(char_u)
- canF_Rjoin: bool fn(int) --> bool fn(char_u)
- F_isterm: bool fn(int) --> bool fn(char_u)

Helped-by: oni-link <knil.ino@gmail.com>
2015-04-07 12:56:27 +02:00
Scott Prager
5f3eeadd03 Merge pull request #2348 from mhinz/job-control-mouse
[RFC] Job control: enable mouse after foregrounding
2015-04-06 22:37:52 -04:00
Marco Hinz
9a7b071e64 Job control: reset mouse support after foregrounding
Reset mouse support to whatever was used before the process was suspended.

References #2335.
2015-04-06 20:26:21 +02:00
Anton Ovchinnikov
98908853b9 Remove redundant NULL checks
menu_text() never returns NULL, because vim_strsave() and vim_strnsave()
never return NULL.
2015-04-06 13:05:40 +02:00
David Bürgin
0af7c8f624 legacy tests: Remove legacy tests for Lua (test85) #2357 2015-04-06 01:49:36 -04:00
David Bürgin
4657cd53d3 legacy tests: Remove legacy tests for MzScheme (test70) 2015-04-06 01:48:31 -04:00
David Bürgin
d41322fafb tests: Migrate legacy tests 92 and 93 #2261 2015-04-05 22:14:10 -04:00
David Bürgin
7a5a85d2c4 vim-patch:7.4.636 #2267
Problem:    A search with end offset gets stuck at end of file. (Gary Johnson)
Solution:   When a search doesn't move the cursor repeat it with a higher
            count. (Christian Brabandt)

https://github.com/vim/vim/releases/tag/v7-4-636
2015-04-05 21:35:17 -04:00
oni-link
8ee6f90bf8 Fix problem with coverity/105568 fix.
The original fix 3db0a40d69
does not work for more than one loop iteration, because memory allocated
in the previous iteration could be reused in the current iteration.

Because expand_wildcards() never reads the variables *num_file
and *file before the first assignment to them, the initial
values for these variables can be anything. So instead of
calling expand_shellcmd() with *file = "" we set *file = NULL.
That should help coverity see, that not a array-typed value
is freed.

Helped-by: Eliseo Martínez <eliseomarmol@gmail.com>
2015-04-05 20:27:46 -04:00
oni-link
adb3ec2026 Update comments for expand_wildcards functions.
Be more specific in the description of mch_expand_wildcards():
This function will never free memory pointed to by its arguments.
If OK is returned, *file will always point to allocated memory.
*num_file is set to the number of pointers in *file.
If FAIL is returned *file is set to NULL and *num_file to 0.

If gen_expand_wildcards() returns FAIL, no memory allocation in this
function needs to be undone.

If expand_wildcards() returns FAIL, no memory allocation in this
function needs to be undone.

Helped-by: Eliseo Martínez <eliseomarmol@gmail.com>
Helped-by: Michael Reed <m.reed@mykolab.com>
2015-04-05 20:27:46 -04:00
David Bürgin
d3bb177f1e vim-patch:7.4.497 #2295
Problem:    With some regexp patterns the NFA engine uses many states and
            becomes very slow.  To the user it looks like Vim freezes.
Solution:   When the number of states reaches a limit fall back to the old
            engine. (Christian Brabandt)

https://github.com/vim/vim/releases/tag/v7-4-497

Helped-by: David Bürgin <676c7473@gmail.com>
Helped-by: Justin M. Keyes <justinkz@gmail.com>
Helped-by: Scott Prager <splinterofchaos@gmail.com>
2015-04-05 19:24:58 -04:00
Scott Prager
013bd4461d term: use window col offset to calculate width
fixes #2317
2015-04-05 16:07:54 -04:00
Scott Prager
b8ae09b3cf term: after <C-\>, resume normal input loop
Pressing <C-\> and then a mouse click will insert the click into the
terminal as if a keyboard button had been pressed.

Keep track of whether the last input was <C-\> and only call
terminal_send_key() if the next input is a key press.
2015-04-05 13:40:21 -04:00
Scott Prager
b6296f4e84 terminal: Handle loss of focus in event loop.
While in a terminal and insert mode, if an event caused loss of focus,
nvim would stay in the terminal event loop causing an inconsistent view
of internal state and/or segfault.

Remove the "term" argument from terminal_enter() as it only makes sense
to call it with curbuf->terminal. Terminate the loop when switched to a
different buffer.

fixes #2301
2015-04-05 13:39:55 -04:00
John Szakmeister
a69e464f70 Remove swap file accidentally committed in 34dba3d7.
Also expand the rule in .gitignore to block other forms of swap files.
2015-04-05 09:41:50 -04:00
Björn Linse
8c25ad6cf5 clipboard: missing return NULL when provider not available 2015-04-05 14:31:59 +02:00
Björn Linse
adcf268a72 clipboard: handle clipboard reading directly in get_yank_register
This makes :<c-r>* work as expected and
avoids clobbering zero register ("0) when pasting unnamed clipboard

Helped-By: Scott Prager <splinterofchaos@gmail.com>
Helped-By: Michael Reed <m.reed@mykolab.com>
2015-04-05 11:34:14 +02:00
Björn Linse
7422843f5c clipboard: improve the handling of newlines in get_clipboard
This makes the interpretion consistent with the way newlines are used in
the VIMENC format, while keeping the same fallback behaviour when
regtype is unspecified. Also check both cases explicitly in the tests.
2015-04-05 11:34:13 +02:00
Björn Linse
34dba3d7cd clipboard: reallow :put 2015-04-05 11:34:13 +02:00
Björn Linse
5600b80c1f clipboard: show "* and "+ in :registers
Helped-by: Robin Allen <r@foon.uk>
Helped-by: Scott Prager <splinterofchaos@gmail.com>
2015-04-05 11:34:13 +02:00
oni-link
12b084b621 Fix a memory leak for WBuffers used in channel_write().
channel_write() uses a ref-counted buffer for writing. This buffer
should be released if it was used in "refcount" channel_write() calls.
But calling channel_write() on a closed channel would return early and
not decrease the refcount of the used buffer.
2015-04-03 08:03:25 -03:00
oni-link
db3ae72d19 Prevent too early sending of delayed notifications.
Notifications for a channel will be sent directly if there are no
pending requests (for this channel). Otherwise notifications are queued
for later sending.

But in two cases a notification could be sent with pending requests:
* Broadcasting a notification
* A channel that has just finished its last pending request
  would call send_delayed_notifications() for all channels.

To prevent this, every channel can now only send its own delayed
notifications and broadcasting checks for pending requests.
2015-04-03 08:03:25 -03:00
John Szakmeister
ab02637592 Merge pull request #2318 from yshui/master
CMakeLists: fix build when there're multiple arguments in C_FLAGS
2015-04-03 04:57:44 -04:00
Thiago de Arruda
d487dc1a9a eval: Ensure all job callbacks are invoked by jobwait()
A call to `event_poll` is required to ensure the exit callback from the last job
is invoked.
2015-04-02 11:33:48 -03:00
Thiago de Arruda
2b7f460716 eval: Add internal_refcount field to dict_T
Due to the way vimscript garbage collection handles cyclic references, its not
possible to rely on incrementing `dv_refcount` to prevent dicts still used
internally from being collected: If a object with dv_refcount > 0 isn't
reachable by vimscript code, it will be freed when `garbage_collect()` is
called. Add the `internal_refcount` field to prevent this.
2015-04-02 11:33:48 -03:00
David Bürgin
b3f07b2468 vim-patch:7.4.336 #2299
Problem:    Setting 'history' to a big value causes out-of-memory errors.
Solution:   Limit the value to 10000. (Hirohito Higashi)

https://github.com/vim/vim/tree/v7-4-336
2015-04-02 01:22:02 -04:00
David Bürgin
db90dcb6fd vim-patch:7.4.515
Problem:    In a help buffer the global 'foldmethod' is used.  (Paul Marshall)
Solution:   Reset 'foldmethod' when starting to edit a help file.  Move the
            code to a separate function.

https://github.com/vim/vim/releases/tag/v7-4-515
2015-04-01 14:41:53 +02:00
Michael Reed
00e1b62ca8 Modeline cleanup
If users want folds to be automatically collapsed, then they should just
set foldmethod=marker in their vimrc.
2015-03-31 16:56:41 -04:00
Prajjwal Bhandari
d2c3592da1 Remove potential NULL dereference. #2316
This also removes the `#elseif defined(MSWIN)` clause. Due to the
enclosing `if` block, we will never get to this point when src starts with
a '%', making the whole #elseif block dead code.
2015-03-31 22:36:38 +02:00
Florian Walch
7080041465 Merge pull request #2296 from glts/vim-7.4.324
[RDY] vim-patch:7.4.324
2015-03-31 23:07:13 +03:00
Yuxuan Shui
80e80e467f CMakeLists: fix build when there're multiple arguments in C_FLAGS
Because the COMMAND arguments of custom_command takes a list, and
CMAKE_C_FLAGS is a string, it will be treated as a single long
argument, which will cause the build to fail.
2015-03-31 14:46:17 -04:00
Scott Prager
feca9624b8 CMakeLists: enable USE_FNAME_CASE on Mac 2015-03-31 11:20:24 -03:00
Scott Prager
0f4976687d os_scandir: fname_case -> path_fix_case
Use os_scandir().

fname_case() only gets used when `defined(USE_FNAME_CASE)` (on operating
systems with case-insensitive file systems), but may be useful in other
contexts, so move it to path.c. (See the TODO.)

Remove the unused parameter, len.
2015-03-31 11:20:23 -03:00
Scott Prager
24da0d49d0 os_scandir: mch/unix_expandpath() -> path_expand()
Merge unix_expandpath with dos_expandpath from upstream vim and use
os_scandir() over POSIX readdir().
2015-03-31 11:20:23 -03:00
Scott Prager
3f74067565 Un-mch mch_has_(exp_)wildcard().
Merge mch_has_wildcard() and mch_has_exp_wildcar() with their upstream
equivalents for Windows and replace the "mch_" suffix with "path_".
2015-03-31 11:20:23 -03:00
Scott Prager
99869989c8 os_scandir(), scandir_next(), and os_closedir() 2015-03-31 11:20:23 -03:00