Commit Graph

8225 Commits

Author SHA1 Message Date
Pavel Platto
7e3681c32e Remove code duplication in get_cursor_rel_lnum 2014-05-28 10:42:06 -04:00
Pavel Platto
a01f7948bc Add cursor.{c,h} to clint-files.txt 2014-05-28 10:42:06 -04:00
Pavel Platto
baaa428785 Remove ml_ prefix from cursor.h functions
s/ml_get_curline/get_cursor_line_ptr
s/ml_get_cursor/get_cursor_pos_ptr
2014-05-28 10:42:06 -04:00
Pavel Platto
2a154ef71d Enable -Wconversion on cursor.c 2014-05-28 10:42:06 -04:00
Hinidu
e62722922b Extract cursor.h from misc{1,2}.h and memline.h 2014-05-28 10:42:06 -04:00
Thiago de Arruda
cd84215370 Channel: Refactor: Extract register_channel function 2014-05-28 08:52:54 -03:00
Thiago de Arruda
d5c1e6b0fc Channel: Refactor: Extract serialize_event function 2014-05-28 08:52:54 -03:00
Thiago de Arruda
c3c826da34 API: Events: Add functions for {un}subscribing to broadcasted events 2014-05-28 08:52:54 -03:00
Thiago de Arruda
5e3fb4ae95 API: Events: Add support for broadcasting events
The channel_send_event will now broadcast events to all subscribed channels if
the 'id' parameter is 0.
2014-05-28 08:52:54 -03:00
Thiago de Arruda
48ac06506b API: Bugfix: Remove possible double-free in buffer_get_line 2014-05-28 08:52:54 -03:00
Thiago de Arruda
89ded2dac8 Add kvec.h macro library 2014-05-28 08:52:54 -03:00
Thiago de Arruda
09bcd97023 WStream: Refactor: Use reference count for memory management
Now `wstream_write` receives pointers for WBuffer objects(created with
wstream_new_buffer), which stores a reference count to determine when it's safe
the free the buffer. This was done to enable writing of the same buffer to
multiple WStream instances
2014-05-28 08:52:54 -03:00
Thiago de Arruda
1c308e28f1 Refactor: Use size_t for {w,r}streams.c 2014-05-28 08:52:54 -03:00
Eliseo Martínez
3390be96bf Fix localization: Update po files.
Sync po files to code at 3a68a4861a.
2014-05-27 19:58:42 -04:00
Eliseo Martínez
5e83fa0e66 Fix localization: Fix po files.
Problem:  Build fails because of some messages being repeated.
          Curiously, all repeated messages have this comment:
          "Explicit typecast avoids warning on Mac OS X 10.6".
          No idea why.
Solution: Remove repeated messages.
2014-05-27 19:58:42 -04:00
Eliseo Martínez
89bdcb1ed8 Fix localization: Fix build: Improve checking.
Problem  : Currently, 'make check' gives no explanations when it fails,
           only the name of the po file which caused the halt. Then,
           you have to manually run check.vim on that file to see what
           happened.
Solution : Generate a 'check.log' file on every execution of check.vim
           (overwriting if already existing). That way, when make halts,
           you can go there and see details about failure.
2014-05-27 19:58:42 -04:00
Eliseo Martínez
8e3634212d Fix localization: Fix build: Fix sjis-fixing executable.
Problem:  Executable used to fix japanese files with sjis encoding
          (sjiscorr) fails to compile.
Solution: - Add mising includes.
          - Remove __END_DECLS.
          - Add removed comments.
2014-05-27 19:58:41 -04:00
Eliseo Martínez
0e9d2464b4 Fix localization: Fix build: Fix sed issue on OSX.
Problem:  On OSX, sed commands processing files converted to encodings
          other that UTF-8 fail with "RE error: illegal byte sequence".
Solution: Make sed execute with C locale throgh environment variables
          (LANG=C, LC_ALL=C, LC_CTYPE=C).
2014-05-27 19:58:41 -04:00
Eliseo Martínez
a0b78b5733 Fix localization: Fix build: Fix included source files.
Problem  : Previous build assumed all *.c files were in parent dir. It
           only included globals.h, too.
Solution : Include all *.c and *.h files under parent dir (including
           subdirs).
