X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fdevice.h;h=9f46e0895300b642beb9ad37986709d12842e297;hp=3c4604f60ef8fc1f80465e3461fb4778a6f821f3;hb=3164e3cbc50b8754c51f1fdeda7a7d6cedcc39b6;hpb=f274ece0f76b5709408821e317e87aef76123db6 diff --git a/src/core/device.h b/src/core/device.h index 3c4604f60..9f46e0895 100644 --- a/src/core/device.h +++ b/src/core/device.h @@ -23,26 +23,33 @@ typedef struct Device Device; -#include "unit.h" /* We simply watch devices, we cannot plug/unplug them. That * simplifies the state engine greatly */ typedef enum DeviceState { DEVICE_DEAD, - DEVICE_PLUGGED, + DEVICE_TENTATIVE, /* mounted or swapped, but not (yet) announced by udev */ + DEVICE_PLUGGED, /* announced by udev */ _DEVICE_STATE_MAX, _DEVICE_STATE_INVALID = -1 } DeviceState; +typedef enum DeviceFound { + DEVICE_NOT_FOUND = 0, + DEVICE_FOUND_UDEV = 1, + DEVICE_FOUND_MOUNT = 2, + DEVICE_FOUND_SWAP = 4, +} DeviceFound; + struct Device { Unit meta; char *sysfs; + DeviceFound found; /* In order to be able to distinguish dependencies on different device nodes we might end up creating multiple devices for the same sysfs path. We chain them up here. */ - LIST_FIELDS(struct Device, same_sysfs); DeviceState state; @@ -50,7 +57,7 @@ struct Device { extern const UnitVTable device_vtable; -void device_fd_event(Manager *m, int events); +const char* device_state_to_string(DeviceState i) _const_; +DeviceState device_state_from_string(const char *s) _pure_; -const char* device_state_to_string(DeviceState i); -DeviceState device_state_from_string(const char *s); +int device_found_node(Manager *m, const char *node, bool add, DeviceFound found, bool now);