logind: change to -1+errno
authorDavid Herrmann <dh.herrmann@gmail.com>
Thu, 21 Nov 2013 08:14:46 +0000 (09:14 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 22 Nov 2013 00:28:08 +0000 (16:28 -0800)
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;

src/logind-util.c

index a58265c..5d163a6 100644 (file)
@@ -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