2014-05-27 19:58:41 -04:00
Eliseo Martínez
cd49b073e9 Fix localization: Fix build: Fix dangling references.
Problem:  Makefile references some files that don't exist anymore.
Solution: Remove those references.
2014-05-27 19:58:41 -04:00
oni-link
753401ab4c vim-patch:7.4.267
Problem:    The '[ mark is in the wrong position after "gq". (Ingo Karkat)
Solution:   Add the setmark argument to do_join(). (Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=75f222d67cea335efbe0274de6340dba174c1e7e
2014-05-27 16:51:10 -04:00
Thiago de Arruda
b8e563f516 Refactor: Remove support for multiple protocols
This removes the boilerplate code supporting more than one RPC protocol as it
was becoming hard to maintain and we probably won't ever need it.
2014-05-27 10:19:38 -03:00
Justin M. Keyes
277554a9eb Merge pull request #749 from oni-link/vim-patch-7-4-285
vim-patch:7.4.285
2014-05-26 20:44:32 -04:00
Thiago de Arruda
cbf9564ee0 API: Bugfix: Remove memory leak from buffer_get_line 2014-05-26 14:02:13 -03:00
Thiago de Arruda
327347e3b4 API: Bugfix: Remove memory leak from buffer_set_name 2014-05-26 14:02:13 -03:00
Thiago de Arruda
807f940aa4 API: Bugfix: Remove memory leak from buffer_set_slice 2014-05-26 14:02:12 -03:00
Thiago de Arruda
0cc6050300 API: Bugfix: Remove memory leak from set_option_to 2014-05-26 14:02:12 -03:00
Thiago de Arruda
d6291894d4 Build: Add more files to clint-files.txt and fix errors 2014-05-26 14:02:12 -03:00
Thiago de Arruda
3f990f1afb Build: Add api/{helpers,handle}.c to CONV_SRCS 2014-05-26 14:02:12 -03:00
Thiago de Arruda
e994b6f1b1 Build: Add 'nonnull' attributes to msgpack_rpc functions 2014-05-26 14:02:12 -03:00
Thiago de Arruda
f3dc04bf7f API: Events: Implement channel_send_event and vimscript wrapper
This function can be used to send arbitrary objects via the API channel back to
connected clients, identified by channel id.
2014-05-26 14:02:12 -03:00
Thiago de Arruda
139c7ffdc7 API: Events: Return channel id from the API discover request
This refactors msgapck_rpc_{dipatch,call} to receive the channel id as
argument. Now the discovery request returns the [id, metadata] array.
2014-05-26 14:02:12 -03:00
Thiago de Arruda
7a00caf7c4 API: Refactor: Close/free channels when their streams reach EOF 2014-05-26 14:02:12 -03:00
Thiago de Arruda
4bac5e9ce1 API: Refactor: Duplicate/free string arguments coming from msgpack
When receiving strings *from* msgpack, we don't need to duplicate/free since
the data only lives in the msgpack parse buffer until the end of the call.

But in order to reuse `msgpack_rpc_free_object` when sending event data(which is
sent *to* msgpack), Strings must be freed, which means they must also be
allocated separately.
2014-05-26 14:02:12 -03:00
Thiago de Arruda
339d106f7c Dead code: Remove unused vimscript functions(from FEAT_CLIENTSERVER) 2014-05-26 14:02:12 -03:00
Nicolas Hillegeer
014febef22 coverity: fix BUFFER_SIZE_WARNING with str{n,l}cpy
Relates to issue #760

These coverity warnings are of the form:

>>>     CID 62602:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes...

This is caused by strncpy not alway NULL-terminated the destination buffer
(for example in the case where strlen(src) >= size(dst)). It's better to
replace that with (x)strlcpy, which always NULL-terminates.

Most of these are related to the set_api_error macro, which uses strncpy.
The error struct is used (for example) in msgpack_rpc_error, where strlen is
executed on it, so it needs to be NULL-terminated. (x)strlcpy, unlike
strncpy, always NULL-terminates the destination buffer.

Relevant parts of the coverity report:

*** CID 62602:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
/src/nvim/api/vim.c: 236 in vim_set_current_buffer()
230         if (try_end(err)) {
231           return;
232         }
233
234         char msg[256];
235         snprintf(msg, sizeof(msg),
              "failed to switch to buffer %d", (int)buffer);
>>>     CID 62602:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes on
>>>     destination array "err->msg" of size 256 bytes might leave the
>>>     destination string unterminated.
236         set_api_error(msg, err);
237         return;
238       }
239
240       try_end(err);
241     }

