aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport/eintr.h
diff options
context:
space:
mode:
authorPedro Alves <pedro@palves.net>2020-09-08 17:34:41 +0100
committerPedro Alves <pedro@palves.net>2020-10-26 18:57:40 +0000
commitd744f0f9652ee8de839c09e4517b18c9b88aecb7 (patch)
tree8266ed1925a47e82c6f6bdc0e7825f1ac57c8a33 /gdbsupport/eintr.h
parent55c3ad8801359ecb166ff3c04c3bd14140f623a1 (diff)
downloadgdb-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/eintr.h')
-rw-r--r--gdbsupport/eintr.h26
1 files changed, 15 insertions, 11 deletions
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 */