summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_conf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r--sys/kern/kern_conf.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 1e344e3..fb15afd 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -42,6 +42,7 @@
#include <sys/conf.h>
#include <sys/vnode.h>
#include <sys/queue.h>
+#include <sys/ctype.h>
#include <machine/stdarg.h>
#define cdevsw_ALLOCSTART (NUMCDEVSW/2)
@@ -69,7 +70,8 @@ static LIST_HEAD(, specinfo) dev_hash[DEVT_HASH];
static LIST_HEAD(, specinfo) dev_free;
devfs_create_t *devfs_create_hook;
-devfs_remove_t *devfs_remove_hook;
+devfs_destroy_t *devfs_destroy_hook;
+int devfs_present;
static int free_devt;
SYSCTL_INT(_debug, OID_AUTO, free_devt, CTLFLAG_RW, &free_devt, 0, "");
@@ -352,8 +354,8 @@ make_dev_alias(dev_t pdev, char *fmt, ...)
void
destroy_dev(dev_t dev)
{
- if (devfs_remove_hook)
- devfs_remove_hook(dev);
+ if (devfs_destroy_hook)
+ devfs_destroy_hook(dev);
dev->si_drv1 = 0;
dev->si_drv2 = 0;
dev->si_devsw = 0;
@@ -381,3 +383,26 @@ devtoname(dev_t dev)
}
return (dev->si_name);
}
+
+int
+dev_stdclone(char *name, char **namep, char *stem, int *unit)
+{
+ int u, i;
+
+ if (bcmp(stem, name, strlen(stem)) != 0)
+ return (0);
+ i = strlen(stem);
+ if (!isdigit(name[i]))
+ return (0);
+ u = 0;
+ while (isdigit(name[i])) {
+ u *= 10;
+ u += name[i++] - '0';
+ }
+ *unit = u;
+ if (namep)
+ *namep = &name[i];
+ if (name[i])
+ return (2);
+ return (1);
+}
OpenPOWER on IntegriCloud