using System; using System.Text; namespace Renci.SshNet { /// /// Encloses a path in double quotes, and escapes any embedded double quote with a backslash. /// internal sealed class RemotePathDoubleQuoteTransformation : IRemotePathTransformation { /// /// Encloses a path in double quotes, and escapes any embedded double quote with a backslash. /// /// The path to transform. /// /// The transformed path. /// /// is null. /// /// /// /// Original /// Transformed /// /// /// /var/log/auth.log /// "/var/log/auth.log" /// /// /// /var/mp3/Guns N' Roses /// "/var/mp3/Guns N' Roses" /// /// /// /var/garbage!/temp /// "/var/garbage!/temp" /// /// /// /var/would be 'kewl'!/not? /// "/var/would be 'kewl'!, not?" /// /// /// /// "" /// /// /// Hello "World" /// "Hello \"World" /// /// /// public string Transform(string path) { if (path is null) { throw new ArgumentNullException(nameof(path)); } var transformed = new StringBuilder(path.Length); _ = transformed.Append('"'); foreach (var c in path) { if (c == '"') { _ = transformed.Append('\\'); } _ = transformed.Append(c); } _ = transformed.Append('"'); return transformed.ToString(); } } }