1 #ifndef LIBUDEV_H_
2 #define LIBUDEV_H_
3 
4 #include <sys/types.h>
5 #include <stdarg.h>
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 struct udev;
12 struct udev_list_entry;
13 struct udev_device;
14 struct udev_monitor;
15 struct udev_enumerate;
16 struct udev_queue;
17 struct udev_hwdb;
18 
19 struct udev *udev_new(void);
20 struct udev *udev_ref(struct udev *udev);
21 void udev_unref(struct udev *udev);
22 const char *udev_get_dev_path(struct udev *udev);
23 void *udev_get_userdata(struct udev *udev);
24 void udev_set_userdata(struct udev *udev, void *userdata);
25 void udev_set_log_fn(struct udev *udev, void (*log_fn)(struct udev *udev,
26     int priority, const char *file, int line, const char *fn,
27     const char *format, va_list args));
28 void udev_set_log_priority(struct udev *udev, int priority);
29 int udev_get_log_priority(struct udev *udev);
30 
31 struct udev_device *udev_device_new_from_syspath(struct udev *udev,
32     const char *syspath);
33 struct udev_device *udev_device_new_from_devnum(struct udev *udev,
34     char type, dev_t devnum);
35 struct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev,
36     const char *subsystem, const char *sysname);
37 struct udev_device *udev_device_new_from_device_id(struct udev *udev,
38     const char *id);
39 struct udev_device *udev_device_new_from_environment(struct udev *udev);
40 struct udev_device *udev_device_ref(struct udev_device *udev_device);
41 void udev_device_unref(struct udev_device *udev_device);
42 char const *udev_device_get_devnode(struct udev_device *udev_device);
43 char const *udev_device_get_devpath(struct udev_device *udev_device);
44 char const *udev_device_get_property_value(struct udev_device *udev_device,
45     char const *property);
46 char const *udev_device_get_sysattr_value(
47     struct udev_device *udev_device, const char *sysattr);
48 int udev_device_set_sysattr_value(
49     struct udev_device *udev_device, const char *sysattr, const char *value);
50 struct udev_list_entry * udev_device_get_properties_list_entry(
51     struct udev_device *udev_device);
52 struct udev_list_entry * udev_device_get_sysattr_list_entry(
53     struct udev_device *udev_device);
54 struct udev_list_entry * udev_device_get_tags_list_entry(
55     struct udev_device *udev_device);
56 int udev_device_has_tag(struct udev_device *udev_device, const char *tag);
57 struct udev_list_entry * udev_device_get_devlinks_list_entry(
58     struct udev_device *udev_device);
59 struct udev *udev_device_get_udev(struct udev_device *udev_device);
60 const char *udev_device_get_syspath(struct udev_device *udev_device);
61 const char *udev_device_get_sysname(struct udev_device *udev_device);
62 const char *udev_device_get_subsystem(struct udev_device *udev_device);
63 struct udev_device *udev_device_get_parent(struct udev_device *udev_device);
64 struct udev_device *udev_device_get_parent_with_subsystem_devtype(
65     struct udev_device *udev_device, const char *subsystem, const char *devtype);
66 int udev_device_get_is_initialized(struct udev_device *udev_device);
67 dev_t udev_device_get_devnum(struct udev_device *udev_device);
68 const char *udev_device_get_devtype(struct udev_device *udev_device);
69 const char *udev_device_get_driver(struct udev_device *udev_device);
70 const char *udev_device_get_sysnum(struct udev_device *udev_device);
71 unsigned long long int udev_device_get_seqnum(struct udev_device *udev_device);
72 unsigned long long int udev_device_get_usec_since_initialized(
73     struct udev_device *udev_device);
74 
75 struct udev_enumerate *udev_enumerate_new(struct udev *udev);
76 struct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate);
77 void udev_enumerate_unref(struct udev_enumerate *udev_enumerate);
78 int udev_enumerate_add_match_subsystem(
79     struct udev_enumerate *udev_enumerate, const char *subsystem);
80 int udev_enumerate_add_nomatch_subsystem(
81     struct udev_enumerate *udev_enumerate, const char *subsystem);
82 int udev_enumerate_add_match_sysname(
83     struct udev_enumerate *udev_enumerate, const char *sysname);
84 int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate,
85     const char *sysattr, const char *value);
86 int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate,
87     const char *sysattr, const char *value);
88 int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate,
89     const char *property, const char *value);
90 int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate,
91     const char *tag);
92 int udev_enumerate_add_match_parent(struct udev_enumerate *udev_enumerate,
93     struct udev_device *parent);
94 int udev_enumerate_add_match_is_initialized(
95     struct udev_enumerate *udev_enumerate);
96 int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate);
97 int udev_enumerate_scan_subsystems(struct udev_enumerate *udev_enumerate);
98 struct udev_list_entry *udev_enumerate_get_list_entry(
99     struct udev_enumerate *udev_enumerate);
100 int udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate,
101     const char *syspath);
102 struct udev *udev_enumerate_get_udev(struct udev_enumerate *udev_enumerate);
103 
104 struct udev_list_entry *udev_list_entry_get_next(
105     struct udev_list_entry *list_entry);
106 const char *udev_list_entry_get_name(
107     struct udev_list_entry *list_entry);
108 const char *udev_list_entry_get_value(struct udev_list_entry *list_entry);
109 struct udev_list_entry *udev_list_entry_get_by_name(
110     struct udev_list_entry *list_entry, const char *name);
111 #define udev_list_entry_foreach(list_entry, first_entry)		\
112 	for (list_entry = first_entry;					\
113 	     list_entry != NULL;					\
114 	     list_entry = udev_list_entry_get_next(list_entry))
115 
116 struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev,
117     const char *name);
118 struct udev_monitor *udev_monitor_ref(struct udev_monitor *um);
119 void udev_monitor_unref(struct udev_monitor *udev_monitor);
120 int udev_monitor_filter_add_match_subsystem_devtype(
121     struct udev_monitor *udev_monitor, const char *subsystem,
122     const char *devtype);
123 int udev_monitor_filter_add_match_tag(struct udev_monitor *udev_monitor,
124     const char *tag);
125 int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor);
126 int udev_monitor_get_fd(struct udev_monitor *udev_monitor);
127 struct udev_device *udev_monitor_receive_device(
128     struct udev_monitor *udev_monitor);
129 const char *udev_device_get_action(struct udev_device *udev_device);
130 struct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor);
131 int udev_monitor_set_receive_buffer_size(struct udev_monitor *um, int size);
132 int udev_monitor_filter_update(struct udev_monitor *udev_monitor);
133 int udev_monitor_filter_remove(struct udev_monitor *udev_monitor);
134 
135 struct udev_queue *udev_queue_ref(struct udev_queue *udev_queue);
136 struct udev_queue *udev_queue_unref(struct udev_queue *udev_queue);
137 struct udev *udev_queue_get_udev(struct udev_queue *udev_queue);
138 struct udev_queue *udev_queue_new(struct udev *udev);
139 unsigned long long int udev_queue_get_kernel_seqnum(
140     struct udev_queue *udev_queue);
141 unsigned long long int udev_queue_get_udev_seqnum(
142     struct udev_queue *udev_queue);
143 int udev_queue_get_udev_is_active(struct udev_queue *udev_queue);
144 int udev_queue_get_queue_is_empty(struct udev_queue *udev_queue);
145 int udev_queue_get_seqnum_is_finished(struct udev_queue *udev_queue,
146     unsigned long long int seqnum);
147 int udev_queue_get_seqnum_sequence_is_finished(struct udev_queue *udev_queue,
148     unsigned long long int start, unsigned long long int end);
149 int udev_queue_get_fd(struct udev_queue *udev_queue);
150 int udev_queue_flush(struct udev_queue *udev_queue);
151 struct udev_list_entry *udev_queue_get_queued_list_entry(
152     struct udev_queue *udev_queue);
153 
154 struct udev_hwdb *udev_hwdb_new(struct udev *udev);
155 struct udev_hwdb *udev_hwdb_ref(struct udev_hwdb *hwdb);
156 struct udev_hwdb *udev_hwdb_unref(struct udev_hwdb *hwdb);
157 struct udev_list_entry *udev_hwdb_get_properties_list_entry(
158     struct udev_hwdb *hwdb, const char *modalias, unsigned int flags);
159 
160 int udev_util_encode_string(const char *str, char *str_enc, size_t len);
161 
162 #ifdef __cplusplus
163 } /* extern "C" */
164 #endif
165 
166 #endif /* LIBUDEV_H_ */
167