Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0+ */ 2 : #pragma once 3 : 4 : /* 5 : * Copyright © 2003 Greg Kroah-Hartman <greg@kroah.com> 6 : */ 7 : 8 : #include "sd-device.h" 9 : #include "sd-netlink.h" 10 : 11 : #include "hashmap.h" 12 : #include "macro.h" 13 : #include "udev-rules.h" 14 : #include "udev-util.h" 15 : #include "util.h" 16 : 17 : #define READ_END 0 18 : #define WRITE_END 1 19 : 20 : typedef struct UdevEvent { 21 : sd_device *dev; 22 : sd_device *dev_parent; 23 : sd_device *dev_db_clone; 24 : char *name; 25 : char *program_result; 26 : mode_t mode; 27 : uid_t uid; 28 : gid_t gid; 29 : OrderedHashmap *seclabel_list; 30 : OrderedHashmap *run_list; 31 : usec_t exec_delay_usec; 32 : usec_t birth_usec; 33 : sd_netlink *rtnl; 34 : unsigned builtin_run; 35 : unsigned builtin_ret; 36 : UdevRuleEscapeType esc:8; 37 : bool inotify_watch:1; 38 : bool inotify_watch_final:1; 39 : bool group_final:1; 40 : bool owner_final:1; 41 : bool mode_final:1; 42 : bool name_final:1; 43 : bool devlink_final:1; 44 : bool run_final:1; 45 : } UdevEvent; 46 : 47 : UdevEvent *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl); 48 : UdevEvent *udev_event_free(UdevEvent *event); 49 0 : DEFINE_TRIVIAL_CLEANUP_FUNC(UdevEvent*, udev_event_free); 50 : 51 : ssize_t udev_event_apply_format(UdevEvent *event, 52 : const char *src, char *dest, size_t size, 53 : bool replace_whitespace); 54 : int udev_check_format(const char *value, size_t *offset, const char **hint); 55 : int udev_event_spawn(UdevEvent *event, 56 : usec_t timeout_usec, 57 : bool accept_failure, 58 : const char *cmd, char *result, size_t ressize); 59 : int udev_event_execute_rules(UdevEvent *event, 60 : usec_t timeout_usec, 61 : Hashmap *properties_list, 62 : UdevRules *rules); 63 : void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec); 64 : 65 0 : static inline usec_t udev_warn_timeout(usec_t timeout_usec) { 66 0 : return DIV_ROUND_UP(timeout_usec, 3); 67 : }