]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/udev/udevadm-util.c
util-lib: split our string related calls from util.[ch] into its own file string...
[thirdparty/systemd.git] / src / udev / udevadm-util.c
CommitLineData
d6170d27
ZJS
1/*
2 * Copyright (C) 2008-2009 Kay Sievers <kay@vrfy.org>
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
07630cea 18#include "string-util.h"
d6170d27
ZJS
19#include "udevadm-util.h"
20
21struct udev_device *find_device(struct udev *udev,
22 const char *id,
23 const char *prefix) {
24
25 assert(udev);
26 assert(id);
27
28 if (prefix && !startswith(id, prefix))
63c372cb 29 id = strjoina(prefix, id);
d6170d27
ZJS
30
31 if (startswith(id, "/dev/")) {
32 struct stat statbuf;
33 char type;
34
35 if (stat(id, &statbuf) < 0)
36 return NULL;
37
38 if (S_ISBLK(statbuf.st_mode))
39 type = 'b';
40 else if (S_ISCHR(statbuf.st_mode))
41 type = 'c';
42 else
43 return NULL;
44
45 return udev_device_new_from_devnum(udev, type, statbuf.st_rdev);
46 } else if (startswith(id, "/sys/"))
47 return udev_device_new_from_syspath(udev, id);
48 else
49 return NULL;
50}