summaryrefslogtreecommitdiff
path: root/platform/x11/pdfapp.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/x11/pdfapp.c')
-rw-r--r--platform/x11/pdfapp.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/platform/x11/pdfapp.c b/platform/x11/pdfapp.c
index bc044062..e4d05b48 100644
--- a/platform/x11/pdfapp.c
+++ b/platform/x11/pdfapp.c
@@ -8,6 +8,10 @@
#include <stdlib.h>
#include <stdio.h>
+#ifndef _WIN32
+#include <unistd.h> /* for getcwd */
+#endif
+
#define BEYOND_THRESHHOLD 40
#ifndef PATH_MAX
@@ -997,6 +1001,20 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
static void pdfapp_gotouri(pdfapp_t *app, char *uri)
{
+ char buf[PATH_MAX];
+
+ /* Relative file:// URI, make it absolute! */
+ if (!strncmp(uri, "file://", 7) && uri[7] != '/')
+ {
+ char buf_base[PATH_MAX];
+ char buf_cwd[PATH_MAX];
+ fz_dirname(buf_base, app->docpath, sizeof buf_base);
+ getcwd(buf_cwd, sizeof buf_cwd);
+ fz_snprintf(buf, sizeof buf, "file://%s/%s/%s", buf_cwd, buf_base, uri+7);
+ fz_cleanname(buf+7);
+ uri = buf;
+ }
+
winopenuri(app, uri);
}