Project Maintenance

This commit is contained in:
Gustave Monce
2021-08-09 20:21:09 +02:00
parent 9865ef7f79
commit 847ce0506d
411 changed files with 5922 additions and 54941 deletions
+17 -8
View File
@@ -2,7 +2,7 @@
namespace SevenZip
{
class CRC
internal class CRC
{
public static readonly uint[] Table;
@@ -14,42 +14,51 @@ namespace SevenZip
{
uint r = i;
for (int j = 0; j < 8; j++)
{
if ((r & 1) != 0)
{
r = (r >> 1) ^ kPoly;
}
else
{
r >>= 1;
}
}
Table[i] = r;
}
}
uint _value = 0xFFFFFFFF;
private uint _value = 0xFFFFFFFF;
public void Init() { _value = 0xFFFFFFFF; }
public void UpdateByte(byte b)
{
_value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8);
_value = Table[((byte)(_value)) ^ b] ^ (_value >> 8);
}
public void Update(byte[] data, uint offset, uint size)
{
for (uint i = 0; i < size; i++)
_value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8);
{
_value = Table[((byte)(_value)) ^ data[offset + i]] ^ (_value >> 8);
}
}
public uint GetDigest() { return _value ^ 0xFFFFFFFF; }
static uint CalculateDigest(byte[] data, uint offset, uint size)
private static uint CalculateDigest(byte[] data, uint offset, uint size)
{
CRC crc = new CRC();
CRC crc = new();
// crc.Init();
crc.Update(data, offset, size);
return crc.GetDigest();
}
static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size)
private static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size)
{
return (CalculateDigest(data, offset, size) == digest);
return CalculateDigest(data, offset, size) == digest;
}
}
}
+67 -16
View File
@@ -47,7 +47,7 @@ namespace SevenZip.CommandLineParser
{
public bool ThereIs;
public bool WithMinus;
public ArrayList PostStrings = new ArrayList();
public ArrayList PostStrings = new();
public int PostCharIndex;
public SwitchResult()
{
@@ -57,28 +57,39 @@ namespace SevenZip.CommandLineParser
public class Parser
{
public ArrayList NonSwitchStrings = new ArrayList();
SwitchResult[] _switches;
public ArrayList NonSwitchStrings = new();
private readonly SwitchResult[] _switches;
public Parser(int numSwitches)
{
_switches = new SwitchResult[numSwitches];
for (int i = 0; i < numSwitches; i++)
{
_switches[i] = new SwitchResult();
}
}
bool ParseString(string srcString, SwitchForm[] switchForms)
private bool ParseString(string srcString, SwitchForm[] switchForms)
{
int len = srcString.Length;
if (len == 0)
{
return false;
}
int pos = 0;
if (!IsItSwitchChar(srcString[pos]))
{
return false;
}
while (pos < len)
{
if (IsItSwitchChar(srcString[pos]))
{
pos++;
}
const int kNoLen = -1;
int matchedSwitchIndex = 0;
int maxLen = kNoLen;
@@ -86,7 +97,10 @@ namespace SevenZip.CommandLineParser
{
int switchLen = switchForms[switchIndex].IDString.Length;
if (switchLen <= maxLen || pos + switchLen > len)
{
continue;
}
if (String.Compare(switchForms[switchIndex].IDString, 0,
srcString, pos, switchLen, true) == 0)
{
@@ -95,11 +109,17 @@ namespace SevenZip.CommandLineParser
}
}
if (maxLen == kNoLen)
{
throw new Exception("maxLen == kNoLen");
}
SwitchResult matchedSwitch = _switches[matchedSwitchIndex];
SwitchForm switchForm = switchForms[matchedSwitchIndex];
if ((!switchForm.Multi) && matchedSwitch.ThereIs)
{
throw new Exception("switch must be single");
}
matchedSwitch.ThereIs = true;
pos += maxLen;
int tailSize = len - pos;
@@ -109,28 +129,39 @@ namespace SevenZip.CommandLineParser
case SwitchType.PostMinus:
{
if (tailSize == 0)
{
matchedSwitch.WithMinus = false;
}
else
{
matchedSwitch.WithMinus = (srcString[pos] == kSwitchMinus);
if (matchedSwitch.WithMinus)
{
pos++;
}
}
break;
}
case SwitchType.PostChar:
{
if (tailSize < switchForm.MinLen)
{
throw new Exception("switch is not full");
}
string charSet = switchForm.PostCharSet;
const int kEmptyCharValue = -1;
if (tailSize == 0)
{
matchedSwitch.PostCharIndex = kEmptyCharValue;
}
else
{
int index = charSet.IndexOf(srcString[pos]);
if (index < 0)
{
matchedSwitch.PostCharIndex = kEmptyCharValue;
}
else
{
matchedSwitch.PostCharIndex = index;
@@ -144,10 +175,13 @@ namespace SevenZip.CommandLineParser
{
int minLen = switchForm.MinLen;
if (tailSize < minLen)
{
throw new Exception("switch is not full");
}
if (type == SwitchType.UnLimitedPostString)
{
matchedSwitch.PostStrings.Add(srcString.Substring(pos));
matchedSwitch.PostStrings.Add(srcString[pos..]);
return true;
}
String stringSwitch = srcString.Substring(pos, minLen);
@@ -156,7 +190,10 @@ namespace SevenZip.CommandLineParser
{
char c = srcString[pos];
if (IsItSwitchChar(c))
{
break;
}
stringSwitch += c;
}
matchedSwitch.PostStrings.Add(stringSwitch);
@@ -165,7 +202,6 @@ namespace SevenZip.CommandLineParser
}
}
return true;
}
public void ParseStrings(SwitchForm[] switchForms, string[] commandStrings)
@@ -176,13 +212,19 @@ namespace SevenZip.CommandLineParser
{
string s = commandStrings[i];
if (stopSwitch)
{
NonSwitchStrings.Add(s);
}
else
if (s == kStopSwitchParsing)
{
stopSwitch = true;
}
else
if (!ParseString(s, switchForms))
{
NonSwitchStrings.Add(s);
}
}
}
@@ -198,7 +240,7 @@ namespace SevenZip.CommandLineParser
{
if (commandString.IndexOf(id) == 0)
{
postString = commandString.Substring(id.Length);
postString = commandString[id.Length..];
return i;
}
}
@@ -213,7 +255,7 @@ namespace SevenZip.CommandLineParser
return -1;
}
static bool ParseSubCharsCommand(int numForms, CommandSubCharsSet[] forms,
private static bool ParseSubCharsCommand(int numForms, CommandSubCharsSet[] forms,
string commandString, ArrayList indices)
{
indices.Clear();
@@ -230,28 +272,37 @@ namespace SevenZip.CommandLineParser
if (newIndex >= 0)
{
if (currentIndex >= 0)
{
return false;
}
if (commandString.IndexOf(c, newIndex + 1) >= 0)
{
return false;
}
currentIndex = j;
numUsedChars++;
}
}
if (currentIndex == -1 && !charsSet.EmptyAllowed)
{
return false;
}
indices.Add(currentIndex);
}
return (numUsedChars == commandString.Length);
return numUsedChars == commandString.Length;
}
const char kSwitchID1 = '-';
const char kSwitchID2 = '/';
private const char kSwitchID1 = '-';
private const char kSwitchID2 = '/';
const char kSwitchMinus = '-';
const string kStopSwitchParsing = "--";
private const char kSwitchMinus = '-';
private const string kStopSwitchParsing = "--";
static bool IsItSwitchChar(char c)
private static bool IsItSwitchChar(char c)
{
return (c == kSwitchID1 || c == kSwitchID2);
return c == kSwitchID1 || c == kSwitchID2;
}
}
@@ -266,7 +317,7 @@ namespace SevenZip.CommandLineParser
}
}
class CommandSubCharsSet
internal class CommandSubCharsSet
{
public string Chars = "";
public bool EmptyAllowed = false;
+21 -9
View File
@@ -4,13 +4,13 @@ namespace SevenZip.Buffer
{
public class InBuffer
{
byte[] m_Buffer;
uint m_Pos;
uint m_Limit;
uint m_BufferSize;
System.IO.Stream m_Stream;
bool m_StreamWasExhausted;
ulong m_ProcessedSize;
private readonly byte[] m_Buffer;
private uint m_Pos;
private uint m_Limit;
private readonly uint m_BufferSize;
private System.IO.Stream m_Stream;
private bool m_StreamWasExhausted;
private ulong m_ProcessedSize;
public InBuffer(uint bufferSize)
{
@@ -30,16 +30,18 @@ namespace SevenZip.Buffer
public bool ReadBlock()
{
if (m_StreamWasExhausted)
{
return false;
}
m_ProcessedSize += m_Pos;
int aNumProcessedBytes = m_Stream.Read(m_Buffer, 0, (int)m_BufferSize);
m_Pos = 0;
m_Limit = (uint)aNumProcessedBytes;
m_StreamWasExhausted = (aNumProcessedBytes == 0);
return (!m_StreamWasExhausted);
return !m_StreamWasExhausted;
}
public void ReleaseStream()
{
// m_Stream.Close();
@@ -49,8 +51,13 @@ namespace SevenZip.Buffer
public bool ReadByte(byte b) // check it
{
if (m_Pos >= m_Limit)
{
if (!ReadBlock())
{
return false;
}
}
b = m_Buffer[m_Pos++];
return true;
}
@@ -59,8 +66,13 @@ namespace SevenZip.Buffer
{
// return (byte)m_Stream.ReadByte();
if (m_Pos >= m_Limit)
{
if (!ReadBlock())
{
return 0xFF;
}
}
return m_Buffer[m_Pos++];
}
+10 -5
View File
@@ -4,11 +4,11 @@ namespace SevenZip.Buffer
{
public class OutBuffer
{
byte[] m_Buffer;
uint m_Pos;
uint m_BufferSize;
System.IO.Stream m_Stream;
ulong m_ProcessedSize;
private readonly byte[] m_Buffer;
private uint m_Pos;
private readonly uint m_BufferSize;
private System.IO.Stream m_Stream;
private ulong m_ProcessedSize;
public OutBuffer(uint bufferSize)
{
@@ -31,13 +31,18 @@ namespace SevenZip.Buffer
{
m_Buffer[m_Pos++] = b;
if (m_Pos >= m_BufferSize)
{
FlushData();
}
}
public void FlushData()
{
if (m_Pos == 0)
{
return;
}
m_Stream.Write(m_Buffer, 0, (int)m_Pos);
m_Pos = 0;
}