remove_dot_segments, кажется, превращает относительные пути в абсолютные пути
"5.2.4. Удалить сегменты точек" стандарта 66 объясняет, как преобразовать путь с .
а также ..
в один без.
IIUC, вход foo/../bar
обрабатывается следующим образом.
- На шаге 1 (входной буфер, выходной буфер) инициализируются в (
"foo/../bar"
,""
) - Шаг 2.Е применяется для получения (
"/../bar"
,"foo"
) - Шаг 2.С применяется для получения (
"/bar"
,""
) - Шаг 2.Е применяется для получения (
""
,"/bar"
) - Шаг 2 выходит из цикла
- На шаге 3 результат
/bar
,
Мне кажется странным, что вход является относительным путем, но выход является абсолютным путем.
Мне кажется, это можно исправить с помощью шага 1, установив isAbsolute в true, если входной буфер начинается с /
и изменение шага 2.C из
C. если входной буфер начинается с префикса "/../" или "/..", где ".." - полный сегмент пути, то замените этот префикс на "/" во входном буфере и удалите последний сегмент и его предшествующий "/" (если есть) из буфера вывода; иначе,
в
C. если входной буфер начинается с префикса "/../" или "/..", где ".." - полный сегмент пути, то замените этот префикс на "/" во входном буфере и удалите последний сегмент и предшествующий ему символ "/" (если есть) из буфера вывода, затем, если не isAbsolute и буфер вывода пуст, удалите "/" из передней части буфера ввода; иначе,
Я неправильно понял спецификацию? Это желаемый результат по какой-то причине я не вижу?
Я соединил суть с реализацией Java моего понимания спецификации и предложенного мной "исправления".