| 1746 | } |
| 1747 | |
| 1748 | NTSTATUS |
| 1749 | Ext2TruncateSymlink( |
| 1750 | PEXT2_IRP_CONTEXT IrpContext, |
| 1751 | PEXT2_VCB Vcb, |
| 1752 | PEXT2_MCB Mcb, |
| 1753 | ULONG Size |
| 1754 | ) |
| 1755 | { |
| 1756 | NTSTATUS status = STATUS_SUCCESS; |
| 1757 | PUCHAR data = (PUCHAR)&Mcb->Inode.i_block; |
| 1758 | ULONG len = (ULONG)Mcb->Inode.i_size; |
| 1759 | LARGE_INTEGER NewSize; |
| 1760 | |
| 1761 | if (len < EXT2_LINKLEN_IN_INODE && !Mcb->Inode.i_blocks) { |
| 1762 | |
| 1763 | RtlZeroMemory(data + Size, EXT2_LINKLEN_IN_INODE - Size); |
| 1764 | Mcb->Inode.i_size = Size; |
| 1765 | Ext2SaveInode(IrpContext, Vcb, &Mcb->Inode); |
| 1766 | |
| 1767 | } else { |
| 1768 | NewSize.QuadPart = Size; |
| 1769 | status = Ext2TruncateFile(IrpContext, Vcb, Mcb, &NewSize); |
| 1770 | if (!NT_SUCCESS(status)) { |
| 1771 | goto out; |
| 1772 | } |
| 1773 | } |
| 1774 | |
| 1775 | out: |
| 1776 | return status; |
| 1777 | } |
| 1778 | |
| 1779 | |
| 1780 | /* FIXME: We can only handle one reparse point right now. */ |
no test coverage detected