V10/cmd/ps/getfs.c

#include "ps.h"
#include <fstab.h>
#include <sys/inode.h>

static List namelist;
static Entry *prev;

char *
getfs(ip)
register struct inode *ip;
{
	register Entry *ep;

	if (ip->i_fstyp)	/* temp */
		return 0;
	if((ep = prev) && ep->e_val == ip->i_dev)
		return ep->e_name;
	for(ep = namelist.begin; ep; ep = ep->next) {
		if(ep->e_val == ip->i_dev ||
		    (major(ep->e_val) == major(ip->i_dev) && minor(ep->e_val) == 255)) {
			prev = ep;
			return ep->e_name;
		}
	}
	return 0;
}

getfstab()
{
	register Entry *ep;
	register struct fstab *fp;
	register char *p;
	char *strrchr();
	struct stat statb;

	while(fp = getfsent()) {
		if(stat(fp->fs_spec, &statb) == -1)
			continue;
		if((ep = Malloc(Entry, 1)) == 0)
			break;
		ep->next = namelist.begin;
		namelist.begin = ep;
		namelist.nentry++;
		ep->e_val = statb.st_rdev;
		if((p = strrchr(fp->fs_spec, '/')) == 0)
			p = fp->fs_spec;
		else
			p++;
		strncpy(ep->e_name, p, sizeof(ep->e_name));
	}
	endfsent();
}