| 656 | } |
| 657 | |
| 658 | bool TFileHandle::LinkTo(const TFileHandle& fh) const noexcept { |
| 659 | #if defined(_unix_) |
| 660 | while (dup2(fh.Fd_, Fd_) == -1) { |
| 661 | if (errno != EINTR) { |
| 662 | return false; |
| 663 | } |
| 664 | } |
| 665 | return true; |
| 666 | #elif defined(_win_) |
| 667 | TFileHandle nh(fh.Duplicate()); |
| 668 | |
| 669 | if (!nh.IsOpen()) { |
| 670 | return false; |
| 671 | } |
| 672 | |
| 673 | // not thread-safe |
| 674 | nh.Swap(*const_cast<TFileHandle*>(this)); |
| 675 | |
| 676 | return true; |
| 677 | #else |
| 678 | #error unsupported |
| 679 | #endif |
| 680 | } |
| 681 | |
| 682 | int TFileHandle::Flock(int op) noexcept { |
| 683 | return ::Flock(Fd_, op); |