using System; using System.Text; using Renci.SshNet.Common; 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 . /// /// /// /// 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) { ThrowHelper.ThrowIfNull(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(); } } }