ridiculousfish
eaf143dd8a
Introduce owning_lock template
...
Will enable rust-style lock ownership semantics
2017-01-29 18:15:38 -08:00
Kurtis Rader
973097f025
style fixups
2017-01-29 18:00:48 -08:00
ridiculousfish
e52a04e341
Cleanup of LRU cache implementation
...
Switch to CRTP from virtual functions and improve ownership semantics.
It's no longer necessary for clients to use new and delete.
2017-01-29 12:16:42 -08:00
Kurtis Rader
5b6cc5af6d
time for another make style-all
...
Gotta keep the entropy (i.e., disorder) from increasing.
2017-01-26 20:05:46 -08:00
ridiculousfish
05d569ee44
Simplify error case of token_type_description and keyword_description
...
Simply return a constant string, since in practice the error case
is not hit
2017-01-26 17:47:24 -08:00
ridiculousfish
a40f491c93
Defeat some miscellaneous warnings in the g++ build
2017-01-26 17:33:48 -08:00
ridiculousfish
e78cefd759
Defeat "enumeral mismatch" g++ warnings through typecasting
2017-01-26 17:18:38 -08:00
ridiculousfish
1efb81456b
Use std::move instead of swap in a few places where it improves clarity
2017-01-26 16:14:50 -08:00
ridiculousfish
fec83fa975
Eliminate moved_ref
...
Use real rvalue references instead
2017-01-26 15:43:46 -08:00
ridiculousfish
1634c9df78
Make job_get_flag and job_set_flag instance methods of jobs
...
Makes them easier to call when you have a smart pointer
2017-01-26 15:06:58 -08:00
ridiculousfish
14fb38f952
Switch job handling to use shared pointers instead of raw pointers
...
Clarifies memory management around allocation of job_ts
2017-01-26 14:47:32 -08:00
ridiculousfish
1d9cc12984
Repair control-C cancellation of loops
...
Commit ab189a75
introduced a regression where we stop breaking out
of loops in response to a child death via a signal. Fix that regression.
Also introduces a test to help ensure we don't regress in the future.
Fixes #3780
2017-01-26 13:41:56 -08:00
ridiculousfish
2fb1d5900d
Use true and false for bool, not 0 and 1
2017-01-26 12:51:22 -08:00
ridiculousfish
59a3968fd2
Switch to using unique_ptr in env_node_t
...
Makes our memory management of the variable stack more explicit
2017-01-26 12:51:22 -08:00
ridiculousfish
8e577b01bc
Migrate "unspecified scope" logic for set into var_stack_t
2017-01-26 12:51:22 -08:00
ridiculousfish
8d2dfdf2c9
Migrate environment variable cache into var_stack_t
2017-01-26 12:03:14 -08:00
ridiculousfish
dabc34e0f9
Migrate next_scope_to_search into var_stack_t
2017-01-26 11:32:45 -08:00
ridiculousfish
3525a9d7ee
Make env_node_t's destructor private
...
Migrate responsibility for popping the environment into var_stack_t
2017-01-26 11:20:09 -08:00
ridiculousfish
61887c061b
Migrate responsibility for node creation into var_stack_t
2017-01-26 11:06:03 -08:00
ridiculousfish
e4fd1d5f5a
Wrap up the variable stack in a little struct
...
First step towards cleaning up env.cpp's global variables
2017-01-26 10:38:55 -08:00
ridiculousfish
afe54df843
Eliminate the 'global' var_table_t variable in env.cpp
...
This can always be trivially found from 'global_env'
2017-01-26 10:32:31 -08:00
ridiculousfish
37578d8b39
Add some additional commenting around iothreads
2017-01-26 09:40:18 -08:00
ridiculousfish
2f29473efc
Remove legacy iothread_perform templates
...
We no longer need to have overloads for function pointers.
2017-01-26 09:40:18 -08:00
ridiculousfish
f29139e853
Change clients of file_detection_context_t to use lambdas
...
Allows for eliminating file_detection_context_t
2017-01-26 09:40:17 -08:00
ridiculousfish
87152877b2
Switch to use lambda-style iothread for autosuggestions
...
Allows eliminating autosuggestion_context_t
2017-01-26 09:40:17 -08:00
ridiculousfish
8af00d2b78
Adopt lambda-style iothread_perform in syntax highlighting
...
Allows eliminating background_highlight_context_t
2017-01-26 09:40:17 -08:00
ridiculousfish
a3dbca90d5
g++-friendly 'Rework iothread_perform for void return types'
...
Allows iothread_perform to work with void return types on both
g++ and clang
This reverts commit 1040b255c7
and reintroduces ac9a0f0dbf
2017-01-26 09:40:17 -08:00
Kurtis Rader
a447a9aeff
correct handling of SIGHUP by interactive fish
...
This is a partial fix for issue #3737 . It only addresses the SIGHUP
aspect of the problem. Fixing SIGTERM is TBD.
2017-01-24 15:24:13 -08:00
Kurtis Rader
319e65af05
improve sanity check code
2017-01-24 15:24:13 -08:00
Fabian Homborg
1040b255c7
Revert "Rework iothread_perform for void return types"
...
This reverts commit ac9a0f0dbf
, which massively broke fish built with gcc.
Fixes #3770 .
2017-01-24 17:33:03 +01:00
Kurtis Rader
bf2d61c6fd
Revert "improve sanity check code"
...
This reverts commit 7e6543c4cd
.
2017-01-24 07:34:51 -08:00
Kurtis Rader
64485167e9
Revert "correct handling of SIGHUP by interactive fish"
...
This reverts commit 31adc221d9
.
2017-01-24 07:34:15 -08:00
Kurtis Rader
31adc221d9
correct handling of SIGHUP by interactive fish
...
This is a partial fix for issue #3737 . It only addresses the SIGHUP
aspect of the problem. Fixing SIGTERM is TBD.
2017-01-23 19:42:27 -08:00
Kurtis Rader
7e6543c4cd
improve sanity check code
...
Partial fix for #3737
2017-01-23 19:42:26 -08:00
ridiculousfish
ac9a0f0dbf
Rework iothread_perform for void return types
...
Need to use a template specialization so we don't try to create
a variable of type void
2017-01-23 13:56:43 -08:00
ridiculousfish
699d294ac1
Adopt iothread_perform-lambdas in fish_tests.cpp
2017-01-23 11:45:28 -08:00
ridiculousfish
1cfbd62266
Enable use of std::function and lambdas in iothread_perform
2017-01-23 11:35:22 -08:00
ridiculousfish
02ddc20c87
Correct signatures of main_thread_request_t's deleted functions
2017-01-23 10:58:38 -08:00
ridiculousfish
520e567390
Eliminate the old-style iothread_perform_on_main
...
All clients now use the std::function form (i.e. lambdas)
2017-01-23 10:46:42 -08:00
ridiculousfish
144e7b0616
Adopt lamba-style perform_on_main in the tests
2017-01-23 10:45:48 -08:00
ridiculousfish
fe8e99138d
Adopt lambda-style perform_on_main in expand.cpp
...
Allows eliminating find_job_data_t
2017-01-23 10:44:36 -08:00
ridiculousfish
e0abfee370
Adopt lambda-style perform_on_main in complete.cpp
...
Allows eliminating complete_load_no_reload
2017-01-23 10:43:34 -08:00
ridiculousfish
66a0f18410
Another fix for Linux build
2017-01-23 10:39:53 -08:00
ridiculousfish
3181bdcb9b
Attempt to fix the Linux build
2017-01-23 10:38:55 -08:00
ridiculousfish
e1adc3a6b2
Make iothread's perform_on_main use std::function
...
This will allow clients to use lambdas instead of having to
define an out-of-line function
2017-01-23 10:37:16 -08:00
ridiculousfish
7a76efa629
Use set_cloexec instead of fcntl directly in iothread.cpp
2017-01-23 09:59:56 -08:00
ridiculousfish
216f7d912a
Clean up some of the memory management in iothread.cpp
...
Store requests directly on the queue, instead of via a heap allocation
2017-01-23 09:56:02 -08:00
ridiculousfish
d373f1fc1d
Lower-snake-case for MainThreadRequest_t and SpawnRequest_t
...
Matches style of rest of the project
2017-01-23 09:34:30 -08:00
ridiculousfish
36a0f745cd
Fix some bogus error messages in builtin_commandline
2017-01-23 09:32:50 -08:00
ridiculousfish
ab189a75ab
Switch a job's process list from a linked list to a vector of pointers
...
Clarifies and simplifies the memory management around process handling.
2017-01-23 09:28:34 -08:00
ridiculousfish
f4476100f2
Remove comment about job_iterator_t being used from signal handlers
...
It is no longer used from signal handlers, and has not been for a while
2017-01-22 00:59:50 -08:00
ridiculousfish
6bdab62358
Make io_buffer_t::create return a shared_ptr
...
Eliminates some manual memory management
2017-01-22 00:44:04 -08:00
ridiculousfish
009a677e0d
Use the STL's make_unique if available
...
Fixes a build error with g++ 6.1
Fixes #3759
2017-01-22 00:32:08 -08:00
ridiculousfish
439f233ccc
Make fire_event_callback take a std::function instead of function pointer
2017-01-21 17:15:45 -08:00
ridiculousfish
a91dad35db
Use unique_ptr instead of new for history tests
2017-01-21 17:14:56 -08:00
ridiculousfish
6f745762bb
Make universal_notifier_t use unique_ptr instead of raw pointers
2017-01-21 16:56:45 -08:00
ridiculousfish
f0065cda13
Clean up event_t handling
...
Use shared_ptr instead of the silly killme list
2017-01-21 16:48:07 -08:00
ridiculousfish
8a0d4854e8
Replace auto_ptr with unique_ptr
2017-01-21 16:10:42 -08:00
ridiculousfish
b3fff2d779
Switch to using unique_ptr for builtin_test
...
Removes a lot of terrifying manual memory management
2017-01-21 16:08:53 -08:00
ridiculousfish
754b0e9b91
Use unique_ptr in string_replace()
...
Eliminates some manual calls to delete
2017-01-21 15:47:12 -08:00
ridiculousfish
3139ad0d4d
Use unique_ptr in builtin_commandline_scoped_transient_t
...
Allows removing a manual call to delete
2017-01-21 15:45:38 -08:00
ridiculousfish
3272505891
Eliminate the "Clean up the block stack" logic in eval_block_node
...
The block stack is now sound, and no longer needs this ancient
cleanup logic, which tried to account for cases where blocks
were pushed but never popped.
2017-01-21 15:42:35 -08:00
ridiculousfish
0991e398bb
Clean up parser_t's block stack
...
Currently the block stack is just a vector of pointers.
Clients must manually use new() to allocate a block, and then
transfer ownership to the stack (so must NOT delete it).
Give the parser itself responsibility for allocating blocks too,
so that it takes over both allocation and deletion. Use unique_ptr
to make deletion less error-prone.
2017-01-21 15:35:35 -08:00
ridiculousfish
ac8b27fcb1
Implement and use make_unique
...
Allows avoiding some explicit calls to new(), which can look suspicious
2017-01-21 15:02:41 -08:00
ridiculousfish
5b108efde4
Use unique_ptr in builtin_string
...
Avoids manual calls to delete
2017-01-21 14:54:01 -08:00
ridiculousfish
f2884343b3
Use unique_ptr in a parser's execution_context list
...
Avoids requiring manual calls to delete
2017-01-21 14:53:52 -08:00
ridiculousfish
16bc7b48b5
Make profile_items use unique_ptr instead of raw pointers
2017-01-21 14:33:17 -08:00
ridiculousfish
9efa897d0d
Early steps towards rationalizing SIGINT handling
...
Previously we would try to walk all the blocks (from within the
signal handler!) and mark them as skipped. Stop doing that, it's
wildly unsafe.
Also rationalize how the skip flag is set per block. Remove places
that shouldn't set it (e.g. break and continue shouldn't set skip
on the loop block).
2017-01-21 14:15:03 -08:00
ridiculousfish
d8a6c0a91b
Add a SIGALRM handler that does nothing
...
This will be part of a future signal torture-test, to ensure
we are handling EINTR correctly
2017-01-21 14:07:54 -08:00
ridiculousfish
7e3db843cd
Remove FUNCTION_DEF_BLOCK and FAKE_BLOCK
...
These are old-parser block types that are no longer used.
2017-01-21 13:57:05 -08:00
ridiculousfish
bb65b82c56
Mark some signal-related variables as 'volatile sig_atomic_t'
2017-01-21 13:33:46 -08:00
ridiculousfish
bb686a2236
Enable some test_illegal_command_exit_code tests
...
A comment suggests these cause bad_alloc, but this
doesn't seem to happen. If it does happen, we want to hit
it so we can track it down!
2017-01-21 12:56:22 -08:00
ridiculousfish
fc803c75a6
Remove some errant newlines in fish_tests.cpp
2017-01-21 12:55:01 -08:00
ridiculousfish
5a5a6a6968
Correctly handle multiple chunks from read_in_chunks
...
read_in_chunks does not clear the intermediate string 'str'
between iterations, so every chunk has every other chunk prepended
to it.
A secondary issue is that it calls str2wcstring() on an intermediate
chunk, which may split multi-byte sequences. This needs to be deferred
to the end.
Test added. Fixes #3756
2017-01-21 12:43:20 -08:00
ridiculousfish
f7c133da00
Use long instead of int in read_in_chunks()
...
Fixes warnings about narrowing conversions
2017-01-21 11:53:49 -08:00
ridiculousfish
4c56c89afc
Use wcscmp instead of comparing against a string literal
...
Should fix OpenSUSE build
2017-01-21 11:51:06 -08:00
Fabian Homborg
ab3149257b
Make test errors redirectable
...
This can't use `fwprintf`, since that goes directly to actual stderr.
It needs to use the passed stream.
2017-01-21 13:11:54 +01:00
Kurtis Rader
2e38cf2a4b
implement means to learn about a functions source
...
This implements a way to use the `functions` command to perform
introspection to learn about the characteristics of a function. Such as
where it came from.
Fixes #3295
2017-01-20 21:48:41 -08:00
Kurtis Rader
2be1288cac
handling when stty
reports zero for termsize
...
If the kernel reports a size of zero for the rows or columns (i.e., what
`stty -a` reports) fall back to the `COLUMNS` and `LINES` variables. If
the resulting values are not reasonable fallback to using 80x24.
Fixes #3740
2017-01-20 15:34:29 -08:00
Kurtis Rader
d6ceeb915d
fix interaction of buffered/unbuffered output
...
Fixes #3747
2017-01-19 20:58:12 -08:00
Kurtis Rader
d905ed33fe
another glibc EIO workaround
...
Partial fix for #3737 and #3644
2017-01-15 19:27:53 -08:00
Kurtis Rader
5809608bd2
implement chunked reads
...
Provide a more efficient method for reading lines (or null terminated
sequences) when the input is seekable.
Another partial fix for #2007
2017-01-14 20:51:54 -08:00
Kurtis Rader
2e65e27189
refactor builtin_read
...
Refactor `builtin_read()` to split the code that does the actual reading
into separate functions. This introduces the `read_in_chunks()` function
but in this change it is just a clone of `read_one_char_at_a_time()`. It
will be modified to actually read in chunks in the next change.
Partial fix for #2007
2017-01-14 20:51:54 -08:00
Kurtis Rader
fd6d814ea4
remove unnecessary signal management
...
The shell was doing a log of signal blocking/unblocking that hurts
performance and can be avoided. This reduced the elapsed time for a
simple benchmark by 25%.
Partial fix for #2007
2017-01-14 20:51:54 -08:00
Kurtis Rader
51adf815aa
Dragonfly BSD needs sys/socket.h
...
Commit 4bc220f
removed `#include <sys/socket.h>` which breaks compiling
on Dragonfly BSD.
2017-01-14 19:53:27 -08:00
Kurtis Rader
56e05dab02
another attempt to workaround a glibc bug
...
This is another attempt to fix issue #3644 that we believe is due to issue
https://sourceware.org/bugzilla/show_bug.cgi?id=20632 .
2017-01-13 21:18:34 -08:00
Kurtis Rader
2e9a349dd0
normalize use of stdio functions taking a stream
...
We should never use stdio functions that use stdout implicitly. Saving a
few characters isn't worth the inconsistency. Too, using the forms such
as `fwprintf()` which take an explicit stream makes it easier to find
the places we write to stdout versus stderr.
Fixes #3728
2017-01-13 20:48:55 -08:00
David Adam
4bc220f349
Drop requirement for socket library
...
The socket(2) library function is only required on Linux, and does not
require special linker arguments to work.
Closes #2360 .
2017-01-11 19:34:32 +08:00
David Adam
5eaccf91e2
drop check for old running fishd instances
...
Closes #3669 .
Reverts commit d1a56139e1
.
2017-01-11 19:34:32 +08:00
Kurtis Rader
11dccccdcc
optimize determining if can set term title
...
Decide if the terminal supports setting its title only when necessary
(e.g., when TERM changes) rather than everytime we're about to write
the prompt.
2017-01-10 13:11:39 -08:00
Kurtis Rader
e9de674bbd
handle ttyname returning NULL
...
If the tty has been closed (i.e., become invalid) the `ttyname()`
function will return NULL. Passing that NULL to `strstr()` can crash
fish which means it won't kill its child processes and exit cleanly.
Another fix for #3644
2017-01-10 13:11:39 -08:00
Kurtis Rader
f365f720da
don't warn about using obsolete complete options
...
Fixes #3640
2017-01-09 11:21:34 -08:00
ridiculousfish
e5bfdb99b6
Enable mkostemp to be weak-linked
...
mkostemp is not available on some older versions of macOS. In order
for our built binaries to run on them, mkostemp must be weak-linked.
On other systems, we use the autoconf check.
Introduce a function fish_mkstemp_cloexec which uses mkostemp if
it was detected and is available at runtime, else falls back to
mkstemp. This isolates some logic that is currently duplicated in
two places.
See #3138 for more on weak linking.
2017-01-08 22:18:27 -08:00
ridiculousfish
6eb88dc13f
Redeclare certain wcs functions as weak on macOS
...
In order to use C++11 with the standard macOS Xcode toolset,
we must use libc++. This in turn requires using 10.7 as our
MIN_REQUIRED in the availability macros, which in turn marks
certain wide-character functions as strong symbols (since they
were introduced in 10.7).
Redeclare them as weak, so that we can run on 10.6 without link
errors. See #3138 for more.
2017-01-08 22:18:27 -08:00
Fabian Homborg
6daa8d7e12
Replace puts() with wprintf()
2017-01-07 14:05:42 +01:00
Fabian Homborg
177e06808c
Replace all printf invocations with wprintf
...
Remember, GNU doesn't allow mixing narrow and wide IO.
2017-01-07 14:05:42 +01:00
Fabian Homborg
69005f8c60
builtin_test: Produce wide output to stderr
...
GNU systems don't allow mixing narrow and wide IO, so some of these
messages were lost since 1621fa43d8
.
stderr is also the more logical place for error output to end up.
Fixes #3704 .
2017-01-07 14:05:42 +01:00
Kurtis Rader
6f8775499f
don't warn about EPIPE errors
...
Emitting warnings about EPIPE errors when writing to stdout or stderr is
more annoying than helpful. So suppress that specific warning message.
Fixes #2516
2017-01-06 23:59:06 -08:00
Kurtis Rader
573916e5e2
ensure CMD_DURATION can be used in prompts
...
A third-party plugin noticed that using `$CMD_DURATION` in the prompt
causes problems when combined with the recent changes to tighten up
parsing of strings meant to be integer values. This fixes the problem by
ensuring the var is defined before the first interactive command is run.
See https://github.com/fisherman/dartfish/issues/7
2017-01-06 21:14:29 -08:00
Kurtis Rader
7a3e0924e0
only warn about obsolete complete flags once
...
It was pointed out that the previous change to alert people to the fact
their completion scripts were using flags that are no longer valid
resulted in way too many warnings. This limits the warning to one per
session.
Fixes #3640
2017-01-06 21:03:16 -08:00