From 2fbfe9777527db14a4afa673e11a9d9a438b4c4a Mon Sep 17 00:00:00 2001 From: joerg Date: Sat, 27 Jul 1996 17:24:55 +0000 Subject: Finally use strtoul() to convert the major an minor numbers, so proper error-checking can be done, and octal and hexadecimal numbers are allowed. --- sbin/mknod/mknod.8 | 7 +++++++ sbin/mknod/mknod.c | 18 ++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/sbin/mknod/mknod.8 b/sbin/mknod/mknod.8 index 06ea4f8..52ae02d 100644 --- a/sbin/mknod/mknod.8 +++ b/sbin/mknod/mknod.8 @@ -90,6 +90,13 @@ the node corresponds to on the device; for example, a subunit may be a filesystem partition or a tty line. .El +.Pp +Major and minor device numbers can be given using the normal C +notation, so that a leading +.Ql 0x +indicates a hexadecimal number, and a leading +.Ql 0 +will cause the number to be interpreted as octal. .Sh SEE ALSO .Xr mknod 2 , .Xr MAKEDEV 8 diff --git a/sbin/mknod/mknod.c b/sbin/mknod/mknod.c index b70acf1..f1325e4 100644 --- a/sbin/mknod/mknod.c +++ b/sbin/mknod/mknod.c @@ -54,7 +54,8 @@ main(argc, argv) { extern int errno; u_short mode; - char *strerror(); + u_int32_t major, minor; + char *endp; if (argc != 5) { (void)fprintf(stderr, @@ -73,7 +74,20 @@ main(argc, argv) exit(1); } - if (mknod(argv[1], mode, makedev(atoi(argv[3]), atoi(argv[4]))) < 0) { + major = strtoul(argv[3], &endp, 0); + if (*endp != '\0' || major >= 256) { + (void)fprintf(stderr, + "mknod: bad major number.\n"); + exit(1); + } + minor = strtoul(argv[4], &endp, 0); + if (*endp != '\0') { + (void)fprintf(stderr, + "mknod: bad minor number.\n"); + exit(1); + } + + if (mknod(argv[1], mode, makedev(major, minor)) < 0) { (void)fprintf(stderr, "mknod: %s: %s\n", argv[1], strerror(errno)); exit(1); -- cgit v1.1