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);

Reply via email to