72 lines
1.3 KiB
C
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 '?';
|
|
}
|
|
}
|