diff --git a/src/Tmds.Ssh/SftpChannel.Reader.cs b/src/Tmds.Ssh/SftpChannel.Reader.cs index 7b39e8b..81034ad 100644 --- a/src/Tmds.Ssh/SftpChannel.Reader.cs +++ b/src/Tmds.Ssh/SftpChannel.Reader.cs @@ -40,12 +40,7 @@ public long ReadInt64() } public string ReadString() - { - int length = ReadInt(); - string value = s_utf8Encoding.GetString(_remainder.Slice(0, length)); - _remainder = _remainder.Slice(length); - return value; - } + => s_utf8Encoding.GetString(ReadStringAsSpan()); public void SkipString() { @@ -59,15 +54,17 @@ public void SkipString(out int length) _remainder = _remainder.Slice(length); } - public byte[] ReadStringAsByteArray() + public ReadOnlySpan ReadStringAsSpan() { int length = ReadInt(); - byte[] value = new byte[length]; - _remainder.Slice(0, length).CopyTo(value); + ReadOnlySpan value = _remainder.Slice(0, length); _remainder = _remainder.Slice(length); return value; } + public byte[] ReadStringAsByteArray() + => ReadStringAsSpan().ToArray(); + public byte ReadByte() { byte value = _remainder[0]; diff --git a/src/Tmds.Ssh/SftpChannel.cs b/src/Tmds.Ssh/SftpChannel.cs index e66c51c..7dc3b07 100644 --- a/src/Tmds.Ssh/SftpChannel.cs +++ b/src/Tmds.Ssh/SftpChannel.cs @@ -1438,14 +1438,12 @@ private void HandleVersionPacket(ReadOnlySpan packet) SftpExtension supportedExtensions = default; while (!reader.Remainder.IsEmpty) { - string extensionName = reader.ReadString(); - string extensionData = reader.ReadString(); + ReadOnlySpan extensionName = reader.ReadStringAsSpan(); + ReadOnlySpan extensionData = reader.ReadStringAsSpan(); - switch (extensionName, extensionData) + if (extensionName.SequenceEqual("copy-data"u8) && extensionData.SequenceEqual("1"u8)) { - case ("copy-data", "1"): - supportedExtensions |= SftpExtension.CopyData; - break; + supportedExtensions |= SftpExtension.CopyData; } }