]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/libudev/libudev-private.h
565da326f5d9ea9e157842460a4f1ba4d49f0c59
[thirdparty/systemd.git] / src / libudev / libudev-private.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 /***
5 This file is part of systemd.
6
7 Copyright 2008-2012 Kay Sievers <kay@vrfy.org>
8
9 systemd is free software; you can redistribute it and/or modify it
10 under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation; either version 2.1 of the License, or
12 (at your option) any later version.
13
14 systemd is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with systemd; If not, see <http://www.gnu.org/licenses/>.
21 ***/
22
23 #include <signal.h>
24 #include <stdbool.h>
25 #include <stdint.h>
26
27 #include "libudev.h"
28
29 #include "macro.h"
30 #include "mkdir.h"
31 #include "strxcpyx.h"
32 #include "util.h"
33
34 #define READ_END 0
35 #define WRITE_END 1
36
37 /* libudev.c */
38 int udev_get_rules_path(struct udev *udev, char **path[], usec_t *ts_usec[]);
39
40 /* libudev-device.c */
41 struct udev_device *udev_device_new_from_nulstr(struct udev *udev, char *nulstr, ssize_t buflen);
42 struct udev_device *udev_device_new_from_synthetic_event(struct udev *udev, const char *syspath, const char *action);
43 struct udev_device *udev_device_shallow_clone(struct udev_device *old_device);
44 struct udev_device *udev_device_clone_with_db(struct udev_device *old_device);
45 int udev_device_copy_properties(struct udev_device *dst, struct udev_device *src);
46 mode_t udev_device_get_devnode_mode(struct udev_device *udev_device);
47 uid_t udev_device_get_devnode_uid(struct udev_device *udev_device);
48 gid_t udev_device_get_devnode_gid(struct udev_device *udev_device);
49 int udev_device_rename(struct udev_device *udev_device, const char *new_name);
50 int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink);
51 void udev_device_cleanup_devlinks_list(struct udev_device *udev_device);
52 int udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value);
53 char **udev_device_get_properties_envp(struct udev_device *udev_device);
54 ssize_t udev_device_get_properties_monitor_buf(struct udev_device *udev_device, const char **buf);
55 const char *udev_device_get_devpath_old(struct udev_device *udev_device);
56 const char *udev_device_get_id_filename(struct udev_device *udev_device);
57 void udev_device_set_is_initialized(struct udev_device *udev_device);
58 int udev_device_add_tag(struct udev_device *udev_device, const char *tag);
59 void udev_device_remove_tag(struct udev_device *udev_device, const char *tag);
60 void udev_device_cleanup_tags_list(struct udev_device *udev_device);
61 usec_t udev_device_get_usec_initialized(struct udev_device *udev_device);
62 void udev_device_ensure_usec_initialized(struct udev_device *udev_device, struct udev_device *old_device);
63 int udev_device_get_devlink_priority(struct udev_device *udev_device);
64 int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio);
65 int udev_device_get_watch_handle(struct udev_device *udev_device);
66 int udev_device_set_watch_handle(struct udev_device *udev_device, int handle);
67 int udev_device_get_ifindex(struct udev_device *udev_device);
68 void udev_device_set_info_loaded(struct udev_device *device);
69 bool udev_device_get_db_persist(struct udev_device *udev_device);
70 void udev_device_set_db_persist(struct udev_device *udev_device);
71 void udev_device_read_db(struct udev_device *udev_device);
72
73 /* libudev-device-private.c */
74 int udev_device_update_db(struct udev_device *udev_device);
75 int udev_device_delete_db(struct udev_device *udev_device);
76 int udev_device_tag_index(struct udev_device *dev, struct udev_device *dev_old, bool add);
77
78 /* libudev-monitor.c - netlink/unix socket communication */
79 int udev_monitor_disconnect(struct udev_monitor *udev_monitor);
80 int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender);
81 int udev_monitor_send_device(struct udev_monitor *udev_monitor,
82 struct udev_monitor *destination, struct udev_device *udev_device);
83 struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const char *name, int fd);
84
85 /* libudev-list.c */
86 struct udev_list_node {
87 struct udev_list_node *next, *prev;
88 };
89 struct udev_list {
90 struct udev *udev;
91 struct udev_list_node node;
92 struct udev_list_entry **entries;
93 unsigned int entries_cur;
94 unsigned int entries_max;
95 bool unique;
96 };
97 void udev_list_node_init(struct udev_list_node *list);
98 int udev_list_node_is_empty(struct udev_list_node *list);
99 void udev_list_node_append(struct udev_list_node *new, struct udev_list_node *list);
100 void udev_list_node_remove(struct udev_list_node *entry);
101 #define udev_list_node_foreach(node, list) \
102 for (node = (list)->next; \
103 node != list; \
104 node = (node)->next)
105 #define udev_list_node_foreach_safe(node, tmp, list) \
106 for (node = (list)->next, tmp = (node)->next; \
107 node != list; \
108 node = tmp, tmp = (tmp)->next)
109 void udev_list_init(struct udev *udev, struct udev_list *list, bool unique);
110 void udev_list_cleanup(struct udev_list *list);
111 struct udev_list_entry *udev_list_get_entry(struct udev_list *list);
112 struct udev_list_entry *udev_list_entry_add(struct udev_list *list, const char *name, const char *value);
113 void udev_list_entry_delete(struct udev_list_entry *entry);
114 int udev_list_entry_get_num(struct udev_list_entry *list_entry);
115 void udev_list_entry_set_num(struct udev_list_entry *list_entry, int num);
116 #define udev_list_entry_foreach_safe(entry, tmp, first) \
117 for (entry = first, tmp = udev_list_entry_get_next(entry); \
118 entry != NULL; \
119 entry = tmp, tmp = udev_list_entry_get_next(tmp))
120
121 /* libudev-queue.c */
122 unsigned long long int udev_get_kernel_seqnum(struct udev *udev);
123 int udev_queue_read_seqnum(FILE *queue_file, unsigned long long int *seqnum);
124 ssize_t udev_queue_read_devpath(FILE *queue_file, char *devpath, size_t size);
125 ssize_t udev_queue_skip_devpath(FILE *queue_file);
126
127 /* libudev-queue-private.c */
128 struct udev_queue_export *udev_queue_export_new(struct udev *udev);
129 struct udev_queue_export *udev_queue_export_unref(struct udev_queue_export *udev_queue_export);
130 void udev_queue_export_cleanup(struct udev_queue_export *udev_queue_export);
131 int udev_queue_export_device_queued(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device);
132 int udev_queue_export_device_finished(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device);
133
134 /* libudev-util.c */
135 #define UTIL_PATH_SIZE 1024
136 #define UTIL_NAME_SIZE 512
137 #define UTIL_LINE_SIZE 16384
138 #define UDEV_ALLOWED_CHARS_INPUT "/ $%?,"
139 int util_log_priority(const char *priority);
140 size_t util_path_encode(const char *src, char *dest, size_t size);
141 int util_replace_whitespace(const char *str, char *to, size_t len);
142 int util_replace_chars(char *str, const char *white);
143 unsigned int util_string_hash32(const char *key);
144 uint64_t util_string_bloom64(const char *str);
145
146 /* libudev-util-private.c */
147 int util_resolve_subsys_kernel(struct udev *udev, const char *string, char *result, size_t maxsize, int read_value);