diff --git a/fs/devfs-core.c b/fs/devfs-core.c index a2bea93..816f244 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -70,6 +70,14 @@ return -EBUSY; /* all indexes are used */ } +int cdev_do_open(struct cdev *cdev, unsigned long flags) +{ + if (cdev->ops->open) + return cdev->ops->open(cdev, flags); + + return 0; +} + struct cdev *cdev_open(const char *name, unsigned long flags) { struct cdev *cdev = cdev_by_name(name); @@ -78,11 +86,9 @@ if (!cdev) return NULL; - if (cdev->ops->open) { - ret = cdev->ops->open(cdev, flags); - if (ret) - return NULL; - } + ret = cdev_do_open(cdev, flags); + if (ret) + return NULL; return cdev; } diff --git a/include/driver.h b/include/driver.h index 353af3a..7ac2eef 100644 --- a/include/driver.h +++ b/include/driver.h @@ -460,6 +460,7 @@ 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); +int cdev_do_open(struct cdev *, unsigned long flags); void cdev_close(struct cdev *cdev); int cdev_flush(struct cdev *cdev); ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags);