unit vnode_if; interface {$mode objfpc}{$H+} {$CALLING SysV_ABI_CDecl} uses vfs_vnode, vnamei, vfile, vuio, vmount, vfcntl, vsocketvar; type PPPtrUint =^PPtrUint; pp_bufobj =Pointer; daddr_t =PtrUint; p_daddr_t =PPtrUint; p_buf =Pointer; p_task =Pointer; p_cluster_save=Pointer; p_vm_page_t =Pointer; acl_type_t =Integer; p_acl =Pointer; p_label =Pointer; p_vop_islocked_args=^vop_islocked_args; vop_islocked_args=record a_vp:p_vnode; end; p_vop_lookup_args=^vop_lookup_args; vop_lookup_args=record a_dvp:p_vnode; a_vpp:pp_vnode; a_cnp:p_componentname; end; p_vop_cachedlookup_args=^vop_cachedlookup_args; vop_cachedlookup_args=record a_dvp:p_vnode; a_vpp:pp_vnode; a_cnp:p_componentname; end; p_vop_create_args=^vop_create_args; vop_create_args=record a_dvp:p_vnode; a_vpp:pp_vnode; a_cnp:p_componentname; a_vap:p_vattr; end; p_vop_whiteout_args=^vop_whiteout_args; vop_whiteout_args=record a_dvp :p_vnode; a_cnp :p_componentname; a_flags:Integer; end; p_vop_mknod_args=^vop_mknod_args; vop_mknod_args=record a_dvp:p_vnode; a_vpp:pp_vnode; a_cnp:p_componentname; a_vap:p_vattr; end; p_vop_open_args=^vop_open_args; vop_open_args=record a_vp :p_vnode; a_mode:Integer; a_fp :p_file; end; p_vop_close_args=^vop_close_args; vop_close_args=record a_vp :p_vnode; a_fflag:Integer; end; p_vop_access_args=^vop_access_args; vop_access_args=record a_vp :p_vnode; a_accmode:accmode_t; end; p_vop_accessx_args=^vop_accessx_args; vop_accessx_args=record a_vp :p_vnode; a_accmode:accmode_t; end; p_vop_getattr_args=^vop_getattr_args; vop_getattr_args=record a_vp :p_vnode; a_vap:p_vattr; end; p_vop_setattr_args=^vop_setattr_args; vop_setattr_args=record a_vp :p_vnode; a_vap:p_vattr; end; p_vop_markatime_args=^vop_markatime_args; vop_markatime_args=record a_vp:p_vnode; end; p_vop_read_args=^vop_read_args; vop_read_args=record a_vp :p_vnode; a_uio :p_uio; a_ioflag:Integer; end; p_vop_write_args=^vop_write_args; vop_write_args=record a_vp :p_vnode; a_uio :p_uio; a_ioflag:Integer; end; p_vop_ioctl_args=^vop_ioctl_args; vop_ioctl_args=record a_vp :p_vnode; a_command:PtrUint; a_data :Pointer; a_fflag :Integer; end; p_vop_poll_args=^vop_poll_args; vop_poll_args=record a_vp :p_vnode; a_events:Integer; end; p_vop_kqfilter_args=^vop_kqfilter_args; vop_kqfilter_args=record a_vp:p_vnode; a_kn:p_knote; end; p_vop_revoke_args=^vop_revoke_args; vop_revoke_args=record a_vp :p_vnode; a_flags:Integer; end; p_vop_fsync_args=^vop_fsync_args; vop_fsync_args=record a_vp :p_vnode; a_waitfor:Integer; end; p_vop_remove_args=^vop_remove_args; vop_remove_args=record a_dvp:p_vnode; a_vp :p_vnode; a_cnp:p_componentname; end; p_vop_link_args=^vop_link_args; vop_link_args=record a_tdvp:p_vnode; a_vp :p_vnode; a_cnp :p_componentname; end; p_vop_rename_args=^vop_rename_args; vop_rename_args=record a_fdvp:p_vnode; a_fvp :p_vnode; a_fcnp:p_componentname; a_tdvp:p_vnode; a_tvp :p_vnode; a_tcnp:p_componentname; end; p_vop_mkdir_args=^vop_mkdir_args; vop_mkdir_args=record a_dvp:p_vnode; a_vpp:pp_vnode; a_cnp:p_componentname; a_vap:p_vattr; end; p_vop_rmdir_args=^vop_rmdir_args; vop_rmdir_args=record a_dvp:p_vnode; a_vp :p_vnode; a_cnp:p_componentname; end; p_vop_symlink_args=^vop_symlink_args; vop_symlink_args=record a_dvp :p_vnode; a_vpp :pp_vnode; a_cnp :p_componentname; a_vap :p_vattr; a_target:PChar; end; p_vop_readdir_args=^vop_readdir_args; vop_readdir_args=record a_vp :p_vnode; a_uio :p_uio; a_eofflag :PInteger; a_ncookies:PInteger; a_cookies :PPPtrUint; end; p_vop_readlink_args=^vop_readlink_args; vop_readlink_args=record a_vp :p_vnode; a_uio:p_uio; end; p_vop_inactive_args=^vop_inactive_args; vop_inactive_args=record a_vp:p_vnode; end; p_vop_reclaim_args=^vop_reclaim_args; vop_reclaim_args=record a_vp:p_vnode; end; p_vop_lock1_args=^vop_lock1_args; vop_lock1_args=record a_vp :p_vnode; a_flags:Integer; a_file :PChar; a_line :Integer; end; p_vop_unlock_args=^vop_unlock_args; vop_unlock_args=record a_vp :p_vnode; a_flags:Integer; end; p_vop_bmap_args=^vop_bmap_args; vop_bmap_args=record a_vp :p_vnode; a_bn :daddr_t; a_bop :pp_bufobj; a_bnp :p_daddr_t; a_runp:PInteger; a_runb:PInteger; end; p_vop_strategy_args=^vop_strategy_args; vop_strategy_args=record a_vp:p_vnode; a_bp:p_buf; end; p_vop_getwritemount_args=^vop_getwritemount_args; vop_getwritemount_args=record a_vp :p_vnode; a_mpp:pp_mount; end; p_vop_print_args=^vop_print_args; vop_print_args=record a_vp:p_vnode; end; p_vop_pathconf_args=^vop_pathconf_args; vop_pathconf_args=record a_vp :p_vnode; a_name :Integer; a_retval:PPtrUint; end; p_vop_advlock_args=^vop_advlock_args; vop_advlock_args=record a_vp :p_vnode; a_id :Pointer; a_op :Integer; a_fl :p_flock; a_flags:Integer; end; p_vop_advlockasync_args=^vop_advlockasync_args; vop_advlockasync_args=record a_vp :p_vnode; a_id :Pointer; a_op :Integer; a_fl :p_flock; a_flags :Integer; a_task :p_task; a_cookiep:PPointer; end; p_vop_advlockpurge_args=^vop_advlockpurge_args; vop_advlockpurge_args=record a_vp:p_vnode; end; p_vop_reallocblks_args=^vop_reallocblks_args; vop_reallocblks_args=record a_vp :p_vnode; a_buflist:p_cluster_save; end; p_vop_getpages_args=^vop_getpages_args; vop_getpages_args=record a_vp :p_vnode; a_m :p_vm_page_t; a_count :Integer; a_reqpage:Integer; a_offset :PtrUint; end; p_vop_putpages_args=^vop_putpages_args; vop_putpages_args=record a_vp :p_vnode; a_m :p_vm_page_t; a_count :Integer; a_sync :Integer; a_rtvals:PInteger; a_offset:PtrUint; end; p_vop_getacl_args=^vop_getacl_args; vop_getacl_args=record a_vp :p_vnode; a_type:acl_type_t; a_aclp:p_acl; end; p_vop_setacl_args=^vop_setacl_args; vop_setacl_args=record a_vp :p_vnode; a_type:acl_type_t; a_aclp:p_acl; end; p_vop_aclcheck_args=^vop_aclcheck_args; vop_aclcheck_args=record a_vp :p_vnode; a_type:acl_type_t; a_aclp:p_acl; end; p_vop_closeextattr_args=^vop_closeextattr_args; vop_closeextattr_args=record a_vp :p_vnode; a_commit:Integer; end; p_vop_getextattr_args=^vop_getextattr_args; vop_getextattr_args=record a_vp :p_vnode; a_attrnamespace:Integer; a_name :PChar; a_uio :p_uio; a_size :PPtrUint; end; p_vop_listextattr_args=^vop_listextattr_args; vop_listextattr_args=record a_vp :p_vnode; a_attrnamespace:Integer; a_uio :p_uio; a_size :PPtrUint; end; p_vop_openextattr_args=^vop_openextattr_args; vop_openextattr_args=record a_vp:p_vnode; end; p_vop_deleteextattr_args=^vop_deleteextattr_args; vop_deleteextattr_args=record a_vp :p_vnode; a_attrnamespace:Integer; a_name :PChar; end; p_vop_setextattr_args=^vop_setextattr_args; vop_setextattr_args=record a_vp :p_vnode; a_attrnamespace:Integer; a_name :PChar; a_uio :p_uio; end; p_vop_setlabel_args=^vop_setlabel_args; vop_setlabel_args=record a_vp :p_vnode; a_label:p_label; end; p_vop_vptofh_args=^vop_vptofh_args; vop_vptofh_args=record a_vp :p_vnode; a_fhp:p_fid; end; p_vop_vptocnp_args=^vop_vptocnp_args; vop_vptocnp_args=record a_vp :p_vnode; a_vpp :pp_vnode; a_buf :PChar; a_buflen:PInteger; end; p_vop_allocate_args=^vop_allocate_args; vop_allocate_args=record a_vp :p_vnode; a_offset:PPtrUint; a_len :PPtrUint; end; p_vop_advise_args=^vop_advise_args; vop_advise_args=record a_vp :p_vnode; a_start :PtrUint; a___end :PtrUint; a_advice:Integer; end; p_vop_unp_bind_args=^vop_unp_bind_args; vop_unp_bind_args=record a_vp :p_vnode; a_socket:p_socket; end; p_vop_unp_connect_args=^vop_unp_connect_args; vop_unp_connect_args=record a_vp :p_vnode; a_socket:pp_socket; end; p_vop_unp_detach_args=^vop_unp_detach_args; vop_unp_detach_args=record a_vp:p_vnode; end; p_vop_is_text_args=^vop_is_text_args; vop_is_text_args=record a_vp:p_vnode; end; p_vop_set_text_args=^vop_set_text_args; vop_set_text_args=record a_vp:p_vnode; end; p_vop_unset_text_args=^vop_unset_text_args; vop_unset_text_args=record a_vp:p_vnode; end; p_vop_get_writecount_args=^vop_get_writecount_args; vop_get_writecount_args=record a_vp :p_vnode; a_writecount:PInteger; end; p_vop_add_writecount_args=^vop_add_writecount_args; vop_add_writecount_args=record a_vp :p_vnode; a_inc:Integer; end; vop_islocked_t =function(ap:p_vop_islocked_args):Integer; vop_lookup_t =function(ap:p_vop_lookup_args):Integer; vop_cachedlookup_t =function(ap:p_vop_cachedlookup_args):Integer; vop_create_t =function(ap:p_vop_create_args):Integer; vop_whiteout_t =function(ap:p_vop_whiteout_args):Integer; vop_mknod_t =function(ap:p_vop_mknod_args):Integer; vop_open_t =function(ap:p_vop_open_args):Integer; vop_close_t =function(ap:p_vop_close_args):Integer; vop_access_t =function(ap:p_vop_access_args):Integer; vop_accessx_t =function(ap:p_vop_accessx_args):Integer; vop_getattr_t =function(ap:p_vop_getattr_args):Integer; vop_setattr_t =function(ap:p_vop_setattr_args):Integer; vop_markatime_t =function(ap:p_vop_markatime_args):Integer; vop_read_t =function(ap:p_vop_read_args):Integer; vop_write_t =function(ap:p_vop_write_args):Integer; vop_ioctl_t =function(ap:p_vop_ioctl_args):Integer; vop_poll_t =function(ap:p_vop_poll_args):Integer; vop_kqfilter_t =function(ap:p_vop_kqfilter_args):Integer; vop_revoke_t =function(ap:p_vop_revoke_args):Integer; vop_fsync_t =function(ap:p_vop_fsync_args):Integer; vop_remove_t =function(ap:p_vop_remove_args):Integer; vop_link_t =function(ap:p_vop_link_args):Integer; vop_rename_t =function(ap:p_vop_rename_args):Integer; vop_mkdir_t =function(ap:p_vop_mkdir_args):Integer; vop_rmdir_t =function(ap:p_vop_rmdir_args):Integer; vop_symlink_t =function(ap:p_vop_symlink_args):Integer; vop_readdir_t =function(ap:p_vop_readdir_args):Integer; vop_readlink_t =function(ap:p_vop_readlink_args):Integer; vop_inactive_t =function(ap:p_vop_inactive_args):Integer; vop_reclaim_t =function(ap:p_vop_reclaim_args):Integer; vop_lock1_t =function(ap:p_vop_lock1_args):Integer; vop_unlock_t =function(ap:p_vop_unlock_args):Integer; vop_bmap_t =function(ap:p_vop_bmap_args):Integer; vop_strategy_t =function(ap:p_vop_strategy_args):Integer; vop_getwritemount_t =function(ap:p_vop_getwritemount_args):Integer; vop_print_t =function(ap:p_vop_print_args):Integer; vop_pathconf_t =function(ap:p_vop_pathconf_args):Integer; vop_advlock_t =function(ap:p_vop_advlock_args):Integer; vop_advlockasync_t =function(ap:p_vop_advlockasync_args):Integer; vop_advlockpurge_t =function(ap:p_vop_advlockpurge_args):Integer; vop_reallocblks_t =function(ap:p_vop_reallocblks_args):Integer; vop_getpages_t =function(ap:p_vop_getpages_args):Integer; vop_putpages_t =function(ap:p_vop_putpages_args):Integer; vop_getacl_t =function(ap:p_vop_getacl_args):Integer; vop_setacl_t =function(ap:p_vop_setacl_args):Integer; vop_aclcheck_t =function(ap:p_vop_aclcheck_args):Integer; vop_closeextattr_t =function(ap:p_vop_closeextattr_args):Integer; vop_getextattr_t =function(ap:p_vop_getextattr_args):Integer; vop_listextattr_t =function(ap:p_vop_listextattr_args):Integer; vop_openextattr_t =function(ap:p_vop_openextattr_args):Integer; vop_deleteextattr_t =function(ap:p_vop_deleteextattr_args):Integer; vop_setextattr_t =function(ap:p_vop_setextattr_args):Integer; vop_setlabel_t =function(ap:p_vop_setlabel_args):Integer; vop_vptofh_t =function(ap:p_vop_vptofh_args):Integer; vop_vptocnp_t =function(ap:p_vop_vptocnp_args):Integer; vop_allocate_t =function(ap:p_vop_allocate_args):Integer; vop_advise_t =function(ap:p_vop_advise_args):Integer; vop_unp_bind_t =function(ap:p_vop_unp_bind_args):Integer; vop_unp_connect_t =function(ap:p_vop_unp_connect_args):Integer; vop_unp_detach_t =function(ap:p_vop_unp_detach_args):Integer; vop_is_text_t =function(ap:p_vop_is_text_args):Integer; vop_set_text_t =function(ap:p_vop_set_text_args):Integer; vop_unset_text_t =function(ap:p_vop_unset_text_args):Integer; vop_get_writecount_t=function(ap:p_vop_get_writecount_args):Integer; vop_add_writecount_t=function(ap:p_vop_add_writecount_args):Integer; function VOP_ISLOCKED(vp:p_vnode):Integer; function VOP_LOOKUP(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer; function VOP_CACHEDLOOKUP(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer; function VOP_CREATE(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer; function VOP_WHITEOUT(dvp:p_vnode;cnp:p_componentname;flags:Integer):Integer; function VOP_MKNOD(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer; function VOP_OPEN(vp:p_vnode;mode:Integer;fp:p_file):Integer; function VOP_CLOSE(vp:p_vnode;fflag:Integer):Integer; function VOP_ACCESS(vp:p_vnode;accmode:accmode_t):Integer; function VOP_ACCESSX(vp:p_vnode;accmode:accmode_t):Integer; function VOP_GETATTR(vp:p_vnode;vap:p_vattr):Integer; function VOP_SETATTR(vp:p_vnode;vap:p_vattr):Integer; function VOP_MARKATIME(vp:p_vnode):Integer; function VOP_READ(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer; function VOP_WRITE(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer; function VOP_IOCTL(vp:p_vnode;command:PtrUint;data:Pointer;fflag:Integer):Integer; function VOP_POLL(vp:p_vnode;events:Integer):Integer; function VOP_KQFILTER(vp:p_vnode;kn:p_knote):Integer; function VOP_REVOKE(vp:p_vnode;flags:Integer):Integer; function VOP_FSYNC(vp:p_vnode;waitfor:Integer):Integer; function VOP_REMOVE(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer; function VOP_LINK(tdvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer; function VOP_RENAME(fdvp:p_vnode;fvp:p_vnode;fcnp:p_componentname;tdvp:p_vnode;tvp:p_vnode;tcnp:p_componentname):Integer; function VOP_MKDIR(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer; function VOP_RMDIR(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer; function VOP_SYMLINK(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr;target:PChar):Integer; function VOP_READDIR(vp:p_vnode;uio:p_uio;eofflag:PInteger;ncookies:PInteger;cookies:PPPtrUint):Integer; function VOP_READLINK(vp:p_vnode;uio:p_uio):Integer; function VOP_INACTIVE(vp:p_vnode):Integer; function VOP_RECLAIM(vp:p_vnode):Integer; function VOP_LOCK(vp:p_vnode;flags:Integer;_file:PChar;line:Integer):Integer; function VOP_UNLOCK(vp:p_vnode;flags:Integer):Integer; function VOP_BMAP(vp:p_vnode;bn:daddr_t;bop:pp_bufobj;bnp:p_daddr_t;runp:PInteger;runb:PInteger):Integer; function VOP_STRATEGY(vp:p_vnode;bp:p_buf):Integer; function VOP_GETWRITEMOUNT(vp:p_vnode;mpp:pp_mount):Integer; function VOP_PRINT(vp:p_vnode):Integer; function VOP_PATHCONF(vp:p_vnode;name:Integer;retval:PPtrUint):Integer; function VOP_ADVLOCK(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer):Integer; function VOP_ADVLOCKASYNC(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer;task:p_task;cookiep:PPointer):Integer; function VOP_ADVLOCKPURGE(vp:p_vnode):Integer; function VOP_REALLOCBLKS(vp:p_vnode;buflist:p_cluster_save):Integer; function VOP_GETPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;reqpage:Integer;offset:PtrUint):Integer; function VOP_PUTPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;sync:Integer;rtvals:PInteger;offset:PtrUint):Integer; function VOP_GETACL(vp:p_vnode;_type:acl_type_t;aclp:p_acl):Integer; function VOP_SETACL(vp:p_vnode;_type:acl_type_t;aclp:p_acl):Integer; function VOP_ACLCHECK(vp:p_vnode;_type:acl_type_t;aclp:p_acl):Integer; function VOP_CLOSEEXTATTR(vp:p_vnode;commit:Integer):Integer; function VOP_GETEXTATTR(vp:p_vnode;attrnamespace:Integer;name:PChar;uio:p_uio;size:PPtrUint):Integer; function VOP_LISTEXTATTR(vp:p_vnode;attrnamespace:Integer;uio:p_uio;size:PPtrUint):Integer; function VOP_OPENEXTATTR(vp:p_vnode):Integer; function VOP_DELETEEXTATTR(vp:p_vnode;attrnamespace:Integer;name:PChar):Integer; function VOP_SETEXTATTR(vp:p_vnode;attrnamespace:Integer;name:PChar;uio:p_uio):Integer; function VOP_SETLABEL(vp:p_vnode;_label:p_label):Integer; function VOP_VPTOFH(vp:p_vnode;fhp:p_fid):Integer; function VOP_VPTOCNP(vp:p_vnode;vpp:pp_vnode;buf:PChar;buflen:PInteger):Integer; function VOP_ALLOCATE(vp:p_vnode;offset:PPtrUint;len:PPtrUint):Integer; function VOP_ADVISE(vp:p_vnode;start:PtrUint;__end:PtrUint;advice:Integer):Integer; function VOP_UNP_BIND(vp:p_vnode;socket:p_socket):Integer; function VOP_UNP_CONNECT(vp:p_vnode;socket:pp_socket):Integer; function VOP_UNP_DETACH(vp:p_vnode):Integer; function VOP_IS_TEXT(vp:p_vnode):Integer; function VOP_SET_TEXT(vp:p_vnode):Integer; function VOP_UNSET_TEXT(vp:p_vnode):Integer; function VOP_GET_WRITECOUNT(vp:p_vnode;writecount:PInteger):Integer; function VOP_ADD_WRITECOUNT(vp:p_vnode;inc:Integer):Integer; implementation uses vfs_subr; function VOP_ISLOCKED(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_islocked<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ISLOCKED'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_islocked<>nil) then begin Result:=vop_islocked_t(v^.vop_islocked)(@vp); end else begin Result:=vop_islocked_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_LOOKUP(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer; var v:p_vop_vector; a:vop_lookup_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_lookup<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_LOOKUP'); a.a_dvp:=dvp; a.a_vpp:=vpp; a.a_cnp:=cnp; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_lookup<>nil) then begin Result:=vop_lookup_t(v^.vop_lookup)(@a); end else begin Result:=vop_lookup_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_CACHEDLOOKUP(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer; var v:p_vop_vector; a:vop_cachedlookup_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_cachedlookup<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_CACHEDLOOKUP'); a.a_dvp:=dvp; a.a_vpp:=vpp; a.a_cnp:=cnp; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_cachedlookup<>nil) then begin Result:=vop_cachedlookup_t(v^.vop_cachedlookup)(@a); end else begin Result:=vop_cachedlookup_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_CREATE(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer; var v:p_vop_vector; a:vop_create_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_create<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_CREATE'); a.a_dvp:=dvp; a.a_vpp:=vpp; a.a_cnp:=cnp; a.a_vap:=vap; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_create<>nil) then begin Result:=vop_create_t(v^.vop_create)(@a); end else begin Result:=vop_create_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_create_post(@a,Result); end; function VOP_WHITEOUT(dvp:p_vnode;cnp:p_componentname;flags:Integer):Integer; var v:p_vop_vector; a:vop_whiteout_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_whiteout<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_WHITEOUT'); a.a_dvp :=dvp; a.a_cnp :=cnp; a.a_flags:=flags; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_whiteout<>nil) then begin Result:=vop_whiteout_t(v^.vop_whiteout)(@a); end else begin Result:=vop_whiteout_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_MKNOD(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer; var v:p_vop_vector; a:vop_mknod_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_mknod<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_MKNOD'); a.a_dvp:=dvp; a.a_vpp:=vpp; a.a_cnp:=cnp; a.a_vap:=vap; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_mknod<>nil) then begin Result:=vop_mknod_t(v^.vop_mknod)(@a); end else begin Result:=vop_mknod_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_mknod_post(@a,Result); end; function VOP_OPEN(vp:p_vnode;mode:Integer;fp:p_file):Integer; var v:p_vop_vector; a:vop_open_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_open<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_OPEN'); a.a_vp :=vp; a.a_mode:=mode; a.a_fp :=fp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_open<>nil) then begin Result:=vop_open_t(v^.vop_open)(@a); end else begin Result:=vop_open_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_CLOSE(vp:p_vnode;fflag:Integer):Integer; var v:p_vop_vector; a:vop_close_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_close<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_CLOSE'); a.a_vp :=vp; a.a_fflag:=fflag; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_close<>nil) then begin Result:=vop_close_t(v^.vop_close)(@a); end else begin Result:=vop_close_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ACCESS(vp:p_vnode;accmode:accmode_t):Integer; var v:p_vop_vector; a:vop_access_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_access<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ACCESS'); a.a_vp :=vp; a.a_accmode:=accmode; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_access<>nil) then begin Result:=vop_access_t(v^.vop_access)(@a); end else begin Result:=vop_access_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ACCESSX(vp:p_vnode;accmode:accmode_t):Integer; var v:p_vop_vector; a:vop_accessx_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_accessx<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ACCESSX'); a.a_vp :=vp; a.a_accmode:=accmode; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_accessx<>nil) then begin Result:=vop_accessx_t(v^.vop_accessx)(@a); end else begin Result:=vop_accessx_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_GETATTR(vp:p_vnode;vap:p_vattr):Integer; var v:p_vop_vector; a:vop_getattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_getattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_GETATTR'); a.a_vp :=vp; a.a_vap:=vap; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_getattr<>nil) then begin Result:=vop_getattr_t(v^.vop_getattr)(@a); end else begin Result:=vop_getattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_SETATTR(vp:p_vnode;vap:p_vattr):Integer; var v:p_vop_vector; a:vop_setattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_setattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_SETATTR'); a.a_vp :=vp; a.a_vap:=vap; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_setattr<>nil) then begin Result:=vop_setattr_t(v^.vop_setattr)(@a); end else begin Result:=vop_setattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_setattr_post(@a,Result); end; function VOP_MARKATIME(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_markatime<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_MARKATIME'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_markatime<>nil) then begin Result:=vop_markatime_t(v^.vop_markatime)(@vp); end else begin Result:=vop_markatime_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_READ(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer; var v:p_vop_vector; a:vop_read_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_read<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_READ'); a.a_vp :=vp; a.a_uio :=uio; a.a_ioflag:=ioflag; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_read<>nil) then begin Result:=vop_read_t(v^.vop_read)(@a); end else begin Result:=vop_read_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_WRITE(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer; var osize,ooffset:Int64; v:p_vop_vector; a:vop_write_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_write<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_WRITE'); a.a_vp :=vp; a.a_uio :=uio; a.a_ioflag:=ioflag; VOP_WRITE_PRE(@a,osize,ooffset); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_write<>nil) then begin Result:=vop_write_t(v^.vop_write)(@a); end else begin Result:=vop_write_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); VOP_WRITE_POST(@a,Result,osize,ooffset); end; function VOP_IOCTL(vp:p_vnode;command:PtrUint;data:Pointer;fflag:Integer):Integer; var v:p_vop_vector; a:vop_ioctl_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_ioctl<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_IOCTL'); a.a_vp :=vp; a.a_command:=command; a.a_data :=data; a.a_fflag :=fflag; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_ioctl<>nil) then begin Result:=vop_ioctl_t(v^.vop_ioctl)(@a); end else begin Result:=vop_ioctl_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_POLL(vp:p_vnode;events:Integer):Integer; var v:p_vop_vector; a:vop_poll_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_poll<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_POLL'); a.a_vp :=vp; a.a_events:=events; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_poll<>nil) then begin Result:=vop_poll_t(v^.vop_poll)(@a); end else begin Result:=vop_poll_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_KQFILTER(vp:p_vnode;kn:p_knote):Integer; var v:p_vop_vector; a:vop_kqfilter_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_kqfilter<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_KQFILTER'); a.a_vp:=vp; a.a_kn:=kn; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_kqfilter<>nil) then begin Result:=vop_kqfilter_t(v^.vop_kqfilter)(@a); end else begin Result:=vop_kqfilter_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_REVOKE(vp:p_vnode;flags:Integer):Integer; var v:p_vop_vector; a:vop_revoke_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_revoke<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_REVOKE'); a.a_vp :=vp; a.a_flags:=flags; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_revoke<>nil) then begin Result:=vop_revoke_t(v^.vop_revoke)(@a); end else begin Result:=vop_revoke_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_FSYNC(vp:p_vnode;waitfor:Integer):Integer; var v:p_vop_vector; a:vop_fsync_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_fsync<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_FSYNC'); a.a_vp :=vp; a.a_waitfor:=waitfor; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_fsync<>nil) then begin Result:=vop_fsync_t(v^.vop_fsync)(@a); end else begin Result:=vop_fsync_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_REMOVE(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer; var v:p_vop_vector; a:vop_remove_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_remove<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_REMOVE'); a.a_dvp:=dvp; a.a_vp :=vp; a.a_cnp:=cnp; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_remove<>nil) then begin Result:=vop_remove_t(v^.vop_remove)(@a); end else begin Result:=vop_remove_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_remove_post(@a,Result); end; function VOP_LINK(tdvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer; var v:p_vop_vector; a:vop_link_args; s:Boolean; begin v:=tdvp^.v_op; while (v<>nil) do begin if (v^.vop_link<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_LINK'); a.a_tdvp:=tdvp; a.a_vp :=vp; a.a_cnp :=cnp; s:=VFS_PROLOGUE(tdvp^.v_mount); if (v^.vop_link<>nil) then begin Result:=vop_link_t(v^.vop_link)(@a); end else begin Result:=vop_link_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_link_post(@a,Result); end; function VOP_RENAME(fdvp:p_vnode;fvp:p_vnode;fcnp:p_componentname;tdvp:p_vnode;tvp:p_vnode;tcnp:p_componentname):Integer; var v:p_vop_vector; a:vop_rename_args; s:Boolean; begin v:=fdvp^.v_op; while (v<>nil) do begin if (v^.vop_rename<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_RENAME'); a.a_fdvp:=fdvp; a.a_fvp :=fvp; a.a_fcnp:=fcnp; a.a_tdvp:=tdvp; a.a_tvp :=tvp; a.a_tcnp:=tcnp; vop_rename_pre(@a); s:=VFS_PROLOGUE(fdvp^.v_mount); if (v^.vop_rename<>nil) then begin Result:=vop_rename_t(v^.vop_rename)(@a); end else begin Result:=vop_rename_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_rename_post(@a,Result); end; function VOP_MKDIR(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer; var v:p_vop_vector; a:vop_mkdir_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_mkdir<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_MKDIR'); a.a_dvp:=dvp; a.a_vpp:=vpp; a.a_cnp:=cnp; a.a_vap:=vap; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_mkdir<>nil) then begin Result:=vop_mkdir_t(v^.vop_mkdir)(@a); end else begin Result:=vop_mkdir_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_mkdir_post(@a,Result); end; function VOP_RMDIR(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer; var v:p_vop_vector; a:vop_rmdir_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_rmdir<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_RMDIR'); a.a_dvp:=dvp; a.a_vp :=vp; a.a_cnp:=cnp; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_rmdir<>nil) then begin Result:=vop_rmdir_t(v^.vop_rmdir)(@a); end else begin Result:=vop_rmdir_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_rmdir_post(@a,Result); end; function VOP_SYMLINK(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr;target:PChar):Integer; var v:p_vop_vector; a:vop_symlink_args; s:Boolean; begin v:=dvp^.v_op; while (v<>nil) do begin if (v^.vop_symlink<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_SYMLINK'); a.a_dvp :=dvp; a.a_vpp :=vpp; a.a_cnp :=cnp; a.a_vap :=vap; a.a_target:=target; s:=VFS_PROLOGUE(dvp^.v_mount); if (v^.vop_symlink<>nil) then begin Result:=vop_symlink_t(v^.vop_symlink)(@a); end else begin Result:=vop_symlink_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_symlink_post(@a,Result); end; function VOP_READDIR(vp:p_vnode;uio:p_uio;eofflag:PInteger;ncookies:PInteger;cookies:PPPtrUint):Integer; var v:p_vop_vector; a:vop_readdir_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_readdir<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_READDIR'); a.a_vp :=vp; a.a_uio :=uio; a.a_eofflag :=eofflag; a.a_ncookies:=ncookies; a.a_cookies :=cookies; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_readdir<>nil) then begin Result:=vop_readdir_t(v^.vop_readdir)(@a); end else begin Result:=vop_readdir_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_READLINK(vp:p_vnode;uio:p_uio):Integer; var v:p_vop_vector; a:vop_readlink_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_readlink<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_READLINK'); a.a_vp :=vp; a.a_uio:=uio; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_readlink<>nil) then begin Result:=vop_readlink_t(v^.vop_readlink)(@a); end else begin Result:=vop_readlink_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_INACTIVE(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_inactive<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_INACTIVE'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_inactive<>nil) then begin Result:=vop_inactive_t(v^.vop_inactive)(@vp); end else begin Result:=vop_inactive_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_RECLAIM(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_reclaim<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_RECLAIM'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_reclaim<>nil) then begin Result:=vop_reclaim_t(v^.vop_reclaim)(@vp); end else begin Result:=vop_reclaim_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_LOCK(vp:p_vnode;flags:Integer;_file:PChar;line:Integer):Integer; var v:p_vop_vector; a:vop_lock1_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_lock1<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_LOCK'); a.a_vp :=vp; a.a_flags:=flags; a.a_file :=_file; a.a_line :=line; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_lock1<>nil) then begin Result:=vop_lock1_t(v^.vop_lock1)(@a); end else begin Result:=vop_lock1_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_UNLOCK(vp:p_vnode;flags:Integer):Integer; var v:p_vop_vector; a:vop_unlock_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_unlock<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_UNLOCK'); a.a_vp :=vp; a.a_flags:=flags; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_unlock<>nil) then begin Result:=vop_unlock_t(v^.vop_unlock)(@a); end else begin Result:=vop_unlock_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_BMAP(vp:p_vnode;bn:daddr_t;bop:pp_bufobj;bnp:p_daddr_t;runp:PInteger;runb:PInteger):Integer; var v:p_vop_vector; a:vop_bmap_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_bmap<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_BMAP'); a.a_vp :=vp; a.a_bn :=bn; a.a_bop :=bop; a.a_bnp :=bnp; a.a_runp:=runp; a.a_runb:=runb; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_bmap<>nil) then begin Result:=vop_bmap_t(v^.vop_bmap)(@a); end else begin Result:=vop_bmap_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_STRATEGY(vp:p_vnode;bp:p_buf):Integer; var v:p_vop_vector; a:vop_strategy_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_strategy<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_STRATEGY'); a.a_vp:=vp; a.a_bp:=bp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_strategy<>nil) then begin Result:=vop_strategy_t(v^.vop_strategy)(@a); end else begin Result:=vop_strategy_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_GETWRITEMOUNT(vp:p_vnode;mpp:pp_mount):Integer; var v:p_vop_vector; a:vop_getwritemount_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_getwritemount<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_GETWRITEMOUNT'); a.a_vp :=vp; a.a_mpp:=mpp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_getwritemount<>nil) then begin Result:=vop_getwritemount_t(v^.vop_getwritemount)(@a); end else begin Result:=vop_getwritemount_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_PRINT(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_print<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_PRINT'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_print<>nil) then begin Result:=vop_print_t(v^.vop_print)(@vp); end else begin Result:=vop_print_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_PATHCONF(vp:p_vnode;name:Integer;retval:PPtrUint):Integer; var v:p_vop_vector; a:vop_pathconf_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_pathconf<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_PATHCONF'); a.a_vp :=vp; a.a_name :=name; a.a_retval:=retval; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_pathconf<>nil) then begin Result:=vop_pathconf_t(v^.vop_pathconf)(@a); end else begin Result:=vop_pathconf_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ADVLOCK(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer):Integer; var v:p_vop_vector; a:vop_advlock_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_advlock<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ADVLOCK'); a.a_vp :=vp; a.a_id :=id; a.a_op :=op; a.a_fl :=fl; a.a_flags:=flags; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_advlock<>nil) then begin Result:=vop_advlock_t(v^.vop_advlock)(@a); end else begin Result:=vop_advlock_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ADVLOCKASYNC(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer;task:p_task;cookiep:PPointer):Integer; var v:p_vop_vector; a:vop_advlockasync_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_advlockasync<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ADVLOCKASYNC'); a.a_vp :=vp; a.a_id :=id; a.a_op :=op; a.a_fl :=fl; a.a_flags :=flags; a.a_task :=task; a.a_cookiep:=cookiep; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_advlockasync<>nil) then begin Result:=vop_advlockasync_t(v^.vop_advlockasync)(@a); end else begin Result:=vop_advlockasync_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ADVLOCKPURGE(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_advlockpurge<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ADVLOCKPURGE'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_advlockpurge<>nil) then begin Result:=vop_advlockpurge_t(v^.vop_advlockpurge)(@vp); end else begin Result:=vop_advlockpurge_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_REALLOCBLKS(vp:p_vnode;buflist:p_cluster_save):Integer; var v:p_vop_vector; a:vop_reallocblks_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_reallocblks<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_REALLOCBLKS'); a.a_vp :=vp; a.a_buflist:=buflist; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_reallocblks<>nil) then begin Result:=vop_reallocblks_t(v^.vop_reallocblks)(@a); end else begin Result:=vop_reallocblks_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_GETPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;reqpage:Integer;offset:PtrUint):Integer; var v:p_vop_vector; a:vop_getpages_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_getpages<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_GETPAGES'); a.a_vp :=vp; a.a_m :=m; a.a_count :=count; a.a_reqpage:=reqpage; a.a_offset :=offset; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_getpages<>nil) then begin Result:=vop_getpages_t(v^.vop_getpages)(@a); end else begin Result:=vop_getpages_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_PUTPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;sync:Integer;rtvals:PInteger;offset:PtrUint):Integer; var v:p_vop_vector; a:vop_putpages_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_putpages<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_PUTPAGES'); a.a_vp :=vp; a.a_m :=m; a.a_count :=count; a.a_sync :=sync; a.a_rtvals:=rtvals; a.a_offset:=offset; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_putpages<>nil) then begin Result:=vop_putpages_t(v^.vop_putpages)(@a); end else begin Result:=vop_putpages_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_GETACL(vp:p_vnode;_type:acl_type_t;aclp:p_acl):Integer; var v:p_vop_vector; a:vop_getacl_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_getacl<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_GETACL'); a.a_vp :=vp; a.a_type:=_type; a.a_aclp:=aclp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_getacl<>nil) then begin Result:=vop_getacl_t(v^.vop_getacl)(@a); end else begin Result:=vop_getacl_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_SETACL(vp:p_vnode;_type:acl_type_t;aclp:p_acl):Integer; var v:p_vop_vector; a:vop_setacl_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_setacl<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_SETACL'); a.a_vp :=vp; a.a_type:=_type; a.a_aclp:=aclp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_setacl<>nil) then begin Result:=vop_setacl_t(v^.vop_setacl)(@a); end else begin Result:=vop_setacl_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ACLCHECK(vp:p_vnode;_type:acl_type_t;aclp:p_acl):Integer; var v:p_vop_vector; a:vop_aclcheck_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_aclcheck<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ACLCHECK'); a.a_vp :=vp; a.a_type:=_type; a.a_aclp:=aclp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_aclcheck<>nil) then begin Result:=vop_aclcheck_t(v^.vop_aclcheck)(@a); end else begin Result:=vop_aclcheck_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_CLOSEEXTATTR(vp:p_vnode;commit:Integer):Integer; var v:p_vop_vector; a:vop_closeextattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_closeextattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_CLOSEEXTATTR'); a.a_vp :=vp; a.a_commit:=commit; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_closeextattr<>nil) then begin Result:=vop_closeextattr_t(v^.vop_closeextattr)(@a); end else begin Result:=vop_closeextattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_GETEXTATTR(vp:p_vnode;attrnamespace:Integer;name:PChar;uio:p_uio;size:PPtrUint):Integer; var v:p_vop_vector; a:vop_getextattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_getextattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_GETEXTATTR'); a.a_vp :=vp; a.a_attrnamespace:=attrnamespace; a.a_name :=name; a.a_uio :=uio; a.a_size :=size; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_getextattr<>nil) then begin Result:=vop_getextattr_t(v^.vop_getextattr)(@a); end else begin Result:=vop_getextattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_LISTEXTATTR(vp:p_vnode;attrnamespace:Integer;uio:p_uio;size:PPtrUint):Integer; var v:p_vop_vector; a:vop_listextattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_listextattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_LISTEXTATTR'); a.a_vp :=vp; a.a_attrnamespace:=attrnamespace; a.a_uio :=uio; a.a_size :=size; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_listextattr<>nil) then begin Result:=vop_listextattr_t(v^.vop_listextattr)(@a); end else begin Result:=vop_listextattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_OPENEXTATTR(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_openextattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_OPENEXTATTR'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_openextattr<>nil) then begin Result:=vop_openextattr_t(v^.vop_openextattr)(@vp); end else begin Result:=vop_openextattr_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_DELETEEXTATTR(vp:p_vnode;attrnamespace:Integer;name:PChar):Integer; var v:p_vop_vector; a:vop_deleteextattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_deleteextattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_DELETEEXTATTR'); a.a_vp :=vp; a.a_attrnamespace:=attrnamespace; a.a_name :=name; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_deleteextattr<>nil) then begin Result:=vop_deleteextattr_t(v^.vop_deleteextattr)(@a); end else begin Result:=vop_deleteextattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_deleteextattr_post(@a,Result); end; function VOP_SETEXTATTR(vp:p_vnode;attrnamespace:Integer;name:PChar;uio:p_uio):Integer; var v:p_vop_vector; a:vop_setextattr_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_setextattr<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_SETEXTATTR'); a.a_vp :=vp; a.a_attrnamespace:=attrnamespace; a.a_name :=name; a.a_uio :=uio; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_setextattr<>nil) then begin Result:=vop_setextattr_t(v^.vop_setextattr)(@a); end else begin Result:=vop_setextattr_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); vop_setextattr_post(@a,Result); end; function VOP_SETLABEL(vp:p_vnode;_label:p_label):Integer; var v:p_vop_vector; a:vop_setlabel_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_setlabel<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_SETLABEL'); a.a_vp :=vp; a.a_label:=_label; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_setlabel<>nil) then begin Result:=vop_setlabel_t(v^.vop_setlabel)(@a); end else begin Result:=vop_setlabel_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_VPTOFH(vp:p_vnode;fhp:p_fid):Integer; var v:p_vop_vector; a:vop_vptofh_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_vptofh<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_VPTOFH'); a.a_vp :=vp; a.a_fhp:=fhp; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_vptofh<>nil) then begin Result:=vop_vptofh_t(v^.vop_vptofh)(@a); end else begin Result:=vop_vptofh_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_VPTOCNP(vp:p_vnode;vpp:pp_vnode;buf:PChar;buflen:PInteger):Integer; var v:p_vop_vector; a:vop_vptocnp_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_vptocnp<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_VPTOCNP'); a.a_vp :=vp; a.a_vpp :=vpp; a.a_buf :=buf; a.a_buflen:=buflen; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_vptocnp<>nil) then begin Result:=vop_vptocnp_t(v^.vop_vptocnp)(@a); end else begin Result:=vop_vptocnp_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ALLOCATE(vp:p_vnode;offset:PPtrUint;len:PPtrUint):Integer; var v:p_vop_vector; a:vop_allocate_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_allocate<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ALLOCATE'); a.a_vp :=vp; a.a_offset:=offset; a.a_len :=len; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_allocate<>nil) then begin Result:=vop_allocate_t(v^.vop_allocate)(@a); end else begin Result:=vop_allocate_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ADVISE(vp:p_vnode;start:PtrUint;__end:PtrUint;advice:Integer):Integer; var v:p_vop_vector; a:vop_advise_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_advise<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ADVISE'); a.a_vp :=vp; a.a_start :=start; a.a___end :=__end; a.a_advice:=advice; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_advise<>nil) then begin Result:=vop_advise_t(v^.vop_advise)(@a); end else begin Result:=vop_advise_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_UNP_BIND(vp:p_vnode;socket:p_socket):Integer; var v:p_vop_vector; a:vop_unp_bind_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_unp_bind<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_UNP_BIND'); a.a_vp :=vp; a.a_socket:=socket; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_unp_bind<>nil) then begin Result:=vop_unp_bind_t(v^.vop_unp_bind)(@a); end else begin Result:=vop_unp_bind_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_UNP_CONNECT(vp:p_vnode;socket:pp_socket):Integer; var v:p_vop_vector; a:vop_unp_connect_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_unp_connect<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_UNP_CONNECT'); a.a_vp :=vp; a.a_socket:=socket; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_unp_connect<>nil) then begin Result:=vop_unp_connect_t(v^.vop_unp_connect)(@a); end else begin Result:=vop_unp_connect_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_UNP_DETACH(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_unp_detach<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_UNP_DETACH'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_unp_detach<>nil) then begin Result:=vop_unp_detach_t(v^.vop_unp_detach)(@vp); end else begin Result:=vop_unp_detach_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_IS_TEXT(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_is_text<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_IS_TEXT'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_is_text<>nil) then begin Result:=vop_is_text_t(v^.vop_is_text)(@vp); end else begin Result:=vop_is_text_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_SET_TEXT(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_set_text<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_SET_TEXT'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_set_text<>nil) then begin Result:=vop_set_text_t(v^.vop_set_text)(@vp); end else begin Result:=vop_set_text_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_UNSET_TEXT(vp:p_vnode):Integer; var v:p_vop_vector; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_unset_text<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_UNSET_TEXT'); s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_unset_text<>nil) then begin Result:=vop_unset_text_t(v^.vop_unset_text)(@vp); end else begin Result:=vop_unset_text_t(v^.vop_bypass)(@vp); end; VFS_EPILOGUE(s); end; function VOP_GET_WRITECOUNT(vp:p_vnode;writecount:PInteger):Integer; var v:p_vop_vector; a:vop_get_writecount_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_get_writecount<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_GET_WRITECOUNT'); a.a_vp :=vp; a.a_writecount:=writecount; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_get_writecount<>nil) then begin Result:=vop_get_writecount_t(v^.vop_get_writecount)(@a); end else begin Result:=vop_get_writecount_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; function VOP_ADD_WRITECOUNT(vp:p_vnode;inc:Integer):Integer; var v:p_vop_vector; a:vop_add_writecount_args; s:Boolean; begin v:=vp^.v_op; while (v<>nil) do begin if (v^.vop_add_writecount<>nil) or (v^.vop_bypass<>nil) then Break; v:=v^.vop_default; end; Assert(v<>nil,'VOP_ADD_WRITECOUNT'); a.a_vp :=vp; a.a_inc:=inc; s:=VFS_PROLOGUE(vp^.v_mount); if (v^.vop_add_writecount<>nil) then begin Result:=vop_add_writecount_t(v^.vop_add_writecount)(@a); end else begin Result:=vop_add_writecount_t(v^.vop_bypass)(@a); end; VFS_EPILOGUE(s); end; end.