Skip to content

Commit

Permalink
Fix vlc logs
Browse files Browse the repository at this point in the history
  • Loading branch information
FrayxRulez committed Dec 5, 2024
1 parent c8d5dc1 commit 16c9ea1
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 39 deletions.
13 changes: 13 additions & 0 deletions Telegram.Native/NativeUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -684,4 +684,17 @@ namespace winrt::Telegram::Native::implementation
*ciao = 42;
}

hstring NativeUtils::GetLogMessage(int64_t format, int64_t args)
{
int byteLength = vsnprintf(NULL, NULL, (char*)format, (va_list)args) + 1;
if (byteLength <= 1)
return L"";

char* buffer = new char[byteLength];
vsprintf(buffer, (char*)format, (va_list)args);
hstring result = winrt::to_hstring(std::string(buffer, byteLength));
delete[] buffer;
return result;
}

} // namespace winrt::Telegram::Native::implementation
2 changes: 2 additions & 0 deletions Telegram.Native/NativeUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ namespace winrt::Telegram::Native::implementation
static winrt::Telegram::Native::FatalError GetFatalError(bool onlyNative);
static winrt::Telegram::Native::FatalError GetBackTrace(DWORD code);

static hstring GetLogMessage(int64_t format, int64_t args);

static void Crash();

static FatalErrorCallback Callback;
Expand Down
2 changes: 2 additions & 0 deletions Telegram.Native/NativeUtils.idl
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ namespace Telegram.Native
static FatalError GetFatalError(Boolean onlyNative);
static FatalError GetBackTrace(UInt64 code);

static String GetLogMessage(Int64 format, Int64 args);

static void Crash();
}
} // namespace Telegram.Native
38 changes: 0 additions & 38 deletions Telegram/Videolan/Shared/Helpers/MarshalUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,36 +42,11 @@ internal readonly struct Native
#endif
[DllImport(Constants.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "libvlc_free", SetLastError = true)]
public static extern void LibVLCFree(IntPtr ptr);

[DllImport(Constants.Msvcrt, EntryPoint = "vsprintf", CallingConvention = CallingConvention.Cdecl)]
public static extern int vsprintf_windows(IntPtr buffer, IntPtr format, IntPtr args);

[DllImport(Constants.Msvcrt, EntryPoint = "vsnprintf", CallingConvention = CallingConvention.Cdecl)]
public static extern int vsnprintf_windows(IntPtr buffer, UIntPtr size, IntPtr format, IntPtr args);
#pragma warning restore IDE1006 // Naming Styles
}

#region logging

internal static string GetLogMessage(IntPtr format, IntPtr args)
{
var byteLength = vsnprintf(IntPtr.Zero, UIntPtr.Zero, format, args) + 1;
if (byteLength <= 1)
return string.Empty;

var buffer = IntPtr.Zero;
try
{
buffer = Marshal.AllocHGlobal(byteLength);
vsprintf(buffer, format, args);
return buffer.FromUtf8()!;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}

static string UseStructurePointer<T>(T structure, Func<IntPtr, string> action) where T : notnull
{
var structurePointer = IntPtr.Zero;
Expand Down Expand Up @@ -102,20 +77,7 @@ static void UseStructurePointer<T>(T structure, Action<IntPtr> action) where T :
}
}

#pragma warning disable IDE1006 // Naming Styles
static int vsnprintf(IntPtr buffer, UIntPtr size, IntPtr format, IntPtr args)
{
return Native.vsnprintf_windows(buffer, size, format, args);
}

static int vsprintf(IntPtr buffer, IntPtr format, IntPtr args)
{
return Native.vsprintf_windows(buffer, format, args);
}

#endregion
#pragma warning restore IDE1006 // Naming Styles

/// <summary>
/// Helper for libvlc_new
/// </summary>
Expand Down
3 changes: 2 additions & 1 deletion Telegram/Videolan/Shared/LibVLC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Telegram.Native;

namespace LibVLCSharp.Shared
{
Expand Down Expand Up @@ -828,7 +829,7 @@ private static void LogCallback(IntPtr libVLCHandle, LogLevel logLevel, IntPtr l

try
{
var message = MarshalUtils.GetLogMessage(format, args);
var message = NativeUtils.GetLogMessage((long)format, (long)args);

GetLogContext(logContext, out var module, out var file, out var line);

Expand Down

0 comments on commit 16c9ea1

Please sign in to comment.