public static FtpListItem Parse(string path, string buf, FtpCapability capabilities)
{
if ((buf != null) && (buf.Length > 0))
{
foreach (Parser parser in Parsers)
{
FtpListItem item = parser(buf, capabilities);
if (item != null)
{
if (parser == new Parser(FtpListItem.ParseVaxList))
{
item.FullName = path + item.Name;
}
else
{
FtpTrace.WriteLine(item.Name);
if (path.GetFtpFileName().Contains("*"))
{
path = path.GetFtpDirectoryName();
}
if (item.Name != null)
{
if ((item.Name.StartsWith("/") || item.Name.StartsWith("./")) || item.Name.StartsWith("../"))
{
item.FullName = item.Name;
item.Name = item.Name.GetFtpFileName();
}
else if (path != null)
{
item.FullName = path.GetFtpPath(new string[] { item.Name });
}
else
{
FtpTrace.WriteLine("Couldn't determine the full path of this object:{0}{1}", new object[] { Environment.NewLine, item.ToString() });
}
}
if ((item.LinkTarget != null) && !item.LinkTarget.StartsWith("/"))
{
if (item.LinkTarget.StartsWith("./"))
{
item.LinkTarget = path.GetFtpPath(new string[] { item.LinkTarget.Remove(0, 2) });
}
else
{
item.LinkTarget = path.GetFtpPath(new string[] { item.LinkTarget });
}
}
}
item.Input = buf;
return(item);
}
}
}
return(null);
}