texlive[50953] Build/source/texk/dvipdfm-x: support file names always
commits+kakuto at tug.org
commits+kakuto at tug.org
Fri May 3 01:09:48 CEST 2019
Revision: 50953
http://tug.org/svn/texlive?view=revision&revision=50953
Author: kakuto
Date: 2019-05-03 01:09:47 +0200 (Fri, 03 May 2019)
Log Message:
-----------
support file names always in default code page of OS
Modified Paths:
--------------
trunk/Build/source/texk/dvipdfm-x/ChangeLog
trunk/Build/source/texk/dvipdfm-x/dpxfile.c
trunk/Build/source/texk/dvipdfm-x/mfileio.h
trunk/Build/source/texk/dvipdfm-x/pdfximage.c
Modified: trunk/Build/source/texk/dvipdfm-x/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/ChangeLog 2019-05-02 22:54:42 UTC (rev 50952)
+++ trunk/Build/source/texk/dvipdfm-x/ChangeLog 2019-05-02 23:09:47 UTC (rev 50953)
@@ -1,3 +1,9 @@
+2019-05-03 Akira Kakuto <kakuto at w32tex.org>
+
+ * dpxfile.c, mfileio.h, pdfximage.c: Support non-ascii file
+ names in default code page of OS irrespective of values of a
+ variable 'command_line_encoding' (Windows only).
+
2019-05-03 Shunsaku Hirata <shunsaku.hirata74 at gmail.com>
* pdfobj.c, pdfobj.h: Add support for ASCIIHex and ASCII85
Modified: trunk/Build/source/texk/dvipdfm-x/dpxfile.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/dpxfile.c 2019-05-02 22:54:42 UTC (rev 50952)
+++ trunk/Build/source/texk/dvipdfm-x/dpxfile.c 2019-05-02 23:09:47 UTC (rev 50953)
@@ -1,5 +1,5 @@
/* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
+ Copyright (C) 2007-2019 by Jin-Hwan Cho and Shunsaku Hirata,
the dvipdfmx project team.
Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks at kettering.edu>
@@ -159,6 +159,10 @@
static char _tmpbuf[PATH_MAX+1];
#endif /* MIKTEX */
+#if defined(WIN32)
+extern int utf8name_failed;
+#endif /* WIN32 */
+
static int exec_spawn (char *cmd)
{
char **cmdv, **qv;
@@ -240,15 +244,32 @@
ret = _spawnvp(_P_WAIT, *cmdv, (const char* const*)cmdv);
#else
cmdvw = xcalloc (i + 2, sizeof (wchar_t *));
- qv = cmdv;
- qvw = cmdvw;
- while (*qv) {
- *qvw = get_wstring_from_fsyscp(*qv, *qvw=NULL);
- qv++;
- qvw++;
+ if (utf8name_failed == 0) {
+ qv = cmdv;
+ qvw = cmdvw;
+ while (*qv) {
+ *qvw = get_wstring_from_fsyscp(*qv, *qvw=NULL);
+ qv++;
+ qvw++;
+ }
+ *qvw = NULL;
+ ret = _wspawnvp (_P_WAIT, *cmdvw, (const wchar_t* const*) cmdvw);
+ } else {
+ int tmpcp;
+ tmpcp = file_system_codepage;
+ file_system_codepage = win32_codepage;
+ qv = cmdv;
+ qvw = cmdvw;
+ while (*qv) {
+ *qvw = get_wstring_from_fsyscp(*qv, *qvw=NULL);
+ qv++;
+ qvw++;
+ }
+ *qvw = NULL;
+ file_system_codepage = tmpcp;
+ utf8name_failed = 0;
+ ret = _wspawnvp (_P_WAIT, *cmdvw, (const wchar_t* const*) cmdvw);
}
- *qvw = NULL;
- ret = _wspawnvp (_P_WAIT, *cmdvw, (const wchar_t* const*) cmdvw);
if (cmdvw) {
qvw = cmdvw;
while (*qvw) {
@@ -1242,3 +1263,21 @@
return r;
}
+
+#if defined(WIN32)
+FILE *generic_fsyscp_fopen (const char *filename, const char *mode)
+{
+ FILE *f;
+
+ f = fsyscp_fopen (filename, mode);
+
+ if (f == NULL && file_system_codepage != win32_codepage) {
+ int tmpcp = file_system_codepage;
+ file_system_codepage = win32_codepage;
+ f = fsyscp_fopen (filename, mode);
+ file_system_codepage = tmpcp;
+ }
+
+ return f;
+}
+#endif /* WIN32 */
Modified: trunk/Build/source/texk/dvipdfm-x/mfileio.h
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/mfileio.h 2019-05-02 22:54:42 UTC (rev 50952)
+++ trunk/Build/source/texk/dvipdfm-x/mfileio.h 2019-05-02 23:09:47 UTC (rev 50953)
@@ -1,6 +1,6 @@
/* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
- Copyright (C) 2002-2016 by Jin-Hwan Cho and Shunsaku Hirata,
+ Copyright (C) 2002-2019 by Jin-Hwan Cho and Shunsaku Hirata,
the dvipdfmx project team.
Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks at kettering.edu>
@@ -36,7 +36,8 @@
mfclose((file),__FUNCTION__,__LINE__)
#else
#if defined(WIN32)
-#define MFOPEN(name,mode) fsyscp_fopen((name),(mode))
+extern FILE *generic_fsyscp_fopen(const char *fname, const char *mode);
+#define MFOPEN(name,mode) generic_fsyscp_fopen((name),(mode))
#else
#define MFOPEN(name,mode) fopen((name),(mode))
#endif
Modified: trunk/Build/source/texk/dvipdfm-x/pdfximage.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdfximage.c 2019-05-02 22:54:42 UTC (rev 50952)
+++ trunk/Build/source/texk/dvipdfm-x/pdfximage.c 2019-05-02 23:09:47 UTC (rev 50953)
@@ -1,6 +1,6 @@
/* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
+ Copyright (C) 2007-2019 by Jin-Hwan Cho and Shunsaku Hirata,
the dvipdfmx project team.
Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks at kettering.edu>
@@ -363,6 +363,10 @@
#define dpx_fopen(n,m) (MFOPEN((n),(m)))
#define dpx_fclose(f) (MFCLOSE((f)))
+#if defined(WIN32)
+int utf8name_failed = 0;
+#endif /* WIN32 */
+
int
pdf_ximage_findresource (const char *ident, load_options options)
{
@@ -394,8 +398,23 @@
strcpy(fullname, f);
} else {
/* try loading image */
+#if defined(WIN32)
+ utf8name_failed = 0;
+#endif /* WIN32 */
fullname = dpx_find_file(ident, "_pic_", "");
+#if defined(WIN32)
+ if (!fullname && file_system_codepage != win32_codepage) {
+ int tmpcp = file_system_codepage;
+ utf8name_failed = 1;
+ file_system_codepage = win32_codepage;
+ fullname = dpx_find_file(ident, "_pic_", "");
+ file_system_codepage = tmpcp;
+ }
+#endif /* WIN32 */
if (!fullname) {
+#if defined(WIN32)
+ utf8name_failed = 0;
+#endif /* WIN32 */
WARN("Error locating image file \"%s\"", ident);
return -1;
}
More information about the tex-live-commits
mailing list