From 4be26fbd4ede91ed3d8a9e9191635073c89196bf Mon Sep 17 00:00:00 2001
From: Akira Kakuto <kakuto@fuk.kindai.ac.jp>
Date: Wed, 23 May 2018 00:31:14 +0000
Subject: [PATCH 08/20] First search for an input file with a suffix .xdv or
 .dvi. Report from Andreas Scherer.

git-svn-id: svn://tug.org/texlive/trunk/Build/source@47799 c570f23f-e606-0410-a88d-b1316a301751
---
 texk/dvipdfm-x/ChangeLog |    6 ++++++
 texk/dvipdfm-x/dvi.c     |   29 ++++++++++++++++-------------
 2 files changed, 22 insertions(+), 13 deletions(-)

--- texlive-bin.orig/texk/dvipdfm-x/ChangeLog
+++ texlive-bin/texk/dvipdfm-x/ChangeLog
@@ -1,3 +1,9 @@
+2018-05-23  Akira Kakuto  <kakuto@fuk.kindai.ac.jp>
+
+	* dvi.c: First search for an input file with a suffix .xdv
+	or .dvi. Report from Andreas Scherer:
+	http://tug.org/pipermail/tex-k/2018-May/002882.html.
+
 2018-05-06  Akira Kakuto  <kakuto@fuk.kindai.ac.jp>
 
 	* tt_cmap.c: Revert a part of changes in 2017-12-09,
--- texlive-bin.orig/texk/dvipdfm-x/dvi.c
+++ texlive-bin/texk/dvipdfm-x/dvi.c
@@ -1,6 +1,6 @@
 /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
 
-    Copyright (C) 2002-2017 by Jin-Hwan Cho and Shunsaku Hirata,
+    Copyright (C) 2002-2018 by Jin-Hwan Cho and Shunsaku Hirata,
     the dvipdfmx project team.
 
     Copyright (C) 2012-2015 by Khaled Hosny <khaledhosny@eglug.org>
@@ -1999,21 +1999,24 @@
     else
       ungetc(ch, dvi_file);
   } else {
-    dvi_file = MFOPEN(dvi_filename, FOPEN_RBIN_MODE);
-    if (!dvi_file) {
-      char *p;
-      p = strrchr(dvi_filename, '.');
-      if (p == NULL || (!FILESTRCASEEQ(p, ".dvi") &&
-                        !FILESTRCASEEQ(p, ".xdv"))) {
-        strcat(dvi_filename, ".xdv");
+    char *p, *saved_orig_name;
+    dvi_file = NULL;
+    saved_orig_name = xstrdup(dvi_filename);
+    p = strrchr(dvi_filename, '.');
+    if (p == NULL || (!FILESTRCASEEQ(p, ".dvi") &&
+                      !FILESTRCASEEQ(p, ".xdv"))) {
+      strcat(dvi_filename, ".xdv");
+      dvi_file = MFOPEN(dvi_filename, FOPEN_RBIN_MODE);
+      if (!dvi_file) {
+        dvi_filename[strlen(dvi_filename) - 4] = '\0';
+        strcat(dvi_filename, ".dvi");
         dvi_file = MFOPEN(dvi_filename, FOPEN_RBIN_MODE);
-        if (!dvi_file) {
-          dvi_filename[strlen(dvi_filename) - 4] = '\0';
-          strcat(dvi_filename, ".dvi");
-          dvi_file = MFOPEN(dvi_filename, FOPEN_RBIN_MODE);
-        }
       }
     }
+    if (!dvi_file)
+      dvi_file = MFOPEN(saved_orig_name, FOPEN_RBIN_MODE);
+    free(saved_orig_name);
+
     if (!dvi_file) {
       ERROR("Could not open specified DVI (or XDV) file: %s",
             dvi_filename);
