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