private List pathSegments(string pathStr, int numSegs)
{
// if pathStr is "/" then path si the empty list
int len = pathStr.Length;
if (len == 0 || (len == 1 && pathStr[0] == '/'))
return emptyPath();
// check for trailing slash
if (len > 1 && pathStr[len-1] == '/')
{
numSegs--;
len--;
}
// parse the segments
string[] path = new string[numSegs];
int n = 0;
int segStart = 0, prev = 0;
for (int i=0; i<pathStr.Length; ++i)
{
int c = pathStr[i];
if (prev != '\\')
{
if (c == '/')
{
if (i > 0) path[n++] = pathStr.Substring(segStart, i-segStart);
segStart = i+1;
}
prev = c;
}
else
{
prev = (c != '\\') ? c : 0;
}
}
if (segStart < len)
path[n++] = pathStr.Substring(segStart, pathStr.Length-segStart);
return new List(Sys.StrType, path);
}