commit fad61ad

illiliti  ·  2021-10-05 00:39:44 +0000 UTC
parent 954ac51
launch: Use getdevmajor for NetBSD

https://man.netbsd.org/getdevmajor.3
1 files changed,  +6, -42
+6, -42
 1@@ -20,54 +20,18 @@
 2  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 3  * SOFTWARE.
 4  */
 5-#include <sys/types.h>
 6-#include <sys/sysctl.h>
 7-#include <stdio.h>
 8+#include <sys/stat.h>
 9 #include <stdlib.h>
10-#include <string.h>
11 #include "devmajor.h"
12 
13-static int
14-sysctl_devmajor(const char *devname)
15-{
16-	static int name[] = { CTL_KERN, KERN_DRIVERS };
17-	struct kinfo_drivers *drivers = NULL;
18-	size_t i, len, newlen;
19-	int major;
20-
21-	if (sysctl(name, 2, NULL, &len, NULL, 0)) {
22-		perror("sysctl");
23-		goto fail;
24-	}
25-	if ((drivers = calloc(sizeof(struct kinfo_drivers), len)) == NULL) {
26-		perror("calloc");
27-		goto fail;
28-	}
29-	newlen = len;
30-	if (sysctl(name, 2, drivers, &newlen, NULL, 0)) {
31-		perror("sysctl");
32-		goto fail;
33-	}
34-	for (i = 0; i < len; ++i) {
35-		if (strcmp(devname, drivers[i].d_name) == 0) {
36-			major = drivers[i].d_cmajor;
37-			free(drivers);
38-			return major;
39-		}
40-	}
41-fail:
42-	free(drivers);
43-	return -1;
44-}
45-
46 bool
47 device_is_input(dev_t rdev)
48 {
49-	if (major(rdev) == sysctl_devmajor("wskbd"))
50+	if (major(rdev) == getdevmajor("wskbd", S_IFCHR))
51 		return true;
52-	if (major(rdev) == sysctl_devmajor("wsmouse"))
53+	if (major(rdev) == getdevmajor("wsmouse", S_IFCHR))
54 		return true;
55-	if (major(rdev) == sysctl_devmajor("wsmux"))
56+	if (major(rdev) == getdevmajor("wsmux", S_IFCHR))
57 		return true;
58 	return false;
59 }
60@@ -75,12 +39,12 @@ device_is_input(dev_t rdev)
61 bool
62 device_is_tty(dev_t rdev)
63 {
64-	return major(rdev) == sysctl_devmajor("wsdisplay");
65+	return major(rdev) == getdevmajor("wsdisplay", S_IFCHR);
66 }
67 
68 bool
69 device_is_drm(dev_t rdev)
70 {
71-	return major(rdev) == sysctl_devmajor("drm");
72+	return major(rdev) == getdevmajor("drm", S_IFCHR);
73 }
74