Allow leading `./` segments in links
This commit is contained in:
parent
29c3eb8f67
commit
bd33966337
29
src/link.c
29
src/link.c
|
@ -1113,12 +1113,33 @@ long path_download(const char *path, char *output_buf, size_t req_size,
|
||||||
static void make_link_relative(const char *page_url, char *link_url)
|
static void make_link_relative(const char *page_url, char *link_url)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Some servers make the links to subdirectories absolute, but our code
|
Some servers make the links to subdirectories absolute (in URI terms:
|
||||||
expects them to be relative, so change the contents of link_url as
|
path-absolute), but our code expects them to be relative (in URI terms:
|
||||||
needed to accommodate that.
|
path-noscheme), so change the contents of link_url as needed to
|
||||||
|
accommodate that.
|
||||||
|
|
||||||
|
Also, some servers serve their links as `./name`. This is helpful to
|
||||||
|
them because it is the only way to express relative references when the
|
||||||
|
first new path segment of the target contains an unescaped colon (`:`),
|
||||||
|
eg in `./6:1-balun.png`. While stripping the ./ strictly speaking
|
||||||
|
reintroduces that ambiguity, it is of little practical concern in this
|
||||||
|
implementation, as full URI link targets are filtered by their number of
|
||||||
|
slashes anyway. In URI terms, this converts path-noscheme with a leading
|
||||||
|
`.` segment into path-noscheme or path-rootless without that segment.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (link_url[0] == '.' && link_url[1] == '/') {
|
||||||
|
memmove(link_url, link_url + 2, strlen(link_url) - 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (link_url[0] != '/') {
|
if (link_url[0] != '/') {
|
||||||
/* Already relative, nothing to do here! */
|
/* Already relative, nothing to do here!
|
||||||
|
|
||||||
|
(Full URIs, eg. `http://example.com/path`, pass through here
|
||||||
|
unmodified, but those are classified in different LinkTypes later
|
||||||
|
anyway).
|
||||||
|
*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue