chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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);
            }
        }
    }
}