Commit Graph

1513 Commits

Author SHA1 Message Date
Justin M. Keyes
49b65b0fcd Merge pull request #1516 from fmoralesc/new-patches
vim-patch:7.4.425,435,467,472,473,478
2014-11-27 20:58:39 -05:00
Thiago de Arruda
7b0f7ea87c ui: Move check_col/check_row functions to mbyte.c
These functions were only being used by mbyte.c, so move them and add the
"static" modifier.
2014-11-27 20:33:11 -03:00
Thiago de Arruda
6f7fe5d1b9 Remove code defined under USE_IM_CONTROL #ifdefs
This is not being used and should not be part of the core anyway.
2014-11-27 20:26:10 -03:00
Felipe Morales
9ab44e74ab vim-patch:7.4.478: Use character lenght for 'showbreak'
vim-patch:7.4.478

Problem:    Using byte length instead of character length for
'showbreak'.
Solution:   Compute the character length. (Marco Hinz)

https://code.google.com/p/vim/source/detail?r=v7-4-478
2014-11-27 19:40:51 -03:00
Felipe Morales
c82eb31a5d vim-patch:7.4.473
vim-patch:7.4.473

Problem:    Cursor movement is incorrect when there is a number
            column/sign/fold column and 'sbr' is displayed.
Solution:   Adjust the column for 'sbr'. (Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=v7-4-473
2014-11-27 19:40:51 -03:00
Felipe Morales
42dc00b767 vim-patch:7.4.472: Only draw "precedes" entry in 'listchar' when 'list' is on
vim-patch:7.4.472

Problem:    The "precedes" entry in 'listchar' will be drawn when
'showbreak is set and list is not.
Solution:   Only draw this character when 'list' is on. (Christian
Brabandt)

https://code.google.com/p/vim/source/detail?r=af998690a8841d4df95cea0bed4246f2ba98e247
2014-11-27 19:40:51 -03:00
Felipe Morales
35e2398441 vim-patch:7.4.467: Avoid a problem with unwanted linebreaks in block mode
vim-patch:7.4.467

Avoid a problem with unwanted linebreaks in block mode

https://code.google.com/p/vim/source/detail?r=v7-4-467
2014-11-27 19:40:51 -03:00
Felipe Morales
cfa8b4a186 vim-patch:7.4.435: Disable linebreak temporarily when formatting lines.
vim-patch:7.4.435

Problem:    Line formatting behaves differently when 'linebreak' is set.
            (mvxxc)
Solution:   Disable 'linebreak' temporarily. (Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=v7-4-435
2014-11-27 19:40:51 -03:00
Felipe Morales
ef7eab1ec6 vim-patch:7.4.425: Adjust virtcol when showbreak is set
vim-patch:7.4.425

Problem:    When 'showbreak' is used "gj" may move to the wrong
position. (Nazri Ramliy)
Solution:   Adjust virtcol when 'showbreak' is set. (Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=v7-4-425
2014-11-27 19:40:51 -03:00
Thiago de Arruda
bf6bb27e79 ui: Remove redundant ui.h includes
Also move read_error_exit to os/input.c
2014-11-27 15:00:30 -03:00
Thiago de Arruda
a3534138a8 ui: Extract mouse.c/mouse.h 2014-11-27 14:48:30 -03:00
Thiago de Arruda
1865b8c1c1 ui: Remove ui_delay, ui_breakcheck and ui_set_shellsize
These functions only used to call another os_* function, so remove them and
replace all occurences in the project.
2014-11-27 14:27:18 -03:00
Thiago de Arruda
541eaf598c ui: Remove ui_inchar/ui_char_avail
Also:

- Remove NO_CONSOLE_INPUT/NO_CONSULE preprocessor conditionals
- Remove ctrl_c_interrupts variable, check for mapped_ctrl_c directly in
  process_interrupts()
- Move ui_inchar profiling to input_poll which is where Nvim blocks for input.
2014-11-27 14:12:59 -03:00
Rui Abreu Ferreira
e644369f6e Add Boolean argument escape_csi to vim_feedkeys
- By default vim_feedkeys escaped all input for CSI/K_SPECIAL bytes
  before using it. However since vim_replace_termcodes() also escapes
  the input string chaining these functions together escapes input twice
- vim_feedkeys() now takes a third Boolean argument to enable/disable
  escaping
- Breaks API compatibility
2014-11-27 08:33:53 -03:00
Justin M. Keyes
3bbbeaf2c9 Merge pull request #1552 from equalsraf/tb-fix-1530
add missing refcount increment for systemlist()
2014-11-25 16:16:08 -05:00
Rui Abreu Ferreira
ea8cc88e6a Add missing refcount increment for systemlist()
- get_system_output_as_rettv() was missing a refcount increment when
  returning an empty list, i.e. when there was no output
- we now use rettv_list_aloc() instead of list_alloc()
- issue #1530
2014-11-25 20:00:27 +00:00
Eliseo Martínez
389470bd14 Fix substitute newline: Memory functions: Improve style.
`try_malloc` was changed in 8bb2c2c074 to
avoid a warning when size is 0. Then, this improves some things on that:

- Use local vars instead of changing parameters.
- Homogenize style for other related functions.
2014-11-24 17:20:09 +01:00
Julian Mehne
6b5785b149 Fix Makefile for running valgrind with old tests. 2014-11-22 13:07:04 +01:00
Thiago de Arruda
f09a33bbc1 event: No longer process K_EVENT automatically
Two new functions, `event_enable_deferred()`/`event_disable_deferred()` have to
be called by code that is capable of handling asynchronicity. User-dialog states
like "press ENTER to continue" or the swap file confirmation no longer will
generate K_EVENT.
2014-11-21 15:41:02 -03:00
Thiago de Arruda
e15485c5d6 input: Refactor to ensure user input has higher priority 2014-11-21 15:39:04 -03:00
Rainer Borene
df5a17fb51 legacy tests: migrate test105 2014-11-20 21:06:37 -03:00
Rainer Borene
da3ade6a59 legacy tests: migrate test26 2014-11-20 21:06:37 -03:00
Rainer Borene
021d9bdcc0 legacy tests: migrate test101 2014-11-20 21:06:37 -03:00
Rainer Borene
50876c2f70 legacy tests: migrate test75 2014-11-20 21:06:37 -03:00
Rainer Borene
a93d370c75 legacy tests: migrate test51 2014-11-20 21:06:37 -03:00
Rainer Borene
c9159586b8 legacy tests: migrate test43 2014-11-20 21:06:37 -03:00
Rainer Borene
bbd95c0514 legacy tests: migrate test33 2014-11-20 21:06:37 -03:00
Rainer Borene
8c872a945e legacy tests: migrate test67 2014-11-20 21:06:37 -03:00
Rainer Borene
7fc5d6fc8e legacy tests: migrate test66 2014-11-20 21:06:37 -03:00
Rainer Borene
963a146e8b legacy tests: migrate test25 2014-11-20 21:06:37 -03:00
Rainer Borene
8ca8a0da08 legacy tests: migrate test104 2014-11-20 21:06:37 -03:00
Rainer Borene
1732615290 legacy tests: remove test21 files 2014-11-20 21:06:37 -03:00
Rainer Borene
c152cdd0f3 legacy tests: migrate test5 2014-11-20 21:06:37 -03:00
Florian Walch
2b0d9bdeac Wconversion: Fix warnings in digraph.c. 2014-11-19 17:21:21 +01:00
Florian Walch
d2338ce397 Wconversion: Fix warnings in cursor_shape.c. 2014-11-19 17:21:21 +01:00
Florian Walch
96b31ca048 CMake: Set -Wconversion by default. 2014-11-19 17:21:21 +01:00
Eliseo Martínez
7aa7ce253d Fix warnings: eval.c: f_rpcrequest(): Garbage value: MI.
Problem    : Assigned value is garbage or undefined @ 12578.
Diagnostic : Multithreading issue.
Rationale  : Error can only occur if global `provider_call_nesting` is
             changed while function is executing.
Resolution : Use local copy of global.
2014-11-18 22:20:39 +01:00
Eliseo Martínez
ee134fc698 Fix warnings: screen.c: screenalloc(): Np arg (2): MI.
Problems   : Null pointer argument in call to memory copy function
             @ 6465.
             Null pointer argument in call to memory copy function
             @ 6475.
Diagnostic : Multithreading issues.
Rationale  : Problem occurs if globals `enc_utf8` and `enc_dbcs` are
             modified while function is executing.
Resolution : Use local copy of globals.
2014-11-18 22:00:03 +01:00
Eliseo Martínez
5c00f8c132 Fix warnings: eval.c: do_return(): Np dereference: FP.
Problem    : Dereference of null pointer @ 18841.
Diagnostic : False positive.
Rationale  : Suggested error path takes `reanimate` branch at 18827,
             assigning `rettv = current_funccal->rettv`. Then,
             inmediately after, it supposes rettv is null, which cannot
             happen, since current_funccal->rettv should always be non
             null.
Resolution : Assert current_funccal->rettv non null.
2014-11-18 22:00:03 +01:00
Eliseo Martínez
97be8d45f4 Fix warnings: eval.c: add_nr_var(): Out of bounds: FP.
Problem    : Out-of-bound array access @ 18737.
Diagnostic : False positive.
Rationale  : Situation is intentional. `dictitem_T` is a prefix all dict
             items whill share, but actual size of each item will be
             different depending on its key length. `di_key` array field
             is declared of size 1 just to have a field name, but real
             size will vary for each item.
Resolution : Make analyzer ignore it.
             This could be refactored to use C99-allowed variable length
             arrays, but eval.c is bound to dissappear, so no effort is
             done in that sense.
2014-11-18 22:00:02 +01:00
Eliseo Martínez
3bf32fe43f Fix warnings: eval.c: call_user_func(): Out of bounds: FP.
Problem    : Out-of-bound array access @ 18429.
Diagnostic : False positive.
Rationale  : Situation is intentional. `dictitem_T` is a prefix all dict
             items whill share, but actual size of each item will be
             different depending on its key length. `di_key` array field
             is declared of size 1 just to have a field name, but real
             size will vary for each item.
Resolution : Make analyzer ignore it.
             This could be refactored to use C99-allowed variable length
             arrays, but eval.c is bound to dissappear, so no effort is
             done in that sense.
2014-11-18 22:00:02 +01:00
Eliseo Martínez
34a4a01e4e Fix warnings: eval.c: get_user_func_name(): Np dereference: FP.
Problem    : Dereference of null pointer @ 18216.
Diagnostic : False positive.
Rationale  : `hi` and `done` are static. Intended usage is for the first
             call to have idx == 0, so that they are initialized.
Resolution : Assert hi after (optional) initialization.
2014-11-18 22:00:02 +01:00
Eliseo Martínez
eb15d8777b Fix warnings: eval.c: clear_tv(): Bad free: RI.
Problem    : Bad free @ 16076.
Diagnostic : Real issue.
Rationale  : A non-allocated string is set at 4127, which later on can
             be tried to be freed if aborting.
Resolution : Detect particular case (func with empty name) and don't
             free in that case.
             Another solution (use allocated string) was tried before,
             but it produced a leak difficult to solve.
             Finally applied solution works, but it produces a new false
             positive warning (Np dereference at 13763), deactivated by
             `assert(ptrs[i].item->li_next)`.
2014-11-18 22:00:01 +01:00
Eliseo Martínez
ece19651c6 Fix warnings: eval.c: item_compare(): Garbage value: MI.
Problem    : Result of operation is garbage or undefined @ 13565.
Diagnostic : Multithreading issue.
Rationale  : Problem occurs only if global (static) variable
             `item_compare_keep_zero` changes after being used by
             `do_sort_uniq` but before being used by `item_compare` or
             `item_compare2`.
Resolution : This is not an intra-function problem, as other MI's
             before, but rather an inter-function one. Thus, it can't be
             solved by using local copy of global. Therefore, we are
             forced to do a bit refactoring. We can't simply add a bool
             param to item_compare/item_compare2, as they couldn't be
             passed to qsort() that way. So, item_compare/item_compare2
             are added a bool param and curried versions of them are
             added and used in their place.
2014-11-18 21:57:49 +01:00
Eliseo Martínez
be90cdf4f9 Fix warnings: eval.c: dictitem_alloc(): Out-of-bounds access: FP.
Problem    : Out-of-bound array access @ 5737.
Diagnostic : False positive.
Rationale  : Situation is intentional. `dictitem_T` is a prefix all dict
             items whill share, but actual size of each item will be
             different depending on its key length. `di_key` array field
             is declared of size 1 just to have a field name, but real
             size will vary for each item.
Resolution : Make analyzer ignore it.
             This could be refactored to use C99-allowed variable length
             arrays, but eval.c is bound to dissappear, so no effort is
             done in that sense.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
d3f413ba6a Fix warnings: eval.c: set_var_lval(): Np dereference: FP.
Problem    : Dereference of null pointer @ 2273.
Diagnostic : False positive.
Rationale  : Suggested error would happen when assigning an rvalue with
             more items than the lvalue. Then we would enter conditional
             at:
             ```
             if (lp->ll_li->li_next == NULL) {
               /* Need to add an empty item. */
               list_append_number(lp->ll_list, 0);
             }
             lp->ll_li = lp->ll_li->li_next;
             ```
             Analyzer thinks the value assigned to lp->ll_li is still
             NULL and is hit on the next iteration.
Resolution : Assert lp->ll_li->li_next is not null anymore after
             list_append_number().
2014-11-18 21:57:48 +01:00
Eliseo Martínez
f47d52ea4f Fix warnings: window.c: tabline_height(): Np dereference: FP.
Problem    : Dereference of null pointer @ 4978.
Diagnostic : False positive.
Rationale  : tabline_height() shouldn't be called when a tab doesn't
             exist yet (this is, before initialization).
Resolution : Assert function precondition.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
f544d976fa Fix warnings: window.c: win_drag_vsep_line(): Np dereference: FP.
Problem    : Dereference of null pointer @ 4512.
Diagnostic : False positive.
Rationale  : Suggested error path implies `fr == NULL` after 4504.
             That's not possible, because:
             - curfr and curfr->next must be both nonnull, as we are
               dragging the divider between the two.
             - after conditional, fr is one of those two (the one that
               grows).
Resolution : Assert fr.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
5955f44ade Fix warnings: window.c: winframe_remove(): Np dereference: FP.
Problem    : Dereference of null pointer @ 2196.
Diagnostic : False positive.
Rationale  : Suggested error path implies `frp->child == NULL` while
             being under condition `frp2->fr_layout == frp->fr_layout`,
             which is impossible:
             - If frp2 is frp's parent, then frp2's layout is FR_COL or
               FR_ROW;
             - if frp->child is NULL, the frp's layout is FR_LEAF.
             - Therefore, they can't be equal.
Resolution : Assert frp->child not null.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
c802869e99 Fix warnings: window.c: win_rotate(): Np dereference: FP.
Problem    : Dereference of null pointer @ 1268.
Diagnostic : False positive.
Rationale  : Suggested error path implies current window's frame to be
             the only child of its parent, which is ruled out by
             `if (firstwin == lastwin) {` check at the beginning.
Resolution : Assert another child remains after removing current frame.
             Strictly, assert is only needed in false branch of
             conditional, but we add it the same in the true branch to
             reduce reader surprise.
             Several forms of a single assert after
             `if (firstwin == lastwin) {` were tried, but analyzer
             cannot follow implications that way.
2014-11-18 21:57:47 +01:00