]> Zhao Yanbai Git Server - minix.git/commitdiff
Added dev2name - translate (minor,major) device numbers, or (minor|major<<..)
authorBen Gras <ben@minix3.org>
Thu, 21 Jul 2005 13:17:56 +0000 (13:17 +0000)
committerBen Gras <ben@minix3.org>
Thu, 21 Jul 2005 13:17:56 +0000 (13:17 +0000)
device number, to /dev/* node name.

commands/simple/Makefile
commands/simple/dev2name.c [new file with mode: 0644]

index ccb3905f1eb96dc7fe4a55994aa03226c9645118..1a7a06a9c2acd462d3c4c28b6ea51c04c4ca3fc6 100755 (executable)
@@ -66,6 +66,7 @@ ALL   = \
        date \
        dd \
        decomp16 \
+       dev2name \
        df \
        dhrystone \
        diff \
@@ -313,6 +314,10 @@ decomp16:  decomp16.c
        $(CCLD) -o $@ $?
        @install -S 4kw $@
 
+dev2name:      dev2name.c
+       $(CCLD) -o $@ $?
+       @install -S 4kw $@
+
 df:    df.c
        $(CCLD) -I$(SYS) -o $@ $?
        @install -S 4kw $@
@@ -880,6 +885,7 @@ install:    \
        /usr/bin/date \
        /usr/bin/dd \
        /usr/bin/decomp16 \
+       /bin/dev2name \
        /usr/bin/df \
        /usr/bin/dhrystone \
        /usr/bin/diff \
@@ -1139,6 +1145,9 @@ install:  \
 /usr/bin/dd:   dd
        install -cs -o bin $? $@
 
+/bin/dev2name: dev2name
+       install -cs -o bin $? $@
+
 /usr/bin/decomp16:     decomp16
        install -cs -o bin $? $@
 
diff --git a/commands/simple/dev2name.c b/commands/simple/dev2name.c
new file mode 100644 (file)
index 0000000..0e83357
--- /dev/null
@@ -0,0 +1,54 @@
+
+/* Translate internal FS device number to a /dev/ name. */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <dirent.h>
+#include <unistd.h>
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <minix/config.h>
+#include <minix/const.h>
+
+#define PATH_DEV "/dev"
+
+int
+main(int argc, char *argv[])
+{
+       DIR *dev;
+       struct dirent *e;
+       int dev_n;
+       if(argc <= 1 || argc > 3) {
+               fprintf(stderr, "Usage: \n"
+                       "%s <major> <minor>\n"
+                       "%s <devicenumber>\n", argv[0], argv[0]);
+               return 1;
+       } else if(argc == 2) dev_n = atoi(argv[1]);
+       else if(argc == 3) dev_n = (atoi(argv[1]) << MAJOR) | atoi(argv[2]);
+
+       if(chdir(PATH_DEV) < 0) {
+               perror(PATH_DEV " chdir");
+               return 1;
+       }
+
+       if(!(dev=opendir("."))) {
+               perror(". in " PATH_DEV);
+               return 1;
+       }
+
+       while((e=readdir(dev))) {
+               struct stat st;
+               if(stat(e->d_name, &st) < 0) {
+                       continue;
+               }
+               if((st.st_mode & (S_IFBLK | S_IFCHR)) && dev_n == st.st_rdev) {
+                       printf("%s/%s\n", PATH_DEV, e->d_name);
+                       return 0;
+               }
+       }
+
+       return 1;
+}
+