curlx_dyn_init(&out, clen + 1);
- /* A. If the input buffer begins with a prefix of "../" or "./", then
- remove that prefix from the input buffer; otherwise, */
+ /* if the input buffer begins with a prefix of "../" or "./", then remove
+ that prefix from the input buffer; otherwise, */
if(is_dot(&dinput, &dlen)) {
- const char *p = dinput;
- size_t blen = dlen;
-
- if(!clen)
- /* . [end] */
- goto end;
- else if(ISSLASH(*p)) {
+ if(ISSLASH(*dinput)) {
/* one dot followed by a slash */
- input = p + 1;
+ input = dinput + 1;
clen = dlen - 1;
}
- /* D. if the input buffer consists only of "." or "..", then remove
- that from the input buffer; otherwise, */
- else if(is_dot(&p, &blen)) {
- if(!blen)
+ /* if the input buffer consists only of "." or "..", then remove
+ that from the input buffer; otherwise, */
+ else if(is_dot(&dinput, &dlen)) {
+ if(!dlen)
/* .. [end] */
goto end;
- else if(ISSLASH(*p)) {
+ else if(ISSLASH(*dinput)) {
/* ../ */
- input = p + 1;
- clen = blen - 1;
+ input = dinput + 1;
+ clen = dlen - 1;
}
}
}
if(ISSLASH(*input)) {
const char *p = &input[1];
size_t blen = clen - 1;
- /* B. if the input buffer begins with a prefix of "/./" or "/.", where
- "." is a complete path segment, then replace that prefix with "/" in
- the input buffer; otherwise, */
+ /* if the input buffer begins with a prefix of "/./" or "/.", where "."
+ is a complete path segment, then replace that prefix with "/" in the
+ input buffer; otherwise, */
if(is_dot(&p, &blen)) {
if(!blen) { /* /. */
result = curlx_dyn_addn(&out, "/", 1);
continue;
}
- /* C. if the input buffer begins with a prefix of "/../" or "/..",
- where ".." is a complete path segment, then replace that prefix
- with "/" in the input buffer and remove the last segment and its
- preceding "/" (if any) from the output buffer; otherwise, */
+ /* if the input buffer begins with a prefix of "/../" or "/..", where
+ ".." is a complete path segment, then replace that prefix with "/"
+ in the input buffer and remove the last segment and its preceding
+ "/" (if any) from the output buffer; otherwise, */
else if(is_dot(&p, &blen) && (ISSLASH(*p) || !blen)) {
/* remove the last segment from the output buffer */
size_t len = curlx_dyn_len(&out);
}
}
- /* E. move the first path segment in the input buffer to the end of
- the output buffer, including the initial "/" character (if any) and
- any subsequent characters up to, but not including, the next "/"
- character or the end of the input buffer. */
+ /* move the first path segment in the input buffer to the end of the
+ output buffer, including the initial "/" character (if any) and any
+ subsequent characters up to, but not including, the next "/" character
+ or the end of the input buffer. */
result = curlx_dyn_addn(&out, input, 1);
input++;