X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fpath.h;h=04d43c8d512d3955509077b8ffa69ed3b2c29b85;hb=1124fe6f01b1d59d016c238026f20380f38d98dc;hp=21a7dc49348025211f5e7a44a1143df0e317b298;hpb=01f78473b104d28db0fa813414092bc6358ae521;p=elogind.git diff --git a/src/path.h b/src/path.h index 21a7dc493..04d43c8d5 100644 --- a/src/path.h +++ b/src/path.h @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ #ifndef foopathhfoo #define foopathhfoo @@ -31,41 +31,58 @@ typedef enum PathState { PATH_DEAD, PATH_WAITING, PATH_RUNNING, - PATH_MAINTAINANCE, + PATH_FAILED, _PATH_STATE_MAX, _PATH_STATE_INVALID = -1 } PathState; typedef enum PathType { PATH_EXISTS, + PATH_EXISTS_GLOB, PATH_DIRECTORY_NOT_EMPTY, PATH_CHANGED, + PATH_MODIFIED, _PATH_TYPE_MAX, _PATH_TYPE_INVALID = -1 } PathType; typedef struct PathSpec { - PathType type; char *path; + Watch watch; + + LIST_FIELDS(struct PathSpec, spec); + + PathType type; int inotify_fd; int primary_wd; + bool previous_exists; +} PathSpec; - Watch watch; +int path_spec_watch(PathSpec *s, Unit *u); +void path_spec_unwatch(PathSpec *s, Unit *u); +int path_spec_fd_event(PathSpec *s, uint32_t events); +void path_spec_done(PathSpec *s); - LIST_FIELDS(struct PathSpec, spec); -} PathSpec; +static inline bool path_spec_owns_inotify_fd(PathSpec *s, int fd) { + return s->inotify_fd == fd; +} struct Path { - Meta meta; + Unit meta; LIST_HEAD(PathSpec, specs); + UnitRef unit; + PathState state, deserialized_state; - Unit *unit; bool failure; + bool inotify_triggered; + + bool make_directory; + mode_t directory_mode; }; void path_unit_notify(Unit *u, UnitActiveState new_state);