Commit Graph

59 Commits

Author SHA1 Message Date
Thiago de Arruda
4b063ea3ad Implement job control
- Add a job control module for spawning and controlling co-processes
- Add three vimscript functions for interfacing with the module
- Use dedicated header files for typedefs/structs in event/job modules
2014-04-07 15:03:05 -03:00
Hinidu
8a2ffb2b01 Use stdbool in os module 2014-04-07 12:15:28 -03:00
Felipe Oliveira Carvalho
13848aadbf Remove simpler cases of OOM error handling (after *alloc calls)
By simpler cases I mean cases where the OOM error is not expected to be handled
by the caller of the function that calls `alloc`, `lalloc`, `xrealloc`,
`xmalloc`, `alloc_clear`, and `lalloc_clear`.

These are the functions that:

 - Do not return an allocated buffer
 - Have OOM as the only error condition

I took note of the functions that expect the caller to handle the OOM error and
will go through them to check all the callers that may be handling OOM error in
future commits.

I'm ignoring eval.c and ex_.c in this series of commits. eval.c will soon be
obsolete and I will deal with ex_.c in later PRs.
2014-04-06 22:54:59 -03:00
Thiago de Arruda
0b826ef43e Add comments and fix os_microdelay call 2014-04-06 11:43:23 -03:00
Thiago de Arruda
dfb7d826ac Remove RealWaitForChar and mch_new_shellsize
The last occurrence of `RealWaitForChar` was replaced by the `os_microdelay`
function. `mch_new_shellsize` had an empty body, so there seems to be no reason
for keeping it around
2014-04-06 11:43:23 -03:00
Stefan Hoffmann
e76249c813 Moved mch_get_host_name and renamed it to os_get_hostanme 2014-04-05 20:19:38 -03:00
Stefan Hoffmann
a8013f2bb1 Moved mch_get_pid and renamed it to os_get_pid 2014-04-05 20:19:38 -03:00
Thiago de Arruda
57cd2d6614 Remove the old mch_call_shell implementation 2014-04-05 11:05:31 -03:00
John Schmidt
84b06b77bd Remove mzscheme 2014-04-05 10:01:22 -03:00
John Schmidt
44a6f194b4 Remove SniFF 2014-04-05 10:01:21 -03:00
John Schmidt
6f53cb1cc3 Extract memory.c from misc2.c 2014-04-04 16:33:12 -03:00
Thiago de Arruda
d9914a038a Remove mch_call_shell GUI printing code
This isn't needed right now because spawned shells will inherit stdout by
default
2014-04-03 12:08:26 -03:00
Thiago de Arruda
b336eb46f0 Remove support for running interactive programs
This removes `mch_call_shell` code for feeding programs interactively. The
removed code was supporting interactive programs in the old GUI, but right now
we only have a terminal UI.

The code is currently safe to remove because interactive programs will just
simply take control of the terminal in cooked mode.
2014-04-03 11:59:27 -03:00
Thomas Wienecke
77bfb6cd99 Test and refactor gettail -> path_tail. 2014-04-03 10:32:41 -03:00
oni-link
a96f2949cc remove HAVE_RENAME
rename is a C99 standard function.
2014-04-02 18:52:16 -03:00
Thiago de Arruda
774f668c43 Move signal handling to libuv event loop
This removes all signal handling code from os_unix.c to os/signal.c. Now signal
handling is done like this:

- Watchers for signals are registered with libuv default event loop
- `event_poll` continuously calls `poll_uv_loop` to produce events until it
  receives user input, SIGINT or a timeout
- Any signals received in `poll_uv_loop` will push events to a queue that is
  drained and processed by `event_poll`

