1
0
Files
irix-657m-src/eoe/cmd/efs/nlib/efs_stuff.c
2022-09-29 17:59:04 +03:00

72 lines
1.3 KiB
C

#ident "$Revision: 1.4 $"
/*
* more handy EFS init and helper routines
*/
#include "libefs.h"
static char *devnmr(char *devdir, dev_t dev);
char *
devnm(dev_t dev)
{
char *cp;
cp = devnmr("/dev/rdsk/", dev);
if (cp != NULL)
return cp;
cp = devnmr("/dev/", dev);
if (cp != NULL)
return cp;
cp = devnmr("/dev/rdsk/xlv/", dev);
if (cp != NULL)
return cp;
efs_errpr("could not find device file for dev number 0x%x\n", dev);
return NULL;
}
/* 'r' stands for raw (chr) */
static char *
devnmr(char *devdir, dev_t dev)
{
char *cp;
static char devname[MAXPATHLEN+1];
DIR *dirp;
struct dirent *dp;
struct stat statbuf;
strcpy(devname, devdir);
cp = devname + strlen(devdir);
dirp = opendir(devname);
while ((dp = readdir(dirp)) != NULL) {
strcpy(cp, dp->d_name);
if (stat(devname, &statbuf) < 0)
continue;
if (S_ISCHR(statbuf.st_mode) && statbuf.st_rdev == dev) {
closedir(dirp);
return devname;
}
}
closedir(dirp);
return NULL;
}
char
filetype(ushort mode)
{
switch ( mode&S_IFMT ) {
case S_IFDIR: return 'd';
case S_IFCHR: return 'c';
case S_IFBLK: return 'b';
case S_IFREG: return 'r';
case S_IFIFO: return 'p';
case S_IFLNK: return 'l';
case S_IFSOCK: return 's';
default: return '?';
}
}