public int _OnLockHandle(string file, IntPtr fi, int cmd, IntPtr lockp) { Errno errno; try { PathInfo info = new PathInfo(); PathInfo.CopyFromPtr(fi, info); FcntlCommand _cmd = NativeConvert.ToFcntlCommand(cmd); Flock @lock; Interop.CopyFlock(lockp, out @lock); errno = _filesystem.OnLockHandle(file, info, _cmd, ref @lock); if (errno == 0) { Interop.CopyFlock(ref @lock, lockp); PathInfo.CopyToPtr(info, fi); } } catch (Exception e) { Trace.WriteLine(e.ToString()); errno = Errno.EIO; } return(Interop.ConvertErrno(errno)); }