On Fri, 19 Jul 2013 21:02:41 +0200, Christian Weisgerber wrote:

> Switching the processing order in getmntname() fixes the behavior.
> Can anybody think of something that would be broken by this?

I can't see any reason not do to this.  I'm sure you were trying
for a minimal diff but doesn't it make more sense to make the loop
more like the one in umountall()?

 - todd

Index: sbin/umount/umount.c
===================================================================
RCS file: /home/cvs/openbsd/src/sbin/umount/umount.c,v
retrieving revision 1.23
diff -u -r1.23 umount.c
--- sbin/umount/umount.c        21 Apr 2013 11:56:09 -0000      1.23
+++ sbin/umount/umount.c        19 Jul 2013 20:16:37 -0000
@@ -253,27 +253,27 @@
 getmntname(char *name, mntwhat what, char *type)
 {
        struct statfs *mntbuf;
-       int i, mntsize;
+       int n;
 
-       if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) {
+       if ((n = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) {
                warn("getmntinfo");
                return (NULL);
        }
-       for (i = 0; i < mntsize; i++) {
+       while (--n >= 0) {
                if ((what == MNTON) &&
-                   (strncmp(mntbuf[i].f_mntfromname, name, MNAMELEN) == 0 ||
-                    strncmp(mntbuf[i].f_mntfromspec, name, MNAMELEN) == 0)) {
+                   (strncmp(mntbuf[n].f_mntfromname, name, MNAMELEN) == 0 ||
+                    strncmp(mntbuf[n].f_mntfromspec, name, MNAMELEN) == 0)) {
                        if (type)
-                               memcpy(type, mntbuf[i].f_fstypename,
-                                   sizeof(mntbuf[i].f_fstypename));
-                       return (mntbuf[i].f_mntonname);
+                               memcpy(type, mntbuf[n].f_fstypename,
+                                   sizeof(mntbuf[n].f_fstypename));
+                       return (mntbuf[n].f_mntonname);
                }
                if ((what == MNTFROM) &&
-                   (strncmp(mntbuf[i].f_mntonname, name, MNAMELEN) == 0)) {
+                   (strncmp(mntbuf[n].f_mntonname, name, MNAMELEN) == 0)) {
                        if (type)
-                               memcpy(type, mntbuf[i].f_fstypename,
-                                   sizeof(mntbuf[i].f_fstypename));
-                       return (mntbuf[i].f_mntfromname);
+                               memcpy(type, mntbuf[n].f_fstypename,
+                                   sizeof(mntbuf[n].f_fstypename));
+                       return (mntbuf[n].f_mntfromname);
                }
        }
        return (NULL);

Reply via email to