On Mon, Apr 09, 2001 at 02:03:00PM -0300, Alexandre Oliva wrote:
> Looks like we need an additional argument in search_fstab, say
> check_dev, and get amname_to_devname to call search_fstab first with
> check_dev == 1, so as to reject any entries whose device names don't
> exist, then, if none are found (as it would be the case in Tru64),
> retry iwth check_dev == 0.
Could you try this patch on Tru64.
Jean-Louis
--
Jean-Louis Martineau email: [EMAIL PROTECTED]
Departement IRO, Universite de Montreal
C.P. 6128, Succ. CENTRE-VILLE Tel: (514) 343-6111 ext. 3529
Montreal, Canada, H3C 3J7 Fax: (514) 343-5834
--- client-src/getfsent.h.orig Mon Apr 9 19:26:48 2001
+++ client-src/getfsent.h Mon Apr 9 19:20:46 2001
@@ -54,7 +54,7 @@
void close_fstab P((void));
int get_fstab_nextentry P((generic_fsent_t *fsent));
-int search_fstab P((char *name, generic_fsent_t *fsent));
+int search_fstab P((char *name, generic_fsent_t *fsent, int check_dev));
int is_local_fstype P((generic_fsent_t *fsent));
char *amname_to_devname P((char *str));
--- client-src/getfsent.c.orig Mon Apr 9 19:26:42 2001
+++ client-src/getfsent.c Mon Apr 9 19:26:07 2001
@@ -427,9 +427,10 @@
return 0;
}
-int search_fstab(name, fsent)
+int search_fstab(name, fsent, check_dev)
char *name;
generic_fsent_t *fsent;
+ int check_dev;
{
struct stat stats[3];
char *fullname = NULL;
@@ -476,8 +477,8 @@
if(fsent->fsname != NULL) {
sfs = stat(fsent->fsname, &fsstat);
sfsr = stat((rdev = dev2rdev(fsent->fsname)), &fsrstat);
- /* We don't want to `continue;' even if both sfs and sfsr are
- -1, because, if we get here, at least smnt is not -1. */
+ if(check_dev == 1 && sfs == -1 && sfsr == -1)
+ continue;
}
if((fsent->mntdir != NULL &&
@@ -520,8 +521,9 @@
{
generic_fsent_t fsent;
- if(search_fstab(str, &fsent))
- if (fsent.fsname != NULL)
+ if(search_fstab(str, &fsent, 1) && fsent.fsname != NULL)
+ str = fsent.fsname;
+ else if(search_fstab(str, &fsent, 0) && fsent.fsname != NULL)
str = fsent.fsname;
return dev2rdev(str);
@@ -532,8 +534,9 @@
{
generic_fsent_t fsent;
- if(search_fstab(str, &fsent))
- if (fsent.mntdir != NULL)
+ if(search_fstab(str, &fsent, 1) && fsent.mntdir != NULL)
+ str = fsent.mntdir;
+ else if(search_fstab(str, &fsent, 0) && fsent.mntdir != NULL)
str = fsent.mntdir;
return stralloc(str);
@@ -544,7 +547,7 @@
{
generic_fsent_t fsent;
- if (!search_fstab(str, &fsent))
+ if (!search_fstab(str, &fsent, 1) && !search_fstab(str, &fsent, 0))
return stralloc("");
return stralloc(fsent.fstype);
@@ -603,7 +606,7 @@
close_fstab();
name = newstralloc(name, "/usr");
- if(search_fstab(name, &fsent)) {
+ if(search_fstab(name, &fsent, 1) || search_fstab(name, &fsent, 0)) {
printf("Found %s mount for %s:\n",
is_local_fstype(&fsent)? "local" : "remote", name);
print_entry(&fsent);
@@ -612,7 +615,7 @@
printf("Mount for %s not found\n", name);
name = newstralloc(name, "/");
- if(search_fstab(name, &fsent)) {
+ if(search_fstab(name, &fsent, 1) || search_fstab(name, &fsent, 0)) {
printf("Found %s mount for %s:\n",
is_local_fstype(&fsent)? "local" : "remote", name);
print_entry(&fsent);