From: Eli Zaretskii Date: Sat, 25 Apr 2020 13:37:46 +0000 (+0300) Subject: Fix GDI+ image loading by file name X-Git-Tag: emacs-28.0.90~7514 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f7748ad682abca5968ce24ed488ba56d2e48ef8a;p=emacs.git Fix GDI+ image loading by file name Without a call to image_find_image, we can get a file name that is relative to data-directory/images/, or a file name that starts with "~/", in which case w32_load_image would fail. * src/image.c (native_image_load): Call image_find_image_file to resolve and encode the image file name. * src/w32image.c (w32_load_image): No need to encode the file name, as it's already encoded by native_image_load. --- diff --git a/src/image.c b/src/image.c index ffe2f607e52..c8a192aaaf1 100644 --- a/src/image.c +++ b/src/image.c @@ -6308,14 +6308,16 @@ native_image_p (Lisp_Object object) static bool native_image_load (struct frame *f, struct image *img) { + Lisp_Object image_file = image_spec_value (img->spec, QCfile, NULL); + + if (STRINGP (image_file)) + image_file = image_find_image_file (image_file); # ifdef HAVE_NTGUI - return w32_load_image (f, img, - image_spec_value (img->spec, QCfile, NULL), + return w32_load_image (f, img, image_file, image_spec_value (img->spec, QCdata, NULL)); # elif defined HAVE_NS - return ns_load_image (f, img, - image_spec_value (img->spec, QCfile, NULL), + return ns_load_image (f, img, image_file, image_spec_value (img->spec, QCdata, NULL)); # else return 0; diff --git a/src/w32image.c b/src/w32image.c index 8d39a09dc7e..70b2eb29b87 100644 --- a/src/w32image.c +++ b/src/w32image.c @@ -414,7 +414,6 @@ w32_load_image (struct frame *f, struct image *img, and succeeded. We have a valid token and GDI+ is active. */ if (STRINGP (spec_file)) { - spec_file = ENCODE_FILE (spec_file); const char *fn = map_w32_filename (SSDATA (spec_file), NULL); wchar_t filename_w[MAX_PATH]; filename_to_utf16 (fn, filename_w);