summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-11-21 09:14:46 +0100
committerKristian Høgsberg <krh@bitplanet.net>2013-11-21 16:28:08 -0800
commitfcb6bf43a4af27d94f34bc00ca46678aa5d12d46 (patch)
treef8fa77bc964e9d7def886af9b7b988e809a7d503 /src
parentf86c39058aa20de2c2ca352b27b35ddd14c811e0 (diff)
downloadweston-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.c16
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