diff --git a/fs/devfs-core.c b/fs/devfs-core.c index 519e18e6b..9bc3126d6 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -40,6 +40,20 @@ struct cdev *cdev_by_name(const char *filename) return NULL; } +int cdev_find_free_index(const char *basename) +{ + int i; + char fname[100]; + + for (i = 0; i < 1000; i++) { + snprintf(fname, sizeof(fname), "%s%d", basename, i); + if (cdev_by_name(fname) == NULL) + return i; + } + + return -EBUSY; /* all indexes are used */ +} + struct cdev *cdev_open(const char *name, unsigned long flags) { struct cdev *cdev = cdev_by_name(name); diff --git a/include/driver.h b/include/driver.h index 80de0c837..fe9d37ae3 100644 --- a/include/driver.h +++ b/include/driver.h @@ -394,6 +394,7 @@ struct cdev { int devfs_create(struct cdev *); int devfs_remove(struct cdev *); +int cdev_find_free_index(const char *); struct cdev *cdev_by_name(const char *filename); struct cdev *cdev_open(const char *name, unsigned long flags); void cdev_close(struct cdev *cdev);