FPPS4/sys/vfs/vnode_if.pas

1827 lines
51 KiB
Plaintext

{This file is automatically generated by "vop_generator"}
unit vnode_if;
interface
{$mode objfpc}{$H+}
{$CALLING SysV_ABI_CDecl}
uses
sys_event,
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;
p_vop_islocked_args=^vop_islocked_args;
vop_islocked_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
p_vop_lookup_args=^vop_lookup_args;
vop_lookup_args=record
a_gen:p_vnodeop_desc;
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_gen:p_vnodeop_desc;
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_gen :p_vnodeop_desc;
a_dvp :p_vnode;
a_cnp :p_componentname;
a_flags:Integer;
end;
p_vop_mknod_args=^vop_mknod_args;
vop_mknod_args=record
a_gen:p_vnodeop_desc;
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_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_mode:Integer;
a_fp :p_file;
end;
p_vop_close_args=^vop_close_args;
vop_close_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_fflag:Integer;
end;
p_vop_access_args=^vop_access_args;
vop_access_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_accmode:accmode_t;
end;
p_vop_accessx_args=^vop_accessx_args;
vop_accessx_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_accmode:accmode_t;
end;
p_vop_getattr_args=^vop_getattr_args;
vop_getattr_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_vap:p_vattr;
end;
p_vop_setattr_args=^vop_setattr_args;
vop_setattr_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_vap:p_vattr;
end;
p_vop_markatime_args=^vop_markatime_args;
vop_markatime_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
p_vop_read_args=^vop_read_args;
vop_read_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_uio :p_uio;
a_ioflag:Integer;
end;
p_vop_write_args=^vop_write_args;
vop_write_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_uio :p_uio;
a_ioflag:Integer;
end;
p_vop_ioctl_args=^vop_ioctl_args;
vop_ioctl_args=record
a_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_events:Integer;
end;
p_vop_kqfilter_args=^vop_kqfilter_args;
vop_kqfilter_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_kn :p_knote;
end;
p_vop_revoke_args=^vop_revoke_args;
vop_revoke_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_flags:Integer;
end;
p_vop_fsync_args=^vop_fsync_args;
vop_fsync_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_waitfor:Integer;
end;
p_vop_remove_args=^vop_remove_args;
vop_remove_args=record
a_gen:p_vnodeop_desc;
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_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
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_gen:p_vnodeop_desc;
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_gen:p_vnodeop_desc;
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_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
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_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_uio:p_uio;
end;
p_vop_inactive_args=^vop_inactive_args;
vop_inactive_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
p_vop_reclaim_args=^vop_reclaim_args;
vop_reclaim_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
p_vop_lock1_args=^vop_lock1_args;
vop_lock1_args=record
a_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_flags:Integer;
end;
p_vop_bmap_args=^vop_bmap_args;
vop_bmap_args=record
a_gen :p_vnodeop_desc;
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_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_bp :p_buf;
end;
p_vop_getwritemount_args=^vop_getwritemount_args;
vop_getwritemount_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_mpp:pp_mount;
end;
p_vop_print_args=^vop_print_args;
vop_print_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
p_vop_pathconf_args=^vop_pathconf_args;
vop_pathconf_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_name :Integer;
a_retval:PPtrUint;
end;
p_vop_advlock_args=^vop_advlock_args;
vop_advlock_args=record
a_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
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_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
p_vop_reallocblks_args=^vop_reallocblks_args;
vop_reallocblks_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_buflist:p_cluster_save;
end;
p_vop_getpages_args=^vop_getpages_args;
vop_getpages_args=record
a_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
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_vptofh_args=^vop_vptofh_args;
vop_vptofh_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
a_fhp:p_fid;
end;
p_vop_vptocnp_args=^vop_vptocnp_args;
vop_vptocnp_args=record
a_gen :p_vnodeop_desc;
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_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_offset:PPtrUint;
a_len :PPtrUint;
end;
p_vop_unp_bind_args=^vop_unp_bind_args;
vop_unp_bind_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_socket:p_socket;
end;
p_vop_unp_connect_args=^vop_unp_connect_args;
vop_unp_connect_args=record
a_gen :p_vnodeop_desc;
a_vp :p_vnode;
a_socket:pp_socket;
end;
p_vop_unp_detach_args=^vop_unp_detach_args;
vop_unp_detach_args=record
a_gen:p_vnodeop_desc;
a_vp :p_vnode;
end;
vop_islocked_t =function(ap:p_vop_islocked_args):Integer;
vop_lookup_t =function(ap:p_vop_lookup_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_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_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;
function VOP_ISLOCKED (vp:p_vnode):Integer;
function VOP_LOOKUP (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_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_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;
const
vop_islocked_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_islocked_args(nil)^.a_vp)),Byte(-1));
vop_lookup_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_lookup_args(nil)^.a_dvp)),Byte(-1));
vop_create_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_create_args(nil)^.a_dvp)),Byte(-1));
vop_whiteout_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_whiteout_args(nil)^.a_dvp)),Byte(-1));
vop_mknod_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_mknod_args(nil)^.a_dvp)),Byte(-1));
vop_open_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_open_args(nil)^.a_vp)),Byte(-1));
vop_close_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_close_args(nil)^.a_vp)),Byte(-1));
vop_access_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_access_args(nil)^.a_vp)),Byte(-1));
vop_accessx_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_accessx_args(nil)^.a_vp)),Byte(-1));
vop_getattr_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_getattr_args(nil)^.a_vp)),Byte(-1));
vop_setattr_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_setattr_args(nil)^.a_vp)),Byte(-1));
vop_markatime_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_markatime_args(nil)^.a_vp)),Byte(-1));
vop_read_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_read_args(nil)^.a_vp)),Byte(-1));
vop_write_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_write_args(nil)^.a_vp)),Byte(-1));
vop_ioctl_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_ioctl_args(nil)^.a_vp)),Byte(-1));
vop_poll_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_poll_args(nil)^.a_vp)),Byte(-1));
vop_kqfilter_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_kqfilter_args(nil)^.a_vp)),Byte(-1));
vop_revoke_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_revoke_args(nil)^.a_vp)),Byte(-1));
vop_fsync_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_fsync_args(nil)^.a_vp)),Byte(-1));
vop_remove_vp_offsets :array[0..2] of Byte=(Byte(ptrint(@p_vop_remove_args(nil)^.a_dvp)),Byte(ptrint(@p_vop_remove_args(nil)^.a_vp)),Byte(-1));
vop_link_vp_offsets :array[0..2] of Byte=(Byte(ptrint(@p_vop_link_args(nil)^.a_tdvp)),Byte(ptrint(@p_vop_link_args(nil)^.a_vp)),Byte(-1));
vop_rename_vp_offsets :array[0..4] of Byte=(Byte(ptrint(@p_vop_rename_args(nil)^.a_fdvp)),Byte(ptrint(@p_vop_rename_args(nil)^.a_fvp)),Byte(ptrint(@p_vop_rename_args(nil)^.a_tdvp)),Byte(ptrint(@p_vop_rename_args(nil)^.a_tvp)),Byte(-1));
vop_mkdir_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_mkdir_args(nil)^.a_dvp)),Byte(-1));
vop_rmdir_vp_offsets :array[0..2] of Byte=(Byte(ptrint(@p_vop_rmdir_args(nil)^.a_dvp)),Byte(ptrint(@p_vop_rmdir_args(nil)^.a_vp)),Byte(-1));
vop_symlink_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_symlink_args(nil)^.a_dvp)),Byte(-1));
vop_readdir_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_readdir_args(nil)^.a_vp)),Byte(-1));
vop_readlink_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_readlink_args(nil)^.a_vp)),Byte(-1));
vop_inactive_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_inactive_args(nil)^.a_vp)),Byte(-1));
vop_reclaim_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_reclaim_args(nil)^.a_vp)),Byte(-1));
vop_lock1_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_lock1_args(nil)^.a_vp)),Byte(-1));
vop_unlock_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_unlock_args(nil)^.a_vp)),Byte(-1));
vop_bmap_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_bmap_args(nil)^.a_vp)),Byte(-1));
vop_strategy_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_strategy_args(nil)^.a_vp)),Byte(-1));
vop_getwritemount_vp_offsets:array[0..1] of Byte=(Byte(ptrint(@p_vop_getwritemount_args(nil)^.a_vp)),Byte(-1));
vop_print_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_print_args(nil)^.a_vp)),Byte(-1));
vop_pathconf_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_pathconf_args(nil)^.a_vp)),Byte(-1));
vop_advlock_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_advlock_args(nil)^.a_vp)),Byte(-1));
vop_advlockasync_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_advlockasync_args(nil)^.a_vp)),Byte(-1));
vop_advlockpurge_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_advlockpurge_args(nil)^.a_vp)),Byte(-1));
vop_reallocblks_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_reallocblks_args(nil)^.a_vp)),Byte(-1));
vop_getpages_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_getpages_args(nil)^.a_vp)),Byte(-1));
vop_putpages_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_putpages_args(nil)^.a_vp)),Byte(-1));
vop_vptofh_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_vptofh_args(nil)^.a_vp)),Byte(-1));
vop_vptocnp_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_vptocnp_args(nil)^.a_vp)),Byte(-1));
vop_allocate_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_allocate_args(nil)^.a_vp)),Byte(-1));
vop_unp_bind_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_unp_bind_args(nil)^.a_vp)),Byte(-1));
vop_unp_connect_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_unp_connect_args(nil)^.a_vp)),Byte(-1));
vop_unp_detach_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_unp_detach_args(nil)^.a_vp)),Byte(-1));
vop_default_desc:t_vnodeop_desc=(
vdesc_name :'default';
vdesc_call :nil;
vdesc_vp_offsets :nil;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_islocked_desc:t_vnodeop_desc=(
vdesc_name :'vop_islocked';
vdesc_call :@p_vop_vector(nil)^.vop_islocked;
vdesc_vp_offsets :@vop_islocked_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_lookup_desc:t_vnodeop_desc=(
vdesc_name :'vop_lookup';
vdesc_call :@p_vop_vector(nil)^.vop_lookup;
vdesc_vp_offsets :@vop_lookup_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :Integer(ptrint(@p_vop_lookup_args(nil)^.a_vpp));
);
vop_create_desc:t_vnodeop_desc=(
vdesc_name :'vop_create';
vdesc_call :@p_vop_vector(nil)^.vop_create;
vdesc_vp_offsets :@vop_create_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :Integer(ptrint(@p_vop_create_args(nil)^.a_vpp));
);
vop_whiteout_desc:t_vnodeop_desc=(
vdesc_name :'vop_whiteout';
vdesc_call :@p_vop_vector(nil)^.vop_whiteout;
vdesc_vp_offsets :@vop_whiteout_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_mknod_desc:t_vnodeop_desc=(
vdesc_name :'vop_mknod';
vdesc_call :@p_vop_vector(nil)^.vop_mknod;
vdesc_vp_offsets :@vop_mknod_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :Integer(ptrint(@p_vop_mknod_args(nil)^.a_vpp));
);
vop_open_desc:t_vnodeop_desc=(
vdesc_name :'vop_open';
vdesc_call :@p_vop_vector(nil)^.vop_open;
vdesc_vp_offsets :@vop_open_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_close_desc:t_vnodeop_desc=(
vdesc_name :'vop_close';
vdesc_call :@p_vop_vector(nil)^.vop_close;
vdesc_vp_offsets :@vop_close_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_access_desc:t_vnodeop_desc=(
vdesc_name :'vop_access';
vdesc_call :@p_vop_vector(nil)^.vop_access;
vdesc_vp_offsets :@vop_access_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_accessx_desc:t_vnodeop_desc=(
vdesc_name :'vop_accessx';
vdesc_call :@p_vop_vector(nil)^.vop_accessx;
vdesc_vp_offsets :@vop_accessx_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_getattr_desc:t_vnodeop_desc=(
vdesc_name :'vop_getattr';
vdesc_call :@p_vop_vector(nil)^.vop_getattr;
vdesc_vp_offsets :@vop_getattr_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_setattr_desc:t_vnodeop_desc=(
vdesc_name :'vop_setattr';
vdesc_call :@p_vop_vector(nil)^.vop_setattr;
vdesc_vp_offsets :@vop_setattr_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_markatime_desc:t_vnodeop_desc=(
vdesc_name :'vop_markatime';
vdesc_call :@p_vop_vector(nil)^.vop_markatime;
vdesc_vp_offsets :@vop_markatime_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_read_desc:t_vnodeop_desc=(
vdesc_name :'vop_read';
vdesc_call :@p_vop_vector(nil)^.vop_read;
vdesc_vp_offsets :@vop_read_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_write_desc:t_vnodeop_desc=(
vdesc_name :'vop_write';
vdesc_call :@p_vop_vector(nil)^.vop_write;
vdesc_vp_offsets :@vop_write_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_ioctl_desc:t_vnodeop_desc=(
vdesc_name :'vop_ioctl';
vdesc_call :@p_vop_vector(nil)^.vop_ioctl;
vdesc_vp_offsets :@vop_ioctl_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_poll_desc:t_vnodeop_desc=(
vdesc_name :'vop_poll';
vdesc_call :@p_vop_vector(nil)^.vop_poll;
vdesc_vp_offsets :@vop_poll_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_kqfilter_desc:t_vnodeop_desc=(
vdesc_name :'vop_kqfilter';
vdesc_call :@p_vop_vector(nil)^.vop_kqfilter;
vdesc_vp_offsets :@vop_kqfilter_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_revoke_desc:t_vnodeop_desc=(
vdesc_name :'vop_revoke';
vdesc_call :@p_vop_vector(nil)^.vop_revoke;
vdesc_vp_offsets :@vop_revoke_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_fsync_desc:t_vnodeop_desc=(
vdesc_name :'vop_fsync';
vdesc_call :@p_vop_vector(nil)^.vop_fsync;
vdesc_vp_offsets :@vop_fsync_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_remove_desc:t_vnodeop_desc=(
vdesc_name :'vop_remove';
vdesc_call :@p_vop_vector(nil)^.vop_remove;
vdesc_vp_offsets :@vop_remove_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_link_desc:t_vnodeop_desc=(
vdesc_name :'vop_link';
vdesc_call :@p_vop_vector(nil)^.vop_link;
vdesc_vp_offsets :@vop_link_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_rename_desc:t_vnodeop_desc=(
vdesc_name :'vop_rename';
vdesc_call :@p_vop_vector(nil)^.vop_rename;
vdesc_vp_offsets :@vop_rename_vp_offsets;
vdesc_flags :VDESC_VP0_WILLRELE or VDESC_VP1_WILLRELE or VDESC_VP2_WILLRELE or VDESC_VP3_WILLRELE;
vdesc_vpp_offset :-1;
);
vop_mkdir_desc:t_vnodeop_desc=(
vdesc_name :'vop_mkdir';
vdesc_call :@p_vop_vector(nil)^.vop_mkdir;
vdesc_vp_offsets :@vop_mkdir_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :Integer(ptrint(@p_vop_mkdir_args(nil)^.a_vpp));
);
vop_rmdir_desc:t_vnodeop_desc=(
vdesc_name :'vop_rmdir';
vdesc_call :@p_vop_vector(nil)^.vop_rmdir;
vdesc_vp_offsets :@vop_rmdir_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_symlink_desc:t_vnodeop_desc=(
vdesc_name :'vop_symlink';
vdesc_call :@p_vop_vector(nil)^.vop_symlink;
vdesc_vp_offsets :@vop_symlink_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :Integer(ptrint(@p_vop_symlink_args(nil)^.a_vpp));
);
vop_readdir_desc:t_vnodeop_desc=(
vdesc_name :'vop_readdir';
vdesc_call :@p_vop_vector(nil)^.vop_readdir;
vdesc_vp_offsets :@vop_readdir_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_readlink_desc:t_vnodeop_desc=(
vdesc_name :'vop_readlink';
vdesc_call :@p_vop_vector(nil)^.vop_readlink;
vdesc_vp_offsets :@vop_readlink_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_inactive_desc:t_vnodeop_desc=(
vdesc_name :'vop_inactive';
vdesc_call :@p_vop_vector(nil)^.vop_inactive;
vdesc_vp_offsets :@vop_inactive_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_reclaim_desc:t_vnodeop_desc=(
vdesc_name :'vop_reclaim';
vdesc_call :@p_vop_vector(nil)^.vop_reclaim;
vdesc_vp_offsets :@vop_reclaim_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_lock1_desc:t_vnodeop_desc=(
vdesc_name :'vop_lock1';
vdesc_call :@p_vop_vector(nil)^.vop_lock1;
vdesc_vp_offsets :@vop_lock1_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_unlock_desc:t_vnodeop_desc=(
vdesc_name :'vop_unlock';
vdesc_call :@p_vop_vector(nil)^.vop_unlock;
vdesc_vp_offsets :@vop_unlock_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_bmap_desc:t_vnodeop_desc=(
vdesc_name :'vop_bmap';
vdesc_call :@p_vop_vector(nil)^.vop_bmap;
vdesc_vp_offsets :@vop_bmap_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_strategy_desc:t_vnodeop_desc=(
vdesc_name :'vop_strategy';
vdesc_call :@p_vop_vector(nil)^.vop_strategy;
vdesc_vp_offsets :@vop_strategy_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_getwritemount_desc:t_vnodeop_desc=(
vdesc_name :'vop_getwritemount';
vdesc_call :@p_vop_vector(nil)^.vop_getwritemount;
vdesc_vp_offsets :@vop_getwritemount_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_print_desc:t_vnodeop_desc=(
vdesc_name :'vop_print';
vdesc_call :@p_vop_vector(nil)^.vop_print;
vdesc_vp_offsets :@vop_print_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_pathconf_desc:t_vnodeop_desc=(
vdesc_name :'vop_pathconf';
vdesc_call :@p_vop_vector(nil)^.vop_pathconf;
vdesc_vp_offsets :@vop_pathconf_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_advlock_desc:t_vnodeop_desc=(
vdesc_name :'vop_advlock';
vdesc_call :@p_vop_vector(nil)^.vop_advlock;
vdesc_vp_offsets :@vop_advlock_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_advlockasync_desc:t_vnodeop_desc=(
vdesc_name :'vop_advlockasync';
vdesc_call :@p_vop_vector(nil)^.vop_advlockasync;
vdesc_vp_offsets :@vop_advlockasync_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_advlockpurge_desc:t_vnodeop_desc=(
vdesc_name :'vop_advlockpurge';
vdesc_call :@p_vop_vector(nil)^.vop_advlockpurge;
vdesc_vp_offsets :@vop_advlockpurge_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_reallocblks_desc:t_vnodeop_desc=(
vdesc_name :'vop_reallocblks';
vdesc_call :@p_vop_vector(nil)^.vop_reallocblks;
vdesc_vp_offsets :@vop_reallocblks_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_getpages_desc:t_vnodeop_desc=(
vdesc_name :'vop_getpages';
vdesc_call :@p_vop_vector(nil)^.vop_getpages;
vdesc_vp_offsets :@vop_getpages_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_putpages_desc:t_vnodeop_desc=(
vdesc_name :'vop_putpages';
vdesc_call :@p_vop_vector(nil)^.vop_putpages;
vdesc_vp_offsets :@vop_putpages_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_vptofh_desc:t_vnodeop_desc=(
vdesc_name :'vop_vptofh';
vdesc_call :@p_vop_vector(nil)^.vop_vptofh;
vdesc_vp_offsets :@vop_vptofh_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_vptocnp_desc:t_vnodeop_desc=(
vdesc_name :'vop_vptocnp';
vdesc_call :@p_vop_vector(nil)^.vop_vptocnp;
vdesc_vp_offsets :@vop_vptocnp_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :Integer(ptrint(@p_vop_vptocnp_args(nil)^.a_vpp));
);
vop_allocate_desc:t_vnodeop_desc=(
vdesc_name :'vop_allocate';
vdesc_call :@p_vop_vector(nil)^.vop_allocate;
vdesc_vp_offsets :@vop_allocate_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_unp_bind_desc:t_vnodeop_desc=(
vdesc_name :'vop_unp_bind';
vdesc_call :@p_vop_vector(nil)^.vop_unp_bind;
vdesc_vp_offsets :@vop_unp_bind_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_unp_connect_desc:t_vnodeop_desc=(
vdesc_name :'vop_unp_connect';
vdesc_call :@p_vop_vector(nil)^.vop_unp_connect;
vdesc_vp_offsets :@vop_unp_connect_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
vop_unp_detach_desc:t_vnodeop_desc=(
vdesc_name :'vop_unp_detach';
vdesc_call :@p_vop_vector(nil)^.vop_unp_detach;
vdesc_vp_offsets :@vop_unp_detach_vp_offsets;
vdesc_flags :0;
vdesc_vpp_offset :-1;
);
implementation
function get_vp_cb(vp:p_vnode;offset:Pointer):Pointer; inline;
var
v:p_vop_vector;
p:Pointer;
begin
Result:=nil;
if (vp=nil) then Exit;
v:=vp^.v_op;
while (v<>nil) do
begin
p:=PPointer(Pointer(v)+ptrint(offset))^;
if (p<>nil) then
begin
Exit(p);
end;
p:=v^.vop_bypass;
if (p<>nil) then
begin
Exit(p);
end;
v:=v^.vop_default;
end;
end;
function VOP_ISLOCKED(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_islocked_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_islocked_desc.vdesc_call);
Assert(c<>nil,'VOP_ISLOCKED');
a.a_gen:=@vop_islocked_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_islocked_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_LOOKUP(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer;
var
c:Pointer;
a:vop_lookup_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_lookup_desc.vdesc_call);
Assert(c<>nil,'VOP_LOOKUP');
a.a_gen:=@vop_lookup_desc;
a.a_dvp:=dvp;
a.a_vpp:=vpp;
a.a_cnp:=cnp;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_lookup_t(c)(@a);
VFS_EPILOGUE(s);
end;
procedure vop_create_post(ap:p_vop_create_args;rc:Integer); external;
function VOP_CREATE(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
var
c:Pointer;
a:vop_create_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_create_desc.vdesc_call);
Assert(c<>nil,'VOP_CREATE');
a.a_gen:=@vop_create_desc;
a.a_dvp:=dvp;
a.a_vpp:=vpp;
a.a_cnp:=cnp;
a.a_vap:=vap;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_create_t(c)(@a);
VFS_EPILOGUE(s);
vop_create_post(@a,Result);
end;
function VOP_WHITEOUT(dvp:p_vnode;cnp:p_componentname;flags:Integer):Integer;
var
c:Pointer;
a:vop_whiteout_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_whiteout_desc.vdesc_call);
Assert(c<>nil,'VOP_WHITEOUT');
a.a_gen :=@vop_whiteout_desc;
a.a_dvp :=dvp;
a.a_cnp :=cnp;
a.a_flags:=flags;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_whiteout_t(c)(@a);
VFS_EPILOGUE(s);
end;
procedure vop_mknod_post(ap:p_vop_mknod_args;rc:Integer); external;
function VOP_MKNOD(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
var
c:Pointer;
a:vop_mknod_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_mknod_desc.vdesc_call);
Assert(c<>nil,'VOP_MKNOD');
a.a_gen:=@vop_mknod_desc;
a.a_dvp:=dvp;
a.a_vpp:=vpp;
a.a_cnp:=cnp;
a.a_vap:=vap;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_mknod_t(c)(@a);
VFS_EPILOGUE(s);
vop_mknod_post(@a,Result);
end;
function VOP_OPEN(vp:p_vnode;mode:Integer;fp:p_file):Integer;
var
c:Pointer;
a:vop_open_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_open_desc.vdesc_call);
Assert(c<>nil,'VOP_OPEN');
a.a_gen :=@vop_open_desc;
a.a_vp :=vp;
a.a_mode:=mode;
a.a_fp :=fp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_open_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_CLOSE(vp:p_vnode;fflag:Integer):Integer;
var
c:Pointer;
a:vop_close_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_close_desc.vdesc_call);
Assert(c<>nil,'VOP_CLOSE');
a.a_gen :=@vop_close_desc;
a.a_vp :=vp;
a.a_fflag:=fflag;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_close_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_ACCESS(vp:p_vnode;accmode:accmode_t):Integer;
var
c:Pointer;
a:vop_access_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_access_desc.vdesc_call);
Assert(c<>nil,'VOP_ACCESS');
a.a_gen :=@vop_access_desc;
a.a_vp :=vp;
a.a_accmode:=accmode;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_access_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_ACCESSX(vp:p_vnode;accmode:accmode_t):Integer;
var
c:Pointer;
a:vop_accessx_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_accessx_desc.vdesc_call);
Assert(c<>nil,'VOP_ACCESSX');
a.a_gen :=@vop_accessx_desc;
a.a_vp :=vp;
a.a_accmode:=accmode;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_accessx_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_GETATTR(vp:p_vnode;vap:p_vattr):Integer;
var
c:Pointer;
a:vop_getattr_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_getattr_desc.vdesc_call);
Assert(c<>nil,'VOP_GETATTR');
a.a_gen:=@vop_getattr_desc;
a.a_vp :=vp;
a.a_vap:=vap;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_getattr_t(c)(@a);
VFS_EPILOGUE(s);
end;
procedure vop_setattr_post(ap:p_vop_setattr_args;rc:Integer); external;
function VOP_SETATTR(vp:p_vnode;vap:p_vattr):Integer;
var
c:Pointer;
a:vop_setattr_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_setattr_desc.vdesc_call);
Assert(c<>nil,'VOP_SETATTR');
a.a_gen:=@vop_setattr_desc;
a.a_vp :=vp;
a.a_vap:=vap;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_setattr_t(c)(@a);
VFS_EPILOGUE(s);
vop_setattr_post(@a,Result);
end;
function VOP_MARKATIME(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_markatime_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_markatime_desc.vdesc_call);
Assert(c<>nil,'VOP_MARKATIME');
a.a_gen:=@vop_markatime_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_markatime_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_READ(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer;
var
c:Pointer;
a:vop_read_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_read_desc.vdesc_call);
Assert(c<>nil,'VOP_READ');
a.a_gen :=@vop_read_desc;
a.a_vp :=vp;
a.a_uio :=uio;
a.a_ioflag:=ioflag;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_read_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_WRITE_PRE(ap:p_vop_write_args;var osize,ooffset:Int64):Integer; external;
procedure VOP_WRITE_POST(ap:p_vop_write_args;ret:Integer;var osize,ooffset:Int64); external;
function VOP_WRITE(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer;
var
osize,ooffset:Int64;
c:Pointer;
a:vop_write_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_write_desc.vdesc_call);
Assert(c<>nil,'VOP_WRITE');
a.a_gen :=@vop_write_desc;
a.a_vp :=vp;
a.a_uio :=uio;
a.a_ioflag:=ioflag;
osize :=0;
ooffset:=0;
VOP_WRITE_PRE(@a,osize,ooffset);
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_write_t(c)(@a);
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
c:Pointer;
a:vop_ioctl_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_ioctl_desc.vdesc_call);
Assert(c<>nil,'VOP_IOCTL');
a.a_gen :=@vop_ioctl_desc;
a.a_vp :=vp;
a.a_command:=command;
a.a_data :=data;
a.a_fflag :=fflag;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_ioctl_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_POLL(vp:p_vnode;events:Integer):Integer;
var
c:Pointer;
a:vop_poll_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_poll_desc.vdesc_call);
Assert(c<>nil,'VOP_POLL');
a.a_gen :=@vop_poll_desc;
a.a_vp :=vp;
a.a_events:=events;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_poll_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_KQFILTER(vp:p_vnode;kn:p_knote):Integer;
var
c:Pointer;
a:vop_kqfilter_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_kqfilter_desc.vdesc_call);
Assert(c<>nil,'VOP_KQFILTER');
a.a_gen:=@vop_kqfilter_desc;
a.a_vp :=vp;
a.a_kn :=kn;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_kqfilter_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_REVOKE(vp:p_vnode;flags:Integer):Integer;
var
c:Pointer;
a:vop_revoke_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_revoke_desc.vdesc_call);
Assert(c<>nil,'VOP_REVOKE');
a.a_gen :=@vop_revoke_desc;
a.a_vp :=vp;
a.a_flags:=flags;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_revoke_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_FSYNC(vp:p_vnode;waitfor:Integer):Integer;
var
c:Pointer;
a:vop_fsync_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_fsync_desc.vdesc_call);
Assert(c<>nil,'VOP_FSYNC');
a.a_gen :=@vop_fsync_desc;
a.a_vp :=vp;
a.a_waitfor:=waitfor;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_fsync_t(c)(@a);
VFS_EPILOGUE(s);
end;
procedure vop_remove_post(ap:p_vop_remove_args;rc:Integer); external;
function VOP_REMOVE(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
var
c:Pointer;
a:vop_remove_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_remove_desc.vdesc_call);
Assert(c<>nil,'VOP_REMOVE');
a.a_gen:=@vop_remove_desc;
a.a_dvp:=dvp;
a.a_vp :=vp;
a.a_cnp:=cnp;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_remove_t(c)(@a);
VFS_EPILOGUE(s);
vop_remove_post(@a,Result);
end;
procedure vop_link_post(ap:p_vop_link_args;rc:Integer); external;
function VOP_LINK(tdvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
var
c:Pointer;
a:vop_link_args;
s:Boolean;
begin
c:=get_vp_cb(tdvp,vop_link_desc.vdesc_call);
Assert(c<>nil,'VOP_LINK');
a.a_gen :=@vop_link_desc;
a.a_tdvp:=tdvp;
a.a_vp :=vp;
a.a_cnp :=cnp;
s:=VFS_PROLOGUE(tdvp^.v_mount);
Result:=vop_link_t(c)(@a);
VFS_EPILOGUE(s);
vop_link_post(@a,Result);
end;
procedure vop_rename_pre (ap:p_vop_rename_args); external;
procedure vop_rename_post(ap:p_vop_rename_args;rc:Integer); external;
function VOP_RENAME(fdvp:p_vnode;fvp:p_vnode;fcnp:p_componentname;tdvp:p_vnode;tvp:p_vnode;tcnp:p_componentname):Integer;
var
c:Pointer;
a:vop_rename_args;
s:Boolean;
begin
c:=get_vp_cb(fdvp,vop_rename_desc.vdesc_call);
Assert(c<>nil,'VOP_RENAME');
a.a_gen :=@vop_rename_desc;
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);
Result:=vop_rename_t(c)(@a);
VFS_EPILOGUE(s);
vop_rename_post(@a,Result);
end;
procedure vop_mkdir_post(ap:p_vop_mkdir_args;rc:Integer); external;
function VOP_MKDIR(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
var
c:Pointer;
a:vop_mkdir_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_mkdir_desc.vdesc_call);
Assert(c<>nil,'VOP_MKDIR');
a.a_gen:=@vop_mkdir_desc;
a.a_dvp:=dvp;
a.a_vpp:=vpp;
a.a_cnp:=cnp;
a.a_vap:=vap;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_mkdir_t(c)(@a);
VFS_EPILOGUE(s);
vop_mkdir_post(@a,Result);
end;
procedure vop_rmdir_post(ap:p_vop_rmdir_args;rc:Integer); external;
function VOP_RMDIR(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
var
c:Pointer;
a:vop_rmdir_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_rmdir_desc.vdesc_call);
Assert(c<>nil,'VOP_RMDIR');
a.a_gen:=@vop_rmdir_desc;
a.a_dvp:=dvp;
a.a_vp :=vp;
a.a_cnp:=cnp;
s:=VFS_PROLOGUE(dvp^.v_mount);
Result:=vop_rmdir_t(c)(@a);
VFS_EPILOGUE(s);
vop_rmdir_post(@a,Result);
end;
procedure vop_symlink_post(ap:p_vop_symlink_args;rc:Integer); external;
function VOP_SYMLINK(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr;target:PChar):Integer;
var
c:Pointer;
a:vop_symlink_args;
s:Boolean;
begin
c:=get_vp_cb(dvp,vop_symlink_desc.vdesc_call);
Assert(c<>nil,'VOP_SYMLINK');
a.a_gen :=@vop_symlink_desc;
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);
Result:=vop_symlink_t(c)(@a);
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
c:Pointer;
a:vop_readdir_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_readdir_desc.vdesc_call);
Assert(c<>nil,'VOP_READDIR');
a.a_gen :=@vop_readdir_desc;
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);
Result:=vop_readdir_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_READLINK(vp:p_vnode;uio:p_uio):Integer;
var
c:Pointer;
a:vop_readlink_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_readlink_desc.vdesc_call);
Assert(c<>nil,'VOP_READLINK');
a.a_gen:=@vop_readlink_desc;
a.a_vp :=vp;
a.a_uio:=uio;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_readlink_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_INACTIVE(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_inactive_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_inactive_desc.vdesc_call);
Assert(c<>nil,'VOP_INACTIVE');
a.a_gen:=@vop_inactive_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_inactive_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_RECLAIM(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_reclaim_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_reclaim_desc.vdesc_call);
Assert(c<>nil,'VOP_RECLAIM');
a.a_gen:=@vop_reclaim_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_reclaim_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_LOCK(vp:p_vnode;flags:Integer;_file:PChar;line:Integer):Integer;
var
c:Pointer;
a:vop_lock1_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_lock1_desc.vdesc_call);
Assert(c<>nil,'VOP_LOCK');
a.a_gen :=@vop_lock1_desc;
a.a_vp :=vp;
a.a_flags:=flags;
a.a_file :=_file;
a.a_line :=line;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_lock1_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_UNLOCK(vp:p_vnode;flags:Integer):Integer;
var
c:Pointer;
a:vop_unlock_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_unlock_desc.vdesc_call);
Assert(c<>nil,'VOP_UNLOCK');
a.a_gen :=@vop_unlock_desc;
a.a_vp :=vp;
a.a_flags:=flags;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_unlock_t(c)(@a);
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
c:Pointer;
a:vop_bmap_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_bmap_desc.vdesc_call);
Assert(c<>nil,'VOP_BMAP');
a.a_gen :=@vop_bmap_desc;
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);
Result:=vop_bmap_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_STRATEGY(vp:p_vnode;bp:p_buf):Integer;
var
c:Pointer;
a:vop_strategy_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_strategy_desc.vdesc_call);
Assert(c<>nil,'VOP_STRATEGY');
a.a_gen:=@vop_strategy_desc;
a.a_vp :=vp;
a.a_bp :=bp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_strategy_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_GETWRITEMOUNT(vp:p_vnode;mpp:pp_mount):Integer;
var
c:Pointer;
a:vop_getwritemount_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_getwritemount_desc.vdesc_call);
Assert(c<>nil,'VOP_GETWRITEMOUNT');
a.a_gen:=@vop_getwritemount_desc;
a.a_vp :=vp;
a.a_mpp:=mpp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_getwritemount_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_PRINT(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_print_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_print_desc.vdesc_call);
Assert(c<>nil,'VOP_PRINT');
a.a_gen:=@vop_print_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_print_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_PATHCONF(vp:p_vnode;name:Integer;retval:PPtrUint):Integer;
var
c:Pointer;
a:vop_pathconf_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_pathconf_desc.vdesc_call);
Assert(c<>nil,'VOP_PATHCONF');
a.a_gen :=@vop_pathconf_desc;
a.a_vp :=vp;
a.a_name :=name;
a.a_retval:=retval;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_pathconf_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_ADVLOCK(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer):Integer;
var
c:Pointer;
a:vop_advlock_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_advlock_desc.vdesc_call);
Assert(c<>nil,'VOP_ADVLOCK');
a.a_gen :=@vop_advlock_desc;
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);
Result:=vop_advlock_t(c)(@a);
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
c:Pointer;
a:vop_advlockasync_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_advlockasync_desc.vdesc_call);
Assert(c<>nil,'VOP_ADVLOCKASYNC');
a.a_gen :=@vop_advlockasync_desc;
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);
Result:=vop_advlockasync_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_ADVLOCKPURGE(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_advlockpurge_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_advlockpurge_desc.vdesc_call);
Assert(c<>nil,'VOP_ADVLOCKPURGE');
a.a_gen:=@vop_advlockpurge_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_advlockpurge_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_REALLOCBLKS(vp:p_vnode;buflist:p_cluster_save):Integer;
var
c:Pointer;
a:vop_reallocblks_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_reallocblks_desc.vdesc_call);
Assert(c<>nil,'VOP_REALLOCBLKS');
a.a_gen :=@vop_reallocblks_desc;
a.a_vp :=vp;
a.a_buflist:=buflist;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_reallocblks_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_GETPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;reqpage:Integer;offset:PtrUint):Integer;
var
c:Pointer;
a:vop_getpages_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_getpages_desc.vdesc_call);
Assert(c<>nil,'VOP_GETPAGES');
a.a_gen :=@vop_getpages_desc;
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);
Result:=vop_getpages_t(c)(@a);
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
c:Pointer;
a:vop_putpages_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_putpages_desc.vdesc_call);
Assert(c<>nil,'VOP_PUTPAGES');
a.a_gen :=@vop_putpages_desc;
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);
Result:=vop_putpages_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_VPTOFH(vp:p_vnode;fhp:p_fid):Integer;
var
c:Pointer;
a:vop_vptofh_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_vptofh_desc.vdesc_call);
Assert(c<>nil,'VOP_VPTOFH');
a.a_gen:=@vop_vptofh_desc;
a.a_vp :=vp;
a.a_fhp:=fhp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_vptofh_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_VPTOCNP(vp:p_vnode;vpp:pp_vnode;buf:PChar;buflen:PInteger):Integer;
var
c:Pointer;
a:vop_vptocnp_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_vptocnp_desc.vdesc_call);
Assert(c<>nil,'VOP_VPTOCNP');
a.a_gen :=@vop_vptocnp_desc;
a.a_vp :=vp;
a.a_vpp :=vpp;
a.a_buf :=buf;
a.a_buflen:=buflen;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_vptocnp_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_ALLOCATE(vp:p_vnode;offset:PPtrUint;len:PPtrUint):Integer;
var
c:Pointer;
a:vop_allocate_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_allocate_desc.vdesc_call);
Assert(c<>nil,'VOP_ALLOCATE');
a.a_gen :=@vop_allocate_desc;
a.a_vp :=vp;
a.a_offset:=offset;
a.a_len :=len;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_allocate_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_UNP_BIND(vp:p_vnode;socket:p_socket):Integer;
var
c:Pointer;
a:vop_unp_bind_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_unp_bind_desc.vdesc_call);
Assert(c<>nil,'VOP_UNP_BIND');
a.a_gen :=@vop_unp_bind_desc;
a.a_vp :=vp;
a.a_socket:=socket;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_unp_bind_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_UNP_CONNECT(vp:p_vnode;socket:pp_socket):Integer;
var
c:Pointer;
a:vop_unp_connect_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_unp_connect_desc.vdesc_call);
Assert(c<>nil,'VOP_UNP_CONNECT');
a.a_gen :=@vop_unp_connect_desc;
a.a_vp :=vp;
a.a_socket:=socket;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_unp_connect_t(c)(@a);
VFS_EPILOGUE(s);
end;
function VOP_UNP_DETACH(vp:p_vnode):Integer;
var
c:Pointer;
a:vop_unp_detach_args;
s:Boolean;
begin
c:=get_vp_cb(vp,vop_unp_detach_desc.vdesc_call);
Assert(c<>nil,'VOP_UNP_DETACH');
a.a_gen:=@vop_unp_detach_desc;
a.a_vp :=vp;
s:=VFS_PROLOGUE(vp^.v_mount);
Result:=vop_unp_detach_t(c)(@a);
VFS_EPILOGUE(s);
end;
end.