From 807bfb5d4f94afa54cadb234acd2bdb21e947f74 Mon Sep 17 00:00:00 2001 From: zrj Date: Sat, 3 Feb 2018 20:37:03 +0200 Subject: [PATCH] kernel: Implement makedev_unit_b32() It would be used to replace deprecated legacy FreeBSD "%r" formats. Change tty_pty.c to use hex2ascii(), since it has only upto 32 devices. --- sys/kern/kern_conf.c | 16 ++++++++++++++++ sys/kern/tty_pty.c | 4 ++-- sys/libkern/bcd.c | 1 - sys/sys/device.h | 2 ++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index b7acf8ea5f..51f69aafdc 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -159,6 +159,22 @@ makeudev(int x, int y) } /* + * Put a NUL-terminated ASCII number (base == 32) for use as device suffix. + * The buffer pointed to by `nbuf' must have length >= MAKEDEV_MINNBUF. + */ +char * +makedev_unit_b32(char *nbuf, uintmax_t num) +{ + char *p = &nbuf[MAKEDEV_MINNBUF - 1]; + + *p = '\0'; + do { + *--p = hex2ascii(num % 32); + } while (num /= 32); + return (p); +} + +/* * Create an internal or external device. * * This routine creates and returns an unreferenced ad-hoc entry for the diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c index 6ac4341d37..0f6b3839d3 100644 --- a/sys/kern/tty_pty.c +++ b/sys/kern/tty_pty.c @@ -195,9 +195,9 @@ ptyinit(int n) pt = kmalloc(sizeof(*pt), M_PTY, M_WAITOK | M_ZERO); pt->devs = devs = make_dev(&pts_ops, n, - 0, 0, 0666, "tty%c%r", names[n / 32], n % 32); + 0, 0, 0666, "tty%c%c", names[n / 32], hex2ascii(n % 32)); pt->devc = devc = make_dev(&ptc_ops, n, - 0, 0, 0666, "pty%c%r", names[n / 32], n % 32); + 0, 0, 0666, "pty%c%c", names[n / 32], hex2ascii(n % 32)); pt->pt_tty.t_dev = devs; pt->pt_uminor = n; diff --git a/sys/libkern/bcd.c b/sys/libkern/bcd.c index 2a14f50e51..bd3bddd8c7 100644 --- a/sys/libkern/bcd.c +++ b/sys/libkern/bcd.c @@ -1,5 +1,4 @@ /* $FreeBSD: src/sys/libkern/bcd.c,v 1.4.12.1 2000/08/03 01:03:45 peter Exp $ */ -/* $DragonFly: src/sys/libkern/bcd.c,v 1.2 2003/06/17 04:28:42 dillon Exp $ */ /* * Some data-tables that are often used. * Cannot be copyrighted. diff --git a/sys/sys/device.h b/sys/sys/device.h index f90332f8f3..525a74c258 100644 --- a/sys/sys/device.h +++ b/sys/sys/device.h @@ -371,6 +371,8 @@ int dev_ops_remove_minor(struct dev_ops *ops, int minor); struct dev_ops *dev_ops_intercept(cdev_t, struct dev_ops *); void dev_ops_restore(cdev_t, struct dev_ops *); +#define MAKEDEV_MINNBUF 14 +char *makedev_unit_b32(char *nbuf, uintmax_t num); cdev_t make_dev(struct dev_ops *ops, int minor, uid_t uid, gid_t gid, int perms, const char *fmt, ...) __printflike(6, 7); cdev_t make_dev_covering(struct dev_ops *ops, struct dev_ops *bops, int minor, -- 2.11.4.GIT