2 * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2013 John Crispin <blogic@openwrt.org>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License version 2.1
7 * as published by the Free Software Foundation
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.
15 #define _DEFAULT_SOURCE
18 #include <sys/types.h>
19 #include <sys/sysmacros.h>
30 #include "libblkid-tiny.h"
34 static char buf
[PATH_MAX
+ 1];
35 static char buf2
[PATH_MAX
];
36 static unsigned int mode
= 0600;
38 static void make_dev(const char *path
, bool block
, int major
, int minor
)
40 unsigned int _mode
= mode
| (block
? S_IFBLK
: S_IFCHR
);
42 mknod(path
, _mode
, makedev(major
, minor
));
45 static void find_devs(bool block
)
47 char *path
= block
? "/sys/dev/block" : "/sys/dev/char";
55 path
= buf2
+ sprintf(buf2
, "%s/", path
);
56 while ((dp
= readdir(dir
)) != NULL
) {
58 int major
= 0, minor
= 0;
61 if (dp
->d_type
!= DT_LNK
)
64 if (sscanf(dp
->d_name
, "%d:%d", &major
, &minor
) != 2)
67 strcpy(path
, dp
->d_name
);
68 len
= readlink(buf2
, buf
, sizeof(buf
));
69 if (len
<= 0 || len
== sizeof(buf
))
74 c
= strrchr(buf
, '/');
80 make_dev(c
, block
, major
, minor
);