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();
}
}
}