*** CID 62603:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
/src/nvim/api/private/helpers.c: 70 in try_end()
64       } else if (msg_list != NULL && *msg_list != NULL) {
65         int should_free;
66         char *msg = (char *)get_exception_string(*msg_list,
67                                                  ET_ERROR,
68                                                  NULL,
69                                                  &should_free);
>>>     CID 62603:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes on
>>>     destination array "err->msg" of size 256 bytes might leave the
>>>     destination string unterminated.
70         strncpy(err->msg, msg, sizeof(err->msg));
71         err->set = true;
72         free_global_msglist();
73
74         if (should_free) {
75           free(msg);
/src/nvim/api/private/helpers.c: 78 in try_end()
72         free_global_msglist();
73
74         if (should_free) {
75           free(msg);
76         }
77       } else if (did_throw) {
>>>     CID 62603:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes on
>>>     destination array "err->msg" of size 256 bytes might leave the
>>>     destination string unterminated.
78         set_api_error((char *)current_exception->value, err);
79       }
80
81       return err->set;
82     }
83

*** CID 62604:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
/src/nvim/api/private/helpers.c: 592 in set_option_value_err()
586                                              opt_flags)))
587       {
588         if (try_end(err)) {
589           return;
590         }
591
>>>     CID 62604:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes on
>>>     destination array "err->msg" of size 256 bytes might leave the
>>>     destination string unterminated.
592         set_api_error(errmsg, err);
593       }

