diff options
author | joerg <joerg@FreeBSD.org> | 1996-07-27 17:24:55 +0000 |
---|---|---|
committer | joerg <joerg@FreeBSD.org> | 1996-07-27 17:24:55 +0000 |
commit | 2fbfe9777527db14a4afa673e11a9d9a438b4c4a (patch) | |
tree | 7753e889f3dbb62137bcefd3be88a650c3aaf562 /sbin | |
parent | 566ed4fc29e4818030f059f64eb44a20a85d934d (diff) | |
download | FreeBSD-src-2fbfe9777527db14a4afa673e11a9d9a438b4c4a.zip FreeBSD-src-2fbfe9777527db14a4afa673e11a9d9a438b4c4a.tar.gz |
Finally use strtoul() to convert the major an minor numbers, so
proper error-checking can be done, and octal and hexadecimal
numbers are allowed.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/mknod/mknod.8 | 7 | ||||
-rw-r--r-- | 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); |