Comments?

christos


Index: kern/sys_descrip.c
===================================================================
RCS file: /cvsroot/src/sys/kern/sys_descrip.c,v
retrieving revision 1.34
diff -u -p -u -r1.34 sys_descrip.c
--- kern/sys_descrip.c  26 Aug 2019 10:19:08 -0000      1.34
+++ kern/sys_descrip.c  14 Sep 2019 21:33:29 -0000
@@ -315,6 +312,28 @@ do_fcntl_lock(int fd, int cmd, struct fl
        return error;
 }
 
+static int
+do_fcntl_getpath(struct lwp *l, file_t *fp, char *upath)
+{
+       char *kpath;
+       int error;
+
+       if (fp->f_type != DTYPE_VNODE)
+               return EOPNOTSUPP;
+
+       kpath = PNBUF_GET();
+
+       error = vnode_to_path(kpath, MAXPATHLEN, fp->f_vnode, l, l->l_proc);
+       if (error)
+               goto out;
+
+       error = copyoutstr(kpath, upath, MAXPATHLEN, NULL);
+out:
+       PNBUF_PUT(kpath);
+
+       return error;
+}
+       
 /*
  * The file control system call.
  */
@@ -463,6 +482,10 @@ sys_fcntl(struct lwp *l, const struct sy
                error = (*fp->f_ops->fo_ioctl)(fp, FIOSETOWN, &tmp);
                break;
 
+       case F_GETPATH:
+               error = do_fcntl_getpath(l, fp, SCARG(uap, arg));
+               break;
+
        default:
                error = EINVAL;
        }
Index: sys/fcntl.h
===================================================================
RCS file: /cvsroot/src/sys/sys/fcntl.h,v
retrieving revision 1.50
diff -u -p -u -r1.50 fcntl.h
--- sys/fcntl.h 20 Feb 2018 18:20:05 -0000      1.50
+++ sys/fcntl.h 14 Sep 2019 21:33:29 -0000
@@ -193,6 +195,7 @@
 #define        F_DUPFD_CLOEXEC 12              /* close on exec duplicated fd 
*/
 #define        F_GETNOSIGPIPE  13              /* get SIGPIPE disposition */
 #define        F_SETNOSIGPIPE  14              /* set SIGPIPE disposition */
+#define        F_GETPATH       15              /* get pathname assosiated with 
file */
 #endif
 
 /* file descriptor flags (F_GETFD, F_SETFD) */

Reply via email to