summaryrefslogtreecommitdiffstats
path: root/sbin/mknod
diff options
context:
space:
mode:
authorjoerg <joerg@FreeBSD.org>1996-07-27 17:24:55 +0000
committerjoerg <joerg@FreeBSD.org>1996-07-27 17:24:55 +0000
commit2fbfe9777527db14a4afa673e11a9d9a438b4c4a (patch)
tree7753e889f3dbb62137bcefd3be88a650c3aaf562 /sbin/mknod
parent566ed4fc29e4818030f059f64eb44a20a85d934d (diff)
downloadFreeBSD-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/mknod')
-rw-r--r--sbin/mknod/mknod.87
-rw-r--r--sbin/mknod/mknod.c18
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);
OpenPOWER on IntegriCloud