diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2013-11-21 09:14:46 +0100 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-11-21 16:28:08 -0800 |
commit | fcb6bf43a4af27d94f34bc00ca46678aa5d12d46 (patch) | |
tree | f8fa77bc964e9d7def886af9b7b988e809a7d503 /src | |
parent | f86c39058aa20de2c2ca352b27b35ddd14c811e0 (diff) | |
download | weston-fcb6bf43a4af27d94f34bc00ca46678aa5d12d46.tar.gz |
logind: change to -1+errno
Set errno and return -1 in public API calls like all other weston code
does. Most systemd+dbus calls return negative error-codes instead of -1
and setting errno. Thus, we need to explicitly set errno before returning.
Also note that we must set errno _after_ the cleanup path. Calling
functions like close() in the cleanup path might overwrite errno (which is
not what we want). So protect errno until the final return -1;
Diffstat (limited to 'src')
-rw-r--r-- | src/logind-util.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/logind-util.c b/src/logind-util.c index a58265c8..5d163a69 100644 --- a/src/logind-util.c +++ b/src/logind-util.c @@ -169,9 +169,11 @@ weston_logind_open(struct weston_logind *wl, const char *path, r = stat(path, &st); if (r < 0) - return -errno; - if (!S_ISCHR(st.st_mode)) - return -ENODEV; + return -1; + if (!S_ISCHR(st.st_mode)) { + errno = ENODEV; + return -1; + } fd = weston_logind_take_device(wl, major(st.st_rdev), minor(st.st_rdev), NULL); @@ -221,7 +223,8 @@ err_close: close(fd); weston_logind_release_device(wl, major(st.st_rdev), minor(st.st_rdev)); - return r; + errno = -r; + return -1; } WL_EXPORT void @@ -264,7 +267,7 @@ weston_logind_activate_vt(struct weston_logind *wl, int vt) r = ioctl(wl->vt, VT_ACTIVATE, vt); if (r < 0) - return -errno; + return -1; return 0; } @@ -899,7 +902,8 @@ err_wl: free(wl); err_out: weston_log("logind: cannot setup systemd-logind helper (%d), using legacy fallback\n", r); - return r; + errno = -r; + return -1; } WL_EXPORT void |