From: Ben Gras Date: Thu, 21 Jul 2005 13:17:56 +0000 (+0000) Subject: Added dev2name - translate (minor,major) device numbers, or (minor|major<<..) X-Git-Tag: v3.1.0~579 X-Git-Url: http://zhaoyanbai.com/repos/man.ddns-confgen.html?a=commitdiff_plain;h=da9b8e45f91d99ca809ace333cb366e73973b59c;p=minix.git Added dev2name - translate (minor,major) device numbers, or (minor|major<<..) device number, to /dev/* node name. --- diff --git a/commands/simple/Makefile b/commands/simple/Makefile index ccb3905f1..1a7a06a9c 100755 --- a/commands/simple/Makefile +++ b/commands/simple/Makefile @@ -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 index 000000000..0e83357cd --- /dev/null +++ b/commands/simple/dev2name.c @@ -0,0 +1,54 @@ + +/* Translate internal FS device number to a /dev/ name. */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#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 \n" + "%s \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; +} +