Signals aren't handled directly in the libuv callback to avoid recursion in the
event loop(which isn't supported by libuv).

The same principle will apply to other events in the future: Push to a queue
from a libuv callback and drain it from `event_poll`
2014-04-01 09:46:29 -03:00
John Schmidt
7464b07c22 Move mch_expandpath from os_unix.c 2014-04-01 08:08:07 -03:00
Julian Orth
60a7ad8a47 remove HAVE_SETJMP_H 2014-03-31 21:24:59 -03:00
John Schmidt
5d30654512 Rename ga_init2() to ga_init() 2014-03-31 14:42:11 -03:00
Thiago de Arruda
ab61c2caa7 Rewrite show_shell_mess as a ShellOpts flag 2014-03-31 08:07:47 -03:00
Thiago de Arruda
0d61b1c470 Refactor SHELL_* defines into enum typedef
The SHELL_* defines are the bitflags that can be passed to `mch_call_shell`.
The enum is defined in 'os/shell.h', where all shell-related functions will
eventually be defined.
2014-03-31 08:07:47 -03:00
Thiago de Arruda
607e1c7ee4 Refactor/cleanup argument parsing functions 2014-03-31 08:07:47 -03:00
Thiago de Arruda
f496d619a9 Extract shell_build_argv from mch_call_shell 2014-03-31 08:07:47 -03:00
Thiago de Arruda
c791922224 Make extra_shell_arg a mch_call_shell parameter 2014-03-31 08:07:46 -03:00
Thiago de Arruda
8a61c27b1e Extract shell_count_argc from mch_call_shell 2014-03-31 08:07:46 -03:00
Thiago de Arruda
2d28251a6e Extract shell_skip_word from mch_call_shell 2014-03-31 08:07:46 -03:00
Thiago de Arruda
1ab6cf47bd Split code for counting and parsing arguments 2014-03-31 08:07:46 -03:00
John Schmidt
f5154d7451 Extract path.c from misc1.c 2014-03-29 13:29:52 -03:00
Thomas Wienecke
5762c4e528 Rename mch_* functions to os_* in os module. 2014-03-27 19:57:55 -03:00
Thiago de Arruda
452804638d Reimplement input functions on top of libuv
The functions `mch_inchar`, `mch_breakcheck`, `mch_char_avail` were
reimplemented on top of libuv. Here's how it works:

- When Neovim needs to wait for characters, it will transfer control to libuv
  event loop.
- When the libuv event loop gets user input, it will transfer control back to
  Neovim
- Neovim uses the `input_read` function to get the actual data read by libuv.

With this scheme its possible to keep Neovim single-threaded while enjoying the
benefits provided by libuv.

This commit leaves SIGWINCH broken for now
2014-03-26 18:30:18 -03:00
Felipe Oliveira Carvalho
07dad7acf3 Use memmove instead of mch_memmove 2014-03-26 16:28:13 -03:00
Thiago de Arruda
32f118a47f Implement mch_delay on top of libuv
Needed to temporarily move two static variables from os_unix.c to 'globals.h'
as those are shared by other functions still in os_unix.
2014-03-24 19:25:07 -03:00
Petter Wahlman
edabc6f4c7 adapt to the style guildelines
semi-automated harvest of low hanging fruit:
change the unorthodox use of whitespace.
2014-03-19 07:53:16 -03:00
Thomas Wienecke
1949acc806 Revive vim_fname (-> os_file_exists); fix misuse of mch_getperm.
* Move vim_fname from misc1 to os/fs:os_file_exists.
* Add unit tests for os_file_exists.
* Replace misuse of mch_getperm with os_file_exists.
2014-03-15 11:50:22 -03:00
Thomas Wienecke
c83e8b4dc7 Move and refactor mch_[gs]etperm to os/fs module. 2014-03-15 11:50:22 -03:00
Stefan Hoffmann
ce31410c79 moved mch_get_user_name() and mch_get_uname() into os/users.c 2014-03-13 17:18:44 -03:00
Thomas Wienecke
d5b223afe2 Move mch_can_exe, executable_file to os/fs.c.
* Rename executable_file to is_executable.
2014-03-07 17:30:39 -03:00
Stefan Hoffmann
f2433aedc8 cleanup environment variable handling + unit tests
* removed a putenv() implementation which isn't needed anymore
  * mch_getenv() and mch_setenv() are now functions in src/os/env.c
  * removes direct calls to getenv() and setenv() outside of src/os/env.c
  * refactored the logic of get_env_name into mch_getenvname_at_index
  * added unittests for the functions in os/env.c
2014-03-06 13:38:45 -03:00
Thomas Wienecke
fc86866402 Fix style issues.
* Rename mch_full_name to mch_get_absolute_path.
* Rename mch_is_full_name to mch_is_absolute_path.
* Add a lot of missing parentheses.
* Remove yoda-conditions for consistency.
* Remove spaces in function declaration.
2014-03-06 13:10:58 -03:00
Simen Endsjø
3925d951a1 Remove USE_SYSTEM and code only run under USE_SYSTEM 2014-03-05 15:12:21 -03:00
Thomas Wienecke
8bb672e6a0 Port mch_isdir to libuv. 2014-03-05 15:01:19 -03:00
Thomas Wienecke
71ff9337d9 Remove static declaration of executable_file.
Since static functions are only visible in the file in which they are
defined, this needs to be done in order to unit test the function.
2014-03-05 15:01:19 -03:00
Thomas Wienecke
92a0374d7b Rename and refactor mch_FullName.
* Rename mch_FullName to mch_full_name to match the style guide.
* Add mch_full_dir_name, which saves the absolute path of a given
directory relative to cwd into a given buffer.
* Add function append_path, which glues together two given paths with a
slash.
* Adapt moonscript coding style to the tests.
2014-03-04 06:54:08 -03:00
Alexander Bolodurin
d8b37824b5 Remove dead stack-checking code.
Code under HAVE_STACK_LIMIT is not used.
The definition was commented out in rev 180 of the original
Mercurial repo, and then completely removed in rev 2520,
but the code guarded by it was left in.
2014-03-03 09:50:41 -03:00
Nicolas Pierron
d9283c4927 Remove __ARGS macro. Close #205
This is a squash of all commits sent to #81.

- Remove unused undef of __ARGS.
- Fix mch_rename declaration.
- Follow changes related to moved & extracted files.
- Properly indent function declarations of getchar.h and quickfix.c.
2014-03-02 14:19:59 -03:00
Felipe Oliveira Carvalho
410f0a27c5 Extract garray.c from misc2.c
Start to split misc2.c in many other files (see #209).
2014-02-28 06:43:20 -03:00
scott-linder
0ef90c13b7 Removes 'proto' dir
See #137 for the issue.

Every header in the proto directory was:

* Given include guards in the form

    #ifndef NEOVIM_FILENAME_H
    #define NEOVIM_FILENAME_H
        ...
    #endif /* NEOVIM_FILENAM_H */

* Renamed from *.pro -> *.h
* Moved from src/proto/ to src/

This would have caused conficts with some existing headers in src/;
rather than merge these conflicts now (which is a whole other can of
worms involving multiple and conditional inclusion), any header in src/
with a conflicting name was renamed from *.h -> *_defs.h (which may or
may not actually describe its purpose, the change is purely a
namespacing issue).

Once all of these changes were made a script was developed to determine
what #includes needed to be added to each source file to describe its
dependencies and allow it to compile; because the script is so short
and I'll just list it here:

    #! /bin/bash

    cd $(dirname $0)

    # Scrapes `make` output for provided error messages and outputs #includes
    # needed to resolve them.
    #   $1 : part of the clang error message between filename and identifier
    list_missing_includes() {
        for file_missing_pair in $(CC=clang make 2>&1 >/dev/null | sed -n "s/\/\(.*\.[hc]\).*$1.*'\(.*\)'.*/\1:\2/p"); do
            fields=(${file_missing_pair//:/ })
            source_file=${fields[0]}
            missing_func=${fields[1]}
            # Try to find the declaration of the missing function.
            echo $(basename $source_file) \
                \#include \"$(grep -r "\b$missing_func __ARGS" | sed -n "s/.*\/\(.*\)\:.*/\1/p")\"
        # Remove duplicates
        done | sort | uniq
    }

    echo "Finding missing function prototypes..."
    list_missing_includes "implicit declaration of function"
    echo "Finding missing identifier declarations..."
    list_missing_includes "use of undeclared identifier"

Each list of required headers was added by hand in the following format:

    #include "vim.h"
    #include "*_defs.h"
    #include "filename.h"
    /* All other includes in same module here, in alphabetical order. */
    /* All includes from other modules (e.g. "os/*.h") here in alphabetical
     * order. */
2014-02-26 04:17:27 -03:00
Thomas Wienecke
82e0636e78 Delete local function strerror and USE_GETCWD define.
Both are useless after porting mch_dirname to libuv.
2014-02-25 21:24:52 -03:00
Thomas Wienecke
8437a4c972 os_unix: Port mch_FullName and mch_isFullName to libuv.
Basically just delete conditional use of fchdir, since the other called
mch_* functions are already ported to libuv.
2014-02-25 18:59:22 -03:00
Thomas Wienecke
1e2da25d3d os_unix: Use libuv uv_cwd instead of getcwd/getwd. 2014-02-25 14:26:21 -03:00