X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/8ea8cd47907d3dcb5b38df1470787cb0662af11c..dd66b1054b203f438df25e687eb86b16eb3fffe6:/usr/src/sys/miscfs/fifofs/fifo_vnops.c diff --git a/usr/src/sys/miscfs/fifofs/fifo_vnops.c b/usr/src/sys/miscfs/fifofs/fifo_vnops.c index eda91be7f3..ea8f8854ba 100644 --- a/usr/src/sys/miscfs/fifofs/fifo_vnops.c +++ b/usr/src/sys/miscfs/fifofs/fifo_vnops.c @@ -1,26 +1,26 @@ /* - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. * * %sccs.include.redist.c% * - * @(#)fifo_vnops.c 7.16 (Berkeley) %G% + * @(#)fifo_vnops.c 8.5 (Berkeley) %G% */ -#include "param.h" -#include "proc.h" -#include "time.h" -#include "namei.h" -#include "vnode.h" -#include "socket.h" -#include "socketvar.h" -#include "stat.h" -#include "systm.h" -#include "ioctl.h" -#include "file.h" -#include "fifo.h" -#include "errno.h" -#include "malloc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * This structure is associated with the FIFO vnode and stores @@ -39,20 +39,21 @@ struct vnodeopv_entry_desc fifo_vnodeop_entries[] = { { &vop_lookup_desc, fifo_lookup }, /* lookup */ { &vop_create_desc, fifo_create }, /* create */ { &vop_mknod_desc, fifo_mknod }, /* mknod */ - { &vop_open_desc, fifo_open }, /* open */ + { &vop_open_desc, fifo_open }, /* open */ { &vop_close_desc, fifo_close }, /* close */ { &vop_access_desc, fifo_access }, /* access */ { &vop_getattr_desc, fifo_getattr }, /* getattr */ { &vop_setattr_desc, fifo_setattr }, /* setattr */ - { &vop_read_desc, fifo_read }, /* read */ + { &vop_read_desc, fifo_read }, /* read */ { &vop_write_desc, fifo_write }, /* write */ + { &vop_lease_desc, fifo_lease_check }, /* lease */ { &vop_ioctl_desc, fifo_ioctl }, /* ioctl */ { &vop_select_desc, fifo_select }, /* select */ - { &vop_mmap_desc, fifo_mmap }, /* mmap */ + { &vop_mmap_desc, fifo_mmap }, /* mmap */ { &vop_fsync_desc, fifo_fsync }, /* fsync */ - { &vop_seek_desc, fifo_seek }, /* seek */ + { &vop_seek_desc, fifo_seek }, /* seek */ { &vop_remove_desc, fifo_remove }, /* remove */ - { &vop_link_desc, fifo_link }, /* link */ + { &vop_link_desc, fifo_link }, /* link */ { &vop_rename_desc, fifo_rename }, /* rename */ { &vop_mkdir_desc, fifo_mkdir }, /* mkdir */ { &vop_rmdir_desc, fifo_rmdir }, /* rmdir */ @@ -62,12 +63,13 @@ struct vnodeopv_entry_desc fifo_vnodeop_entries[] = { { &vop_abortop_desc, fifo_abortop }, /* abortop */ { &vop_inactive_desc, fifo_inactive }, /* inactive */ { &vop_reclaim_desc, fifo_reclaim }, /* reclaim */ - { &vop_lock_desc, fifo_lock }, /* lock */ + { &vop_lock_desc, fifo_lock }, /* lock */ { &vop_unlock_desc, fifo_unlock }, /* unlock */ - { &vop_bmap_desc, fifo_bmap }, /* bmap */ + { &vop_bmap_desc, fifo_bmap }, /* bmap */ { &vop_strategy_desc, fifo_strategy }, /* strategy */ { &vop_print_desc, fifo_print }, /* print */ { &vop_islocked_desc, fifo_islocked }, /* islocked */ + { &vop_pathconf_desc, fifo_pathconf }, /* pathconf */ { &vop_advlock_desc, fifo_advlock }, /* advlock */ { &vop_blkatoff_desc, fifo_blkatoff }, /* blkatoff */ { &vop_valloc_desc, fifo_valloc }, /* valloc */ @@ -120,13 +122,13 @@ fifo_open(ap) if ((fip = vp->v_fifoinfo) == NULL) { MALLOC(fip, struct fifoinfo *, sizeof(*fip), M_VNODE, M_WAITOK); vp->v_fifoinfo = fip; - if (error = socreate(AF_UNIX, &rso, SOCK_STREAM, 0)) { + if (error = socreate(AF_LOCAL, &rso, SOCK_STREAM, 0)) { free(fip, M_VNODE); vp->v_fifoinfo = NULL; return (error); } fip->fi_readsock = rso; - if (error = socreate(AF_UNIX, &wso, SOCK_STREAM, 0)) { + if (error = socreate(AF_LOCAL, &wso, SOCK_STREAM, 0)) { (void)soclose(rso); free(fip, M_VNODE); vp->v_fifoinfo = NULL; @@ -156,8 +158,8 @@ fifo_open(ap) return (0); while (fip->fi_writers == 0) { VOP_UNLOCK(vp); - error = tsleep((caddr_t)&fip->fi_readers, PSOCK, - openstr, 0); + error = tsleep((caddr_t)&fip->fi_readers, + PCATCH | PSOCK, openstr, 0); VOP_LOCK(vp); if (error) break; @@ -175,7 +177,7 @@ fifo_open(ap) while (fip->fi_readers == 0) { VOP_UNLOCK(vp); error = tsleep((caddr_t)&fip->fi_writers, - PSOCK, openstr, 0); + PCATCH | PSOCK, openstr, 0); VOP_LOCK(vp); if (error) break; @@ -213,8 +215,8 @@ fifo_read(ap) rso->so_state |= SS_NBIO; startresid = uio->uio_resid; VOP_UNLOCK(ap->a_vp); - error = soreceive(rso, (struct mbuf **)0, uio, (int *)0, - (struct mbuf **)0, (struct mbuf **)0); + error = soreceive(rso, (struct mbuf **)0, uio, (struct mbuf **)0, + (struct mbuf **)0, (int *)0); VOP_LOCK(ap->a_vp); /* * Clear EOF indication after first such return. @@ -270,7 +272,6 @@ fifo_ioctl(ap) } */ *ap; { struct file filetmp; - int error; if (ap->a_command == FIONBIO) return (0); @@ -292,7 +293,6 @@ fifo_select(ap) } */ *ap; { struct file filetmp; - int error; if (ap->a_fflags & FREAD) filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_readsock; @@ -317,6 +317,8 @@ fifo_bmap(ap) *ap->a_vpp = ap->a_vp; if (ap->a_bnp != NULL) *ap->a_bnp = ap->a_bn; + if (ap->a_runp != NULL) + *ap->a_runp = 0; return (0); } @@ -405,6 +407,33 @@ fifo_printinfo(vp) fip->fi_readers, fip->fi_writers); } +/* + * Return POSIX pathconf information applicable to fifo's. + */ +fifo_pathconf(ap) + struct vop_pathconf_args /* { + struct vnode *a_vp; + int a_name; + int *a_retval; + } */ *ap; +{ + + switch (ap->a_name) { + case _PC_LINK_MAX: + *ap->a_retval = LINK_MAX; + return (0); + case _PC_PIPE_BUF: + *ap->a_retval = PIPE_BUF; + return (0); + case _PC_CHOWN_RESTRICTED: + *ap->a_retval = 1; + return (0); + default: + return (EINVAL); + } + /* NOTREACHED */ +} + /* * Fifo failed operation */