From 3a6d24b1d99df6233baf3370aacadd25a437e590 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 29 Nov 2025 13:36:01 +0000
Subject: [PATCH] Add ZStandard frame and dictionary types
Co-authored-by: adamhathcock <527620+adamhathcock@users.noreply.github.com>
---
.../ZStandard/Unsafe/ZSTD_ResetDirective.cs | 8 +++++++
.../Unsafe/ZSTD_dictContentType_e.cs | 13 ++++++++++++
.../ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs | 10 +++++++++
.../ZStandard/Unsafe/ZSTD_frameHeader.cs | 21 +++++++++++++++++++
.../ZStandard/Unsafe/ZSTD_frameType_e.cs | 7 +++++++
5 files changed, 59 insertions(+)
create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs
create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs
create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs
create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs
create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs
diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs
new file mode 100644
index 00000000..df0bd035
--- /dev/null
+++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs
@@ -0,0 +1,8 @@
+namespace SharpCompress.Compressors.ZStandard.Unsafe;
+
+public enum ZSTD_ResetDirective
+{
+ ZSTD_reset_session_only = 1,
+ ZSTD_reset_parameters = 2,
+ ZSTD_reset_session_and_parameters = 3,
+}
diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs
new file mode 100644
index 00000000..18e7172f
--- /dev/null
+++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs
@@ -0,0 +1,13 @@
+namespace SharpCompress.Compressors.ZStandard.Unsafe;
+
+public enum ZSTD_dictContentType_e
+{
+ /// dictionary is "full" when starting with ZSTD_MAGIC_DICTIONARY, otherwise it is "rawContent"
+ ZSTD_dct_auto = 0,
+
+ /// ensures dictionary is always loaded as rawContent, even if it starts with ZSTD_MAGIC_DICTIONARY
+ ZSTD_dct_rawContent = 1,
+
+ /// refuses to load a dictionary if it does not respect Zstandard's specification
+ ZSTD_dct_fullDict = 2,
+}
diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs
new file mode 100644
index 00000000..5d1ee309
--- /dev/null
+++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs
@@ -0,0 +1,10 @@
+namespace SharpCompress.Compressors.ZStandard.Unsafe;
+
+public enum ZSTD_dictLoadMethod_e
+{
+ /// Copy dictionary content internally
+ ZSTD_dlm_byCopy = 0,
+
+ /// Reference dictionary content -- the dictionary buffer must outlive its users
+ ZSTD_dlm_byRef = 1,
+}
diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs
new file mode 100644
index 00000000..3caa2787
--- /dev/null
+++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs
@@ -0,0 +1,21 @@
+namespace SharpCompress.Compressors.ZStandard.Unsafe;
+
+public struct ZSTD_frameHeader
+{
+ /// if == ZSTD_CONTENTSIZE_UNKNOWN, it means this field is not available. 0 means "empty"
+ public ulong frameContentSize;
+
+ /// can be very large, up to frameContentSize
+ public ulong windowSize;
+ public uint blockSizeMax;
+
+ /// if == ZSTD_skippableFrame, frameContentSize is the size of skippable content
+ public ZSTD_frameType_e frameType;
+ public uint headerSize;
+
+ /// for ZSTD_skippableFrame, contains the skippable magic variant [0-15]
+ public uint dictID;
+ public uint checksumFlag;
+ public uint _reserved1;
+ public uint _reserved2;
+}
diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs
new file mode 100644
index 00000000..a399748f
--- /dev/null
+++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs
@@ -0,0 +1,7 @@
+namespace SharpCompress.Compressors.ZStandard.Unsafe;
+
+public enum ZSTD_frameType_e
+{
+ ZSTD_frame,
+ ZSTD_skippableFrame,
+}