Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion Handle/BNFileMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,26 @@ internal static FileMetadata MustTakeHandle(IntPtr handle)

return new FileMetadata(handle, true);
}

internal static FileMetadata? NewFromHandle(IntPtr handle)
{
if (IntPtr.Zero == handle)
{
return null;
}

return new FileMetadata(NativeMethods.BNNewFileReference(handle), true);
}

internal static FileMetadata MustNewFromHandle(IntPtr handle)
{
if (IntPtr.Zero == handle)
{
throw new ArgumentNullException(nameof(handle));
}

return new FileMetadata(NativeMethods.BNNewFileReference(handle), true);
}

internal static FileMetadata? BorrowHandle(IntPtr handle)
{
Expand Down Expand Up @@ -77,6 +97,12 @@ public static FileMetadata FromFile(string filename)
return file;
}

/// <summary>Acquires an independent native reference to this file metadata object.</summary>
public FileMetadata Duplicate()
{
return FileMetadata.MustNewFromHandle(this.handle);
}

protected override bool ReleaseHandle()
{
if (!this.IsInvalid)
Expand All @@ -87,7 +113,6 @@ protected override bool ReleaseHandle()
this.navigationHandler = null;
}

NativeMethods.BNCloseFile(this.handle);
NativeMethods.BNFreeFileMetadata(this.handle);
this.SetHandleAsInvalid();
}
Expand Down
28 changes: 27 additions & 1 deletion Handle/BNLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,26 @@ internal static Logger MustTakeHandle(IntPtr handle)

return new Logger(handle, true);
}

internal static Logger? NewFromHandle(IntPtr handle)
{
if (IntPtr.Zero == handle)
{
return null;
}

return new Logger(NativeMethods.BNNewLoggerReference(handle), true);
}

internal static Logger MustNewFromHandle(IntPtr handle)
{
if (IntPtr.Zero == handle)
{
throw new ArgumentNullException(nameof(handle));
}

return new Logger(NativeMethods.BNNewLoggerReference(handle), true);
}

public static Logger? GetLogger(string name , ulong sessionId = 0)
{
Expand Down Expand Up @@ -81,6 +101,12 @@ public static Logger GetOrCreateLogger(string name , ulong sessionId = 0)
);
}

/// <summary>Acquires an independent native reference to this logger.</summary>
public Logger Duplicate()
{
return Logger.MustNewFromHandle(this.handle);
}

public static string[] GetLoggerNames()
{
IntPtr arrayPointer = NativeMethods.BNLogGetLoggerNames(out ulong arrayLength);
Expand Down Expand Up @@ -161,4 +187,4 @@ public void LogAlert(string format , params object[] args)
this.LogString( LogLevel.AlertLog , text );
}
}
}
}
Loading