Files
DotNetAlpm/Alpm/SafeFilePackageHandle.cs
2020-05-01 05:08:04 -04:00

35 lines
1.0 KiB
C#

using System;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
namespace Foodsoft.Alpm
{
internal sealed class SafeFilePackageHandle : SafePackageHandle
{
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[PrePrepareMethod]
internal SafeFilePackageHandle(IntPtr ptr, SafeAlpmHandle parentHandle) : base(parentHandle)
{
var success = false;
RuntimeHelpers.PrepareConstrainedRegions();
try { }
finally
{
parentHandle.DangerousAddRef(ref success);
if (success) handle = ptr;
}
if (!success) throw new ObjectDisposedException(GetType().FullName);
}
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[PrePrepareMethod]
protected override bool ReleaseHandle()
{
var err = alpm.alpm_pkg_free(handle);
SafeAlpmHandle.DangerousRelease();
return err == 0;
}
}
}