git: e3f669870fe2 - main - cdev: dev_copyname copies a character device's name to a buffer
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 27 Mar 2025 20:48:40 UTC
The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=e3f669870fe255ad4535d2a793e79e8ad878177f commit e3f669870fe255ad4535d2a793e79e8ad878177f Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2025-03-27 20:43:15 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2025-03-27 20:43:15 +0000 cdev: dev_copyname copies a character device's name to a buffer This function can be called on a cdev that might have been destroyed unlike devtoname. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D49334 --- sys/kern/kern_conf.c | 13 +++++++++++++ sys/sys/conf.h | 1 + 2 files changed, 14 insertions(+) diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index f9d406548d10..1f0772e97030 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -1245,6 +1245,19 @@ devtoname(struct cdev *dev) return (dev->si_name); } +void +dev_copyname(struct cdev *dev, char *path, size_t len) +{ + struct cdevsw *csw; + int ref; + + csw = dev_refthread(dev, &ref); + if (csw != NULL) { + strlcpy(path, dev->si_name, len); + dev_relthread(dev, ref); + } +} + int dev_stdclone(char *name, char **namep, const char *stem, int *unit) { diff --git a/sys/sys/conf.h b/sys/sys/conf.h index 8970006c7089..1646aa108701 100644 --- a/sys/sys/conf.h +++ b/sys/sys/conf.h @@ -277,6 +277,7 @@ void destroy_dev(struct cdev *_dev); int destroy_dev_sched(struct cdev *dev); int destroy_dev_sched_cb(struct cdev *dev, void (*cb)(void *), void *arg); void destroy_dev_drain(struct cdevsw *csw); +void dev_copyname(struct cdev *dev, char *path, size_t len); struct cdevsw *dev_refthread(struct cdev *_dev, int *_ref); struct cdevsw *devvn_refthread(struct vnode *vp, struct cdev **devp, int *_ref); void dev_relthread(struct cdev *_dev, int _ref);