summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/lib
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2019-05-07 23:29:24 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2019-05-07 23:29:24 +0000
commit9a3eca42663c7cb45bb499692d1aed1c90a02dee (patch)
tree1083fab3de34faca8f89d0390d6011e9321b22a5 /Build/source/texk/web2c/lib
parent5339b999a18c1ceb3a98c6cc3b2cee75109edfc5 (diff)
Apply a patch in https://tug.org/pipermail/tex-k/2019-May/003014.html
git-svn-id: svn://tug.org/texlive/trunk@51041 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/lib')
-rw-r--r--Build/source/texk/web2c/lib/ChangeLog8
-rw-r--r--Build/source/texk/web2c/lib/texmfmp.c58
2 files changed, 42 insertions, 24 deletions
diff --git a/Build/source/texk/web2c/lib/ChangeLog b/Build/source/texk/web2c/lib/ChangeLog
index 5dd7cd63bc1..7296d55093c 100644
--- a/Build/source/texk/web2c/lib/ChangeLog
+++ b/Build/source/texk/web2c/lib/ChangeLog
@@ -1,3 +1,11 @@
+2019-05-08 Akira Kakuto <kakuto@w32tex.org>
+
+ * texmfmp.c: Introduce a new function find_input_file(s)
+ to fix a bug that in special cases getfilesize() etc. for
+ image files saved in "output-directory" do not work.
+ A report in tex-k list:
+ https://tug.org/pipermail/tex-k/2019-May/003014.html
+
2019-03-30 Akira Kakuto <kakuto@w32tex.org>
* texmfmp.c: Improve to record texmf.cnf. (ptex and friends,
diff --git a/Build/source/texk/web2c/lib/texmfmp.c b/Build/source/texk/web2c/lib/texmfmp.c
index 64a7d31160b..0e372be2aa8 100644
--- a/Build/source/texk/web2c/lib/texmfmp.c
+++ b/Build/source/texk/web2c/lib/texmfmp.c
@@ -3094,6 +3094,33 @@ void initstarttime(void)
}
}
+/* Search for an input file. If -output-directory is specified look
+ there first. If that fails, do the regular kpse search. */
+string
+find_input_file(integer s)
+{
+ string filename;
+
+#if defined(XeTeX)
+ filename = gettexstring(s);
+#else
+ filename = makecfilename(s);
+#endif
+ /* Look in -output-directory first, if the filename is not
+ absolute. This is because we want the pdf* functions to
+ be able to find the same files as \openin */
+ if (output_directory && !kpse_absolute_p (filename, false)) {
+ string pathname;
+
+ pathname = concat3(output_directory, DIR_SEP_STRING, filename);
+ if (!access(pathname, R_OK) && !dir_p (pathname)) {
+ return pathname;
+ }
+ xfree (pathname);
+ }
+ return kpse_find_tex(filename);
+}
+
#if !defined(XeTeX)
char *makecstring(integer s)
{
@@ -3176,13 +3203,8 @@ void getcreationdate(void)
void getfilemoddate(integer s)
{
struct stat file_data;
-#if defined(XeTeX)
- int i;
- const_string orig_name = gettexstring(s);
-#else
- const_string orig_name = makecfilename(s);
-#endif
- char *file_name = kpse_find_tex(orig_name);
+
+ char *file_name = find_input_file(s);
if (file_name == NULL) {
return; /* empty string */
}
@@ -3206,6 +3228,8 @@ void getfilemoddate(integer s)
/* error by str_toks that calls str_room(1) */
} else {
#if defined(XeTeX)
+ int i;
+
for (i = 0; i < len; i++)
strpool[poolptr++] = (uint16_t)time_str[i];
#else
@@ -3224,11 +3248,7 @@ void getfilesize(integer s)
struct stat file_data;
int i;
-#if defined(XeTeX)
- char *file_name = kpse_find_tex(gettexstring(s));
-#else
- char *file_name = kpse_find_tex(makecfilename(s));
-#endif
+ char *file_name = find_input_file(s);
if (file_name == NULL) {
return; /* empty string */
}
@@ -3294,11 +3314,7 @@ void getfiledump(integer s, int offset, int length)
return;
}
-#if defined(XeTeX)
- file_name = kpse_find_tex(gettexstring(s));
-#else
- file_name = kpse_find_tex(makecfilename(s));
-#endif
+ file_name = find_input_file(s);
if (file_name == NULL) {
return; /* empty string */
}
@@ -3388,13 +3404,7 @@ void getmd5sum(strnumber s, boolean file)
FILE *f;
char *file_name;
-#if defined(XeTeX)
- xname = gettexstring (s);
- file_name = kpse_find_tex (xname);
- xfree (xname);
-#else
- file_name = kpse_find_tex(makecfilename(s));
-#endif
+ file_name = find_input_file(s);
if (file_name == NULL) {
return; /* empty string */
}