mirror of
https://github.com/systemd/systemd.git
synced 2024-11-27 12:13:33 +08:00
macro: add new helper RET_NERRNO()
This new helper converts libc style syscall return values into systemd-kernel (actually: kernel style) negative errno values. It's implemented as macro-like inline function, and propagates return values >= 0 as themselves and returns -errno for negative error returns. THis is supposed to be little more than syntactic sugar so that we can reduce a lot of (short, but still) boilerplate code whever we convert libc style error handling into our own. As discussed here: https://github.com/systemd/systemd/pull/21326#discussion_r748413537
This commit is contained in:
parent
cb3763d57b
commit
ef470ffa23
@ -31,6 +31,29 @@ static inline int negative_errno(void) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
static inline int RET_NERRNO(int ret) {
|
||||
|
||||
/* Helper to wrap system calls in to make them return negative errno errors. This brings system call
|
||||
* error handling in sync with how we usually handle errors in our own code, i.e. with immediate
|
||||
* returning of negative errno. Usage is like this:
|
||||
*
|
||||
* …
|
||||
* r = RET_NERRNO(unlink(t));
|
||||
* …
|
||||
*
|
||||
* or
|
||||
*
|
||||
* …
|
||||
* fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
|
||||
* …
|
||||
*/
|
||||
|
||||
if (ret < 0)
|
||||
return negative_errno();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline const char *strerror_safe(int error) {
|
||||
/* 'safe' here does NOT mean thread safety. */
|
||||
return strerror(abs(error)); /* lgtm [cpp/potentially-dangerous-function] */
|
||||
|
Loading…
Reference in New Issue
Block a user