]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libudev/libudev-device-private.c
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / libudev / libudev-device-private.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
88a6477e
KS
2/***
3 This file is part of systemd.
4
5 Copyright 2008-2012 Kay Sievers <kay@vrfy.org>
f4ac4d1a 6 Copyright 2015 Tom Gundersen <teg@jklm.no>
88a6477e
KS
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
8dfc8dbe 21
b4bbcaa9
TA
22#include "libudev.h"
23
f4ac4d1a 24#include "device-private.h"
07630cea
LP
25#include "libudev-device-internal.h"
26#include "libudev-private.h"
f4ac4d1a
TG
27
28int udev_device_tag_index(struct udev_device *udev_device, struct udev_device *udev_device_old, bool add) {
29 sd_device *device_old = NULL;
30 int r;
31
32 assert(udev_device);
33
34 if (udev_device_old)
35 device_old = udev_device_old->device;
36
37 r = device_tag_index(udev_device->device, device_old, add);
38 if (r < 0)
39 return r;
40
41 return 0;
42}
43
44int udev_device_update_db(struct udev_device *udev_device) {
45 int r;
46
47 assert(udev_device);
48
49 r = device_update_db(udev_device->device);
50 if (r < 0)
51 return r;
52
53 return 0;
54}
55
56int udev_device_delete_db(struct udev_device *udev_device) {
57 int r;
58
59 assert(udev_device);
60
61 r = device_delete_db(udev_device->device);
62 if (r < 0)
63 return r;
64
65 return 0;
66}
67
68int udev_device_get_ifindex(struct udev_device *udev_device) {
69 int r, ifindex;
70
71 assert(udev_device);
72
73 r = sd_device_get_ifindex(udev_device->device, &ifindex);
74 if (r < 0)
75 return r;
76
77 return ifindex;
78}
79
80const char *udev_device_get_devpath_old(struct udev_device *udev_device) {
81 const char *devpath_old = NULL;
82 int r;
2b41e68a 83
f4ac4d1a
TG
84 assert(udev_device);
85
86 r = sd_device_get_property_value(udev_device->device, "DEVPATH_OLD", &devpath_old);
87 if (r < 0 && r != -ENOENT) {
88 errno = -r;
89 return NULL;
912541b0 90 }
f4ac4d1a
TG
91
92 return devpath_old;
c1dbe11d 93}
28460195 94
f4ac4d1a
TG
95mode_t udev_device_get_devnode_mode(struct udev_device *udev_device) {
96 mode_t mode;
97 int r;
98
99 assert(udev_device);
100
101 r = device_get_devnode_mode(udev_device->device, &mode);
102 if (r < 0) {
103 errno = -r;
104 return 0;
912541b0
KS
105 }
106
f4ac4d1a
TG
107 return mode;
108}
912541b0 109
f4ac4d1a
TG
110uid_t udev_device_get_devnode_uid(struct udev_device *udev_device) {
111 uid_t uid;
112 int r;
113
114 assert(udev_device);
115
116 r = device_get_devnode_uid(udev_device->device, &uid);
117 if (r < 0) {
118 errno = -r;
119 return 0;
120 }
121
122 return uid;
28460195
KS
123}
124
f4ac4d1a
TG
125gid_t udev_device_get_devnode_gid(struct udev_device *udev_device) {
126 gid_t gid;
127 int r;
128
129 assert(udev_device);
130
131 r = device_get_devnode_gid(udev_device->device, &gid);
132 if (r < 0) {
133 errno = -r;
912541b0
KS
134 return 0;
135 }
136
f4ac4d1a
TG
137 return gid;
138}
139
140void udev_device_ensure_usec_initialized(struct udev_device *udev_device, struct udev_device *udev_device_old) {
f4ac4d1a
TG
141 assert(udev_device);
142
90b33a27
ZJS
143 device_ensure_usec_initialized(udev_device->device,
144 udev_device_old ? udev_device_old->device : NULL);
f4ac4d1a
TG
145}
146
147char **udev_device_get_properties_envp(struct udev_device *udev_device) {
148 char **envp;
149 int r;
150
151 assert(udev_device);
152
153 r = device_get_properties_strv(udev_device->device, &envp);
154 if (r < 0) {
155 errno = -r;
156 return NULL;
912541b0
KS
157 }
158
f4ac4d1a
TG
159 return envp;
160}
161
162ssize_t udev_device_get_properties_monitor_buf(struct udev_device *udev_device, const char **buf) {
163 const char *nulstr;
164 size_t len;
165 int r;
166
167 assert(udev_device);
168 assert(buf);
169
170 r = device_get_properties_nulstr(udev_device->device, (const uint8_t **)&nulstr, &len);
029f4f21 171 if (r < 0)
f4ac4d1a
TG
172 return r;
173
174 *buf = nulstr;
175
176 return len;
177}
178
179int udev_device_get_devlink_priority(struct udev_device *udev_device) {
180 int priority, r;
181
182 assert(udev_device);
183
184 r = device_get_devlink_priority(udev_device->device, &priority);
185 if (r < 0)
186 return r;
187
188 return priority;
189}
190
191int udev_device_get_watch_handle(struct udev_device *udev_device) {
192 int handle, r;
193
194 assert(udev_device);
195
196 r = device_get_watch_handle(udev_device->device, &handle);
197 if (r < 0)
198 return r;
199
200 return handle;
201}
202
203void udev_device_set_is_initialized(struct udev_device *udev_device) {
204 assert(udev_device);
205
206 device_set_is_initialized(udev_device->device);
207}
208
209int udev_device_rename(struct udev_device *udev_device, const char *name) {
210 int r;
211
212 assert(udev_device);
213
214 r = device_rename(udev_device->device, name);
215 if (r < 0)
216 return r;
217
912541b0 218 return 0;
ca999860
GKH
219}
220
f4ac4d1a
TG
221struct udev_device *udev_device_shallow_clone(struct udev_device *old_device) {
222 struct udev_device *device;
223 int r;
224
225 assert(old_device);
226
227 device = udev_device_new(old_device->udev);
228 if (!device)
229 return NULL;
230
231 r = device_shallow_clone(old_device->device, &device->device);
232 if (r < 0) {
233 udev_device_unref(device);
234 errno = -r;
235 return NULL;
236 }
237
238 return device;
239}
240
241struct udev_device *udev_device_clone_with_db(struct udev_device *udev_device_old) {
242 struct udev_device *udev_device;
243 int r;
244
245 assert(udev_device_old);
246
247 udev_device = udev_device_new(udev_device_old->udev);
248 if (!udev_device)
249 return NULL;
250
251 r = device_clone_with_db(udev_device_old->device, &udev_device->device);
252 if (r < 0) {
253 udev_device_unref(udev_device);
254 errno = -r;
255 return NULL;
256 }
257
258 return udev_device;
259}
260
261struct udev_device *udev_device_new_from_nulstr(struct udev *udev, char *nulstr, ssize_t buflen) {
262 struct udev_device *device;
263 int r;
264
265 device = udev_device_new(udev);
266 if (!device)
267 return NULL;
268
269 r = device_new_from_nulstr(&device->device, (uint8_t*)nulstr, buflen);
270 if (r < 0) {
271 udev_device_unref(device);
272 errno = -r;
273 return NULL;
274 }
275
276 return device;
277}
278
279struct udev_device *udev_device_new_from_synthetic_event(struct udev *udev, const char *syspath, const char *action) {
280 struct udev_device *device;
281 int r;
282
283 device = udev_device_new(udev);
284 if (!device)
285 return NULL;
286
287 r = device_new_from_synthetic_event(&device->device, syspath, action);
288 if (r < 0) {
289 udev_device_unref(device);
290 errno = -r;
291 return NULL;
292 }
293
294 return device;
295}
296
297int udev_device_copy_properties(struct udev_device *udev_device_dst, struct udev_device *udev_device_src) {
298 int r;
299
300 assert(udev_device_dst);
301 assert(udev_device_src);
302
303 r = device_copy_properties(udev_device_dst->device, udev_device_src->device);
304 if (r < 0)
305 return r;
306
307 return 0;
308}
309
310const char *udev_device_get_id_filename(struct udev_device *udev_device) {
311 const char *filename;
312 int r;
313
314 assert(udev_device);
315
316 r = device_get_id_filename(udev_device->device, &filename);
317 if (r < 0) {
318 errno = -r;
319 return NULL;
320 }
321
322 return filename;
323}
324
325int udev_device_set_watch_handle(struct udev_device *udev_device, int handle) {
912541b0 326
f4ac4d1a
TG
327 assert(udev_device);
328
329 device_set_watch_handle(udev_device->device, handle);
330
331 return 0;
332}
333
334void udev_device_set_db_persist(struct udev_device *udev_device) {
335 assert(udev_device);
336
337 device_set_db_persist(udev_device->device);
338}
339
340int udev_device_set_devlink_priority(struct udev_device *udev_device, int priority) {
341 assert(udev_device);
342
343 device_set_devlink_priority(udev_device->device, priority);
3c0bab4a 344
912541b0 345 return 0;
8e41d35d 346}
f4ac4d1a
TG
347
348int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink) {
349 int r;
350
351 assert(udev_device);
352
353 r = device_add_devlink(udev_device->device, devlink);
354 if (r < 0)
355 return r;
356
357 return 0;
358}
359
360int udev_device_add_property(struct udev_device *udev_device, const char *property, const char *value) {
361 int r;
362
363 assert(udev_device);
364
365 r = device_add_property(udev_device->device, property, value);
366 if (r < 0)
367 return r;
368
369 return 0;
370}
371
372int udev_device_add_tag(struct udev_device *udev_device, const char *tag) {
373 int r;
374
375 assert(udev_device);
376
377 r = device_add_tag(udev_device->device, tag);
378 if (r < 0)
379 return r;
380
381 return 0;
382}
383
384void udev_device_remove_tag(struct udev_device *udev_device, const char *tag) {
385 assert(udev_device);
386
387 device_remove_tag(udev_device->device, tag);
388}
389
390void udev_device_cleanup_tags_list(struct udev_device *udev_device) {
391 assert(udev_device);
392
393 device_cleanup_tags(udev_device->device);
394}
395
396void udev_device_cleanup_devlinks_list(struct udev_device *udev_device) {
397 assert(udev_device);
398
399 device_cleanup_devlinks(udev_device->device);
400}
401
402void udev_device_set_info_loaded(struct udev_device *udev_device) {
403 assert(udev_device);
404
405 device_seal(udev_device->device);
406}
107f2e25
TG
407
408void udev_device_read_db(struct udev_device *udev_device) {
409 assert(udev_device);
410
411 device_read_db_force(udev_device->device);
412}