File source-dvipdfm-x.dif of Package texlive

2024-04-07  Yukimasa Morimi  <h20y6m@yahoo.co.jp>
 * pdfximage.c: fix an issue where the PDF becomes large when
   inserting the same image multiple times.
   https://github.com/texjporg/tex-jp-build/pull/169

---
 texk/dvipdfm-x/pdfximage.c |   29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

--- texk/dvipdfm-x/pdfximage.c	2024-03-05 00:40:55.000000000 +0100
+++ texk/dvipdfm-x/pdfximage.c	2024-04-12 14:22:48.800914761 +0200
@@ -396,6 +396,8 @@ load_image (const char *ident, const cha
 int utf8name_failed = 0;
 #endif /* WIN32 */
 
+#define dpx_streq(a, b) ((a) == (b) || (a) && (b) && strcmp(a, b) == 0)
+
 int
 pdf_ximage_load_image (const char *ident, const char *filename, load_options options)
 {
@@ -408,20 +410,21 @@ pdf_ximage_load_image (const char *ident
 
   for (i = 0; i < ic->count; i++) {
     I = &ic->ximages[i];
-    if (I->filename && !strcmp(filename, I->filename)) {
-      id = i;
-      break;
-    }
-  }
-  if (id >= 0) {
-    if (I->attr.page_no == options.page_no &&
-        (I->attr.page_name && options.page_name &&
-         strcmp(I->attr.page_name, options.page_name) == 0) &&
-        !pdf_compare_object(I->attr.dict, options.dict) && /* ????? */
-        I->attr.bbox_type == options.bbox_type) {
-      return id;
-    }
+    if (I->filename == NULL || strcmp(filename, I->filename) != 0)
+      continue;
+    id = i;
     f = I->fullname;
+
+    if (I->attr.page_no != options.page_no)
+      continue;
+    if (!dpx_streq(I->attr.page_name, options.page_name))
+      continue;
+    if (pdf_compare_object(I->attr.dict, options.dict) != 0) /* ????? */
+      continue;
+    if (I->attr.bbox_type != options.bbox_type)
+      continue;
+
+    return id;
   }
   if (f) {
     /* we already have converted this file; f is the temporary file name */
openSUSE Build Service is sponsored by