diff options
Diffstat (limited to 'Build/source/texk/web2c/lib/texmfmp.c')
-rw-r--r-- | Build/source/texk/web2c/lib/texmfmp.c | 58 |
1 files changed, 34 insertions, 24 deletions
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 */ } |