-char *nfsmount_to_devname(char *pathname, int *blksize)
-{
- DIR *dp;
- dev_t device;
- struct stat st;
- struct dirent *de;
- static char *devicename = NULL;
- static int devicelen = 0;
-
- if (stat(pathname, &st) == -1)
- return (char *)0;
-
- device = st.st_dev;
- *blksize = st.st_blksize;
-
- /*
- * search for devicename in _PATH_DEV_DSK dir.
- */
- if ((dp = opendir(_PATH_DEV_DSK)) == (DIR *)0)
- return (char *)0;
-
- while ((de = readdir(dp)) != (struct dirent *)0) {
- if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
- continue;
-
- if (devicelen == 0) {
- devicelen = sizeof (_PATH_DEV_DSK) + strlen (de->d_name) + 1;
- devicename = (char *) xmalloc (devicelen);
- }
- else {
- int newlen = sizeof (_PATH_DEV_DSK) + strlen (de->d_name) + 1;
- if (newlen > devicelen) {
- devicelen = newlen;
- devicename = (char *) xrealloc (devicename, devicelen);
- }
- }
-
- strcpy(devicename, _PATH_DEV_DSK);
- strcat(devicename, de->d_name);
- if (stat(devicename, &st) == -1)
- continue;
-
- if (!S_ISBLK(st.st_mode))
- continue;
-
- if ((device == st.st_rdev) && S_ISBLK(st.st_mode))
- break;
- }
- closedir(dp);
-
- if (de != (struct dirent *)0) {
- return devicename;
- } else
- return (char *)0;
-}
-