*** CID 62605:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
/src/nvim/os/server.c: 114 in server_start()
108       if (addr_len > sizeof(ip) - 1) {
109         // Maximum length of a ip address buffer is 15(eg: 255.255.255.255)
110         addr_len = sizeof(ip);
111       }
112
113       // Extract the address part
>>>     CID 62605:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 16 bytes on
>>>     destination array "ip" of size 16 bytes might leave the destination
>>>     string unterminated.
114       strncpy(ip, addr, addr_len);
115
116       int port = NEOVIM_DEFAULT_TCP_PORT;
117
118       if (*ip_end == ':') {
119         char *port_end;
/src/nvim/os/server.c: 88 in server_start()
82
83     void server_start(char *endpoint, ChannelProtocol prot)
84     {
85       char addr[ADDRESS_MAX_SIZE];
86
87       // Trim to `ADDRESS_MAX_SIZE`
>>>     CID 62605:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes on
>>>     destination array "addr" of size 256 bytes might leave the
>>>     destination string unterminated.
88       strncpy(addr, endpoint, sizeof(addr));
89
90       // Check if the server already exists
91       if (map_has(cstr_t)(servers, addr)) {
92         EMSG2("Already listening on %s", addr);
93         return;

*** CID 62606:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
/src/nvim/os/server.c: 186 in server_stop()
180     void server_stop(char *endpoint)
181     {
182       Server *server;
183       char addr[ADDRESS_MAX_SIZE];
184
185       // Trim to `ADDRESS_MAX_SIZE`
>>>     CID 62606:  Buffer not null terminated  (BUFFER_SIZE_WARNING)
>>>     Calling strncpy with a maximum size argument of 256 bytes on
>>>     destination array "addr" of size 256 bytes might leave the
>>>     destination string unterminated.
187
188       if ((server = map_get(cstr_t)(servers, addr)) == NULL) {
189         EMSG2("Not listening on %s", addr);
190         return;
191       }
2014-05-26 13:08:45 -03:00
Nicolas Hillegeer
a50a34f472 memory: add xstrlcpy
Less "blow a hole in your foot" than strncpy. As also indicated by coverity.
Implementation inspired by the linux kernel (very similar to OSX's Libc
implementation as well).
2014-05-26 13:08:45 -03:00
oni-link
49306cfa02 Simplify edit.c functions replace_{push,pop}.
* Replace xmalloc (+memmove) with xrealloc
* Code style adjustments.
* Remove obsolete TODO comment
2014-05-24 04:55:10 -04:00
Eliseo Martínez
f179081fc8 Remove long_u: hashtab: Enable clint: Add to clint.
- Add hashtab.[ch] to clint file.
- Fix clint errors.
2014-05-24 01:17:51 +02:00
Eliseo Martínez
0509556b93 Remove long_u: hashtab: Refactor other types.
Current type of some other parameters/variables can be improved:
- hashtab_T         : ht_error : int  -> bool.
- hash_clear_all()  : off      : int  -> unsigned int.
- hash_clear_all()  : todo     : long -> size_t.
- hash_may_resize() : todo     : int  -> size_t.
2014-05-24 01:17:49 +02:00
Eliseo Martínez
ec89761e8a Remove long_u: hashtab: Refactor long_u type.
hashtab.h:
- hash_T: long_u -> size_t.

  In principle, a hash value could thought of as just an unsigned number
  without size semantics (uint32_t or uint64_t).  But it is used as
  index at some places, and so, size_t is also eligible. Therea re some
  places where assignments occur between hash_T and size_t variables, in
  both directions. Therefore, if we define hash_T to be of a type having
  a different width than that of size_t, we will have an incorrect
  assignment somewhere that will require an assert/guard.  So the most
  sensible option here seems to do hast_T to be size_t too.

- hashtab_T.ht_mask: long_u -> hash_T.

  Masks are used to be combined with hash_T values, so they should be of
  the same type.

hashtab.c:
- hash_may_resize(): oldsize: long_u -> size_t.
- hash_may_resize(): newsize: long_u -> size_t.
- hash_may_resize(): newmask: long_u -> hash_T.
2014-05-24 01:17:47 +02:00
Eliseo Martínez
0c68623aca Remove long_u: hashtab: Enable -Wconversion.
- Add hashtab.c to converted files list.
- Fix conversion issues:
    * hash_lookup()     : idx      : unsigned -> hash_T.
    * hash_may_resize() : minitems : int      -> size_t.
    * hash_may_resize() : newi     : unsigned -> hash_T.
    * hash_may_resize() : minsize  : long_u   -> size_t.
2014-05-24 01:17:46 +02:00
Eliseo Martínez
4d97ae66f9 Remove long_u: hashtab: Cleanup: Others.
hashtab.h:
- Add missing includes.
- Move hash_T to the top and use it to define hashtab_T.
- Move hash_removed related definitions to the top, as they are used in
  the definition of hashtab_T.
- Reformat multiline expression (start continuation with operator).
- Reformat function declaration into one single line.

hashtab.c:
- Use C99 style variable declarations (move declarations as near to
  first-usage point as possible).
- Simplify oldarray/newarray computation.
- Simplify unneeded else branch.
- Remove redundant casts.
2014-05-24 01:17:45 +02:00
Eliseo Martínez
98255c7a78 Remove long_u: hashtab: Cleanup: Comments.
- Restyle comments (/// when appropiate, // otherwise).
- Improve comments (add new comments, augment/clarify existing ones).
2014-05-24 01:17:43 +02:00
Eliseo Martínez
95c3300ca6 Remove long_u: do_outofmem_msg().
Remove long_u occurrences due to do_outofmem_msg() function.
Refactor size parameter from long_u into size_t.
2014-05-24 01:17:42 +02:00
Thiago de Arruda
f03a7672e1 API: Refactor: Fix buffer_get_mark 2014-05-23 16:06:59 -03:00
Thiago de Arruda
9815688fbd API: Refactor: Use macro for initializing all arrays 2014-05-23 16:06:59 -03:00
Thiago de Arruda
1156360fe7 API: Refactor: Implement buffer_get_number 2014-05-23 16:06:59 -03:00
Thiago de Arruda
a842fe4dc1 API: Refactor: Return handles instead of indexes
- Define specialized arrays for each remote object type
- Implement msgpack_rpc functions for dealing with the new types
- Refactor all functions dealing with buffers, windows and tabpages to
  return/accept handles instead of list indexes.
2014-05-23 16:06:58 -03:00
Thiago de Arruda
f70f9bfac1 API: Refactor: Change the integer type of remote objects to uint64_t 2014-05-23 16:06:58 -03:00