using System;
|
using System.IO.Compression;
|
using System.Reflection;
|
|
namespace OpenTap
|
{
|
static class ZipUtils
|
{
|
private static PropertyInfo _externalAttributes = null;
|
public static void FixUnixPermissions(this ZipArchiveEntry entry)
|
{
|
// This API is only available on .NET 6 and above -- access it via reflection if possible
|
// entry.ExternalAttributes = entry.ExternalAttributes | (Convert.ToInt32("664", 8) << 16);
|
|
if (OperatingSystem.Current != OperatingSystem.Windows)
|
{
|
_externalAttributes ??= typeof(ZipArchiveEntry).GetProperty("ExternalAttributes");
|
// user: read/write
|
// group: read
|
// other: read
|
var flags = Convert.ToInt32("644", 8) << 16;
|
var current = (int)_externalAttributes.GetValue(entry);
|
_externalAttributes.SetValue(entry, current | flags);
|
}
|
}
|
}
|
}
|