#include <sys/types.h>
#include "sd-device.h"
+#include "sd-daemon.h"
#include "alloc-util.h"
#include "bus-util.h"
#include "fd-util.h"
+#include "logind-session-dbus.h"
#include "logind-session-device.h"
#include "missing.h"
#include "parse-util.h"
-#include "sd-daemon.h"
#include "util.h"
enum SessionDeviceNotifications {
case DEVICE_TYPE_UNKNOWN:
default:
- /* fallback for devices wihout synchronizations */
+ /* fallback for devices without synchronizations */
break;
}
switch (sd->type) {
case DEVICE_TYPE_DRM:
- if (sd->fd < 0) {
- log_error("Failed to re-activate DRM fd, as the fd was lost (maybe logind restart went wrong?)");
- return -EBADF;
- }
+ if (sd->fd < 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EBADF),
+ "Failed to re-activate DRM fd, as the fd was lost (maybe logind restart went wrong?)");
/* Device is kept open. Simply call drmSetMaster() and hope there is no-one else. In case it fails, we
* keep the device paused. Maybe at some point we have a drmStealMaster(). */
sd_device_get_subsystem(dev, &subsystem) < 0)
return type;
- if (streq_ptr(subsystem, "drm")) {
+ if (streq(subsystem, "drm")) {
if (startswith(sysname, "card"))
type = DEVICE_TYPE_DRM;
- } else if (streq_ptr(subsystem, "input")) {
+ } else if (streq(subsystem, "input")) {
if (startswith(sysname, "event"))
type = DEVICE_TYPE_EVDEV;
}
static int session_device_verify(SessionDevice *sd) {
_cleanup_(sd_device_unrefp) sd_device *p = NULL;
+ const char *sp, *node;
sd_device *dev;
- const char *sp = NULL, *node;
int r;
- if (sd_device_new_from_devnum(&p, 'c', sd->dev) < 0)
- return -ENODEV;
+ r = sd_device_new_from_devnum(&p, 'c', sd->dev);
+ if (r < 0)
+ return r;
dev = p;
- (void) sd_device_get_syspath(dev, &sp);
- if (sd_device_get_devname(dev, &node) < 0)
+ if (sd_device_get_syspath(dev, &sp) < 0 ||
+ sd_device_get_devname(dev, &node) < 0)
return -EINVAL;
/* detect device type so we can find the correct sysfs parent */
assert(sd);
/* Make sure to remove the pushed fd. */
- if (sd->pushed_fd) {
- _cleanup_free_ char *m = NULL;
- const char *id;
- int r;
-
- /* Session ID does not contain separators. */
- id = sd->session->id;
- assert(*(id + strcspn(id, "-\n")) == '\0');
-
- r = asprintf(&m, "FDSTOREREMOVE=1\n"
- "FDNAME=session-%s-device-%u-%u\n",
- id, major(sd->dev), minor(sd->dev));
- if (r >= 0)
- (void) sd_notify(false, m);
- }
+ if (sd->pushed_fd)
+ (void) sd_notifyf(false,
+ "FDSTOREREMOVE=1\n"
+ "FDNAME=session-%s-device-%u-%u",
+ sd->session->id, major(sd->dev), minor(sd->dev));
session_device_stop(sd);
session_device_notify(sd, SESSION_DEVICE_RELEASE);
}
}
-unsigned int session_device_try_pause_all(Session *s) {
+unsigned session_device_try_pause_all(Session *s) {
unsigned num_pending = 0;
SessionDevice *sd;
Iterator i;