diff options
author | Pedro Alves <pedro@palves.net> | 2020-09-08 17:34:41 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2020-10-26 18:57:40 +0000 |
commit | d744f0f9652ee8de839c09e4517b18c9b88aecb7 (patch) | |
tree | 8266ed1925a47e82c6f6bdc0e7825f1ac57c8a33 /gdbsupport | |
parent | 55c3ad8801359ecb166ff3c04c3bd14140f623a1 (diff) | |
download | gdb-d744f0f9652ee8de839c09e4517b18c9b88aecb7.zip gdb-d744f0f9652ee8de839c09e4517b18c9b88aecb7.tar.gz gdb-d744f0f9652ee8de839c09e4517b18c9b88aecb7.tar.bz2 |
gdb::handle_eintr, remove need to specify return type
This eliminates the need to specify the return type when using
handle_eintr. We let the compiler deduce it for us.
Also, use lowercase for function parameter names. Uppercase should
only be used on template parameters.
gdb/ChangeLog:
* nat/linux-waitpid.c: Include "gdbsupport/eintr.h".
(my_waitpid): Use gdb::handle_eintr.
gdbserver/ChangeLog:
* netbsd-low.cc (netbsd_waitpid, netbsd_process_target::kill)
(netbsd_qxfer_libraries_svr4): Use gdb::handle_eintr without
explicit type.
gdbsupport/ChangeLog:
* eintr.h (handle_eintr): Replace Ret template parameter with
ErrorValType. Use it as type of the failure value. Deduce the
function's return type using decltype. Use lowercase for function
parameter names.
Diffstat (limited to 'gdbsupport')
-rw-r--r-- | gdbsupport/ChangeLog | 7 | ||||
-rw-r--r-- | gdbsupport/eintr.h | 26 |
2 files changed, 22 insertions, 11 deletions
diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index 759eea1..2b01a0b 100644 --- a/gdbsupport/ChangeLog +++ b/gdbsupport/ChangeLog @@ -1,3 +1,10 @@ +2020-10-26 Pedro Alves <pedro@palves.net> + + * eintr.h (handle_eintr): Replace Ret template parameter with + ErrorValType. Use it as type of the failure value. Deduce the + function's return type using decltype. Use lowercase for function + parameter names. + 2020-10-25 Simon Marchi <simon.marchi@polymtl.ca> * Makefile.in: Re-generate. diff --git a/gdbsupport/eintr.h b/gdbsupport/eintr.h index 64ff594..e097047 100644 --- a/gdbsupport/eintr.h +++ b/gdbsupport/eintr.h @@ -43,25 +43,29 @@ namespace gdb You could wrap it by writing the wrapped form: - ssize_t ret = gdb::handle_eintr<ssize_t> (-1, ::write, pipe[1], "+", 1); + ssize_t ret = gdb::handle_eintr (-1, ::write, pipe[1], "+", 1); - The RET typename specifies the return type of the wrapped system call, which - is typically int or ssize_t. The R argument specifies the failure value - indicating the interrupted syscall when calling the F function with - the A... arguments. */ + ERRVAL specifies the failure value indicating that the call to the + F function with ARGS... arguments was possibly interrupted with a + signal. */ -template <typename Ret, typename Fun, typename... Args> -inline Ret handle_eintr (const Ret &R, const Fun &F, const Args &... A) +template<typename ErrorValType, typename Fun, typename... Args> +inline auto +handle_eintr (ErrorValType errval, const Fun &f, const Args &... args) + -> decltype (f (args...)) { - Ret ret; + decltype (f (args...)) ret; + do { errno = 0; - ret = F (A...); + ret = f (args...); } - while (ret == R && errno == EINTR); + while (ret == errval && errno == EINTR); + return ret; } -} + +} /* namespace gdb */ #endif /* GDBSUPPORT_EINTR_H */ |