Author: kib
Date: Fri Oct 18 08:39:10 2019
New Revision: 353722
URL: https://svnweb.freebsd.org/changeset/base/353722

Log:
  MFC r353447:
  devfs_vptocnp(): correct the component name when node is not at top.

Modified:
  stable/11/sys/fs/devfs/devfs_vnops.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- stable/11/sys/fs/devfs/devfs_vnops.c        Fri Oct 18 08:38:07 2019        
(r353721)
+++ stable/11/sys/fs/devfs/devfs_vnops.c        Fri Oct 18 08:39:10 2019        
(r353722)
@@ -280,38 +280,27 @@ devfs_vptocnp(struct vop_vptocnp_args *ap)
        if (error != 0)
                return (error);
 
-       i = *buflen;
+       if (vp->v_type != VCHR && vp->v_type != VDIR) {
+               error = ENOENT;
+               goto finished;
+       }
+
        dd = vp->v_data;
+       if (vp->v_type == VDIR && dd == dmp->dm_rootdir) {
+               *dvp = vp;
+               vref(*dvp);
+               goto finished;
+       }
 
-       if (vp->v_type == VCHR) {
-               i -= strlen(dd->de_cdp->cdp_c.si_name);
-               if (i < 0) {
-                       error = ENOMEM;
-                       goto finished;
-               }
-               bcopy(dd->de_cdp->cdp_c.si_name, buf + i,
-                   strlen(dd->de_cdp->cdp_c.si_name));
-               de = dd->de_dir;
-       } else if (vp->v_type == VDIR) {
-               if (dd == dmp->dm_rootdir) {
-                       *dvp = vp;
-                       vref(*dvp);
-                       goto finished;
-               }
-               i -= dd->de_dirent->d_namlen;
-               if (i < 0) {
-                       error = ENOMEM;
-                       goto finished;
-               }
-               bcopy(dd->de_dirent->d_name, buf + i,
-                   dd->de_dirent->d_namlen);
-               de = dd;
-       } else {
-               error = ENOENT;
+       i = *buflen;
+       i -= dd->de_dirent->d_namlen;
+       if (i < 0) {
+               error = ENOMEM;
                goto finished;
        }
+       bcopy(dd->de_dirent->d_name, buf + i, dd->de_dirent->d_namlen);
        *buflen = i;
-       de = devfs_parent_dirent(de);
+       de = devfs_parent_dirent(dd);
        if (de == NULL) {
                error = ENOENT;
                goto finished;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to