From d07ff9db920196077333148f6db88525c8ba3151 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 23 Sep 2012 17:16:57 +0800 Subject: [PATCH] Remove LIBRARIES arg from w32_delayed_load and friends. These always use Vdynamic_library_alist anyway. * src/image.c (Finit_image_library, lookup_image_type) (define_image_type): Remove now-unneeded second arg. (init_xpm_functions, init_png_functions, init_jpeg_functions) (init_tiff_functions, init_gif_functions, init_svg_functions): Arglist and w32_delayed_load calling convention changed. (gs_type): Remove init_gs_functions; there is no such function. * src/gnutls.c (init_gnutls_functions): Caller changed; remove arg. (Fgnutls_available_p): Caller changed. * src/xml.c (init_libxml2_functions, Flibxml_parse_html_region) (Flibxml_parse_xml_region): Likewise. * src/dispextern.h (struct image_type): Remove arg from init function. * src/w32.c (w32_delayed_load): Remove LIBRARIES argument; always use Vdynamic_library_alist. * lisp/image.el (image-type-available-p): Change caller to init-image-library. --- lisp/ChangeLog | 5 +++ lisp/image.el | 2 +- src/ChangeLog | 20 +++++++++ src/dispextern.h | 2 +- src/gnutls.c | 6 +-- src/image.c | 107 +++++++++++++++++++---------------------------- src/w32.c | 28 ++++++------- src/w32.h | 2 +- src/xml.c | 8 ++-- 9 files changed, 92 insertions(+), 88 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 351b6ea6cb8..d0c1c50a6dd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-09-23 Chong Yidong + + * image.el (image-type-available-p): Adapt to init-image-library + argument changes. + 2012-09-22 Juri Linkov * dired.el (dired-mode-map): Add [remap read-only-mode] for diff --git a/lisp/image.el b/lisp/image.el index 99c0a74a512..72dc654757a 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -346,7 +346,7 @@ Optional DATA-P non-nil means SOURCE is a string containing image data." "Return non-nil if image type TYPE is available. Image types are symbols like `xbm' or `jpeg'." (and (fboundp 'init-image-library) - (init-image-library type dynamic-library-alist))) + (init-image-library type))) ;;;###autoload diff --git a/src/ChangeLog b/src/ChangeLog index 37c1ecf8824..d35092e277f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,23 @@ +2012-09-23 Chong Yidong + + * w32.c (w32_delayed_load): Remove LIBRARIES argument; always use + Vdynamic_library_alist. + + * gnutls.c (init_gnutls_functions): Caller changed; remove arg. + (Fgnutls_available_p): Caller changed. + + * xml.c (init_libxml2_functions, Flibxml_parse_html_region) + (Flibxml_parse_xml_region): Likewise. + + * dispextern.h (struct image_type): Remove arg from init function. + + * image.c (Finit_image_library, lookup_image_type) + (define_image_type): Remove now-unneeded second arg. + (init_xpm_functions, init_png_functions, init_jpeg_functions) + (init_tiff_functions, init_gif_functions, init_svg_functions): + Arglist and w32_delayed_load calling convention changed. + (gs_type): Remove init_gs_functions; there is no such function. + 2012-09-23 Paul Eggert Simplify and avoid signal-handling races (Bug#12471). diff --git a/src/dispextern.h b/src/dispextern.h index 1faeeb19d5b..bb894520a4d 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2769,7 +2769,7 @@ struct image_type /* Initialization function (used for dynamic loading of image libraries on Windows), or NULL if none. */ - int (* init) (Lisp_Object); + int (* init) (void); /* Next in list of all supported image types. */ struct image_type *next; diff --git a/src/gnutls.c b/src/gnutls.c index 1c4693aee32..cfe7d97aa59 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -142,12 +142,12 @@ DEF_GNUTLS_FN (int, gnutls_x509_crt_import, DEF_GNUTLS_FN (int, gnutls_x509_crt_init, (gnutls_x509_crt_t *)); static int -init_gnutls_functions (Lisp_Object libraries) +init_gnutls_functions (void) { HMODULE library; int max_log_level = 1; - if (!(library = w32_delayed_load (libraries, Qgnutls_dll))) + if (!(library = w32_delayed_load (Qgnutls_dll))) { GNUTLS_LOG (1, max_log_level, "GnuTLS library not found"); return 0; @@ -656,7 +656,7 @@ DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, else { Lisp_Object status; - status = init_gnutls_functions (Vdynamic_library_alist) ? Qt : Qnil; + status = init_gnutls_functions () ? Qt : Qnil; Vlibrary_cache = Fcons (Fcons (Qgnutls_dll, status), Vlibrary_cache); return status; } diff --git a/src/image.c b/src/image.c index a3717bf365e..7c74df5457f 100644 --- a/src/image.c +++ b/src/image.c @@ -579,15 +579,10 @@ static int x_build_heuristic_mask (struct frame *, struct image *, do { Vimage_types = Fcons (type, Vimage_types); } while (0) /* Define a new image type from TYPE. This adds a copy of TYPE to - image_types and caches the loading status of TYPE. - - LIBRARIES is an alist associating dynamic libraries to external - files implementing them, which is passed to the image library - initialization function if necessary. A nil value defaults to - Vdynamic_library_alist. */ + image_types and caches the loading status of TYPE. */ static struct image_type * -define_image_type (struct image_type *type, Lisp_Object libraries) +define_image_type (struct image_type *type) { struct image_type *p = NULL; Lisp_Object target_type = *type->type; @@ -609,7 +604,7 @@ define_image_type (struct image_type *type, Lisp_Object libraries) else #endif { - type_valid = type->init (libraries); + type_valid = type->init (); CACHE_IMAGE_TYPE (target_type, type_valid ? Qt : Qnil); } } @@ -3053,7 +3048,7 @@ static const struct image_keyword xpm_format[XPM_LAST] = }; #ifdef HAVE_NTGUI -static int init_xpm_functions (Lisp_Object); +static int init_xpm_functions (void); #else #define init_xpm_functions NULL #endif @@ -3267,11 +3262,11 @@ DEF_IMGLIB_FN (int, XpmReadFileToImage, (Display *, char *, xpm_XImage **, DEF_IMGLIB_FN (void, XImageFree, (xpm_XImage *)); static int -init_xpm_functions (Lisp_Object libraries) +init_xpm_functions (void) { HMODULE library; - if (!(library = w32_delayed_load (libraries, Qxpm))) + if (!(library = w32_delayed_load (Qxpm))) return 0; LOAD_IMGLIB_FN (library, XpmFreeAttributes); @@ -5397,7 +5392,7 @@ static const struct image_keyword png_format[PNG_LAST] = }; #ifdef HAVE_NTGUI -static int init_png_functions (Lisp_Object); +static int init_png_functions (void); #else #define init_png_functions NULL #endif @@ -5469,11 +5464,11 @@ DEF_IMGLIB_FN (jmp_buf *, png_set_longjmp_fn, (png_structp, png_longjmp_ptr, siz #endif /* libpng version >= 1.5 */ static int -init_png_functions (Lisp_Object libraries) +init_png_functions (void) { HMODULE library; - if (!(library = w32_delayed_load (libraries, Qpng))) + if (!(library = w32_delayed_load (Qpng))) return 0; LOAD_IMGLIB_FN (library, png_get_io_ptr); @@ -6056,7 +6051,7 @@ static const struct image_keyword jpeg_format[JPEG_LAST] = }; #ifdef HAVE_NTGUI -static int init_jpeg_functions (Lisp_Object); +static int init_jpeg_functions (void); #else #define init_jpeg_functions NULL #endif @@ -6125,11 +6120,11 @@ DEF_IMGLIB_FN (struct jpeg_error_mgr *, jpeg_std_error, (struct jpeg_error_mgr * DEF_IMGLIB_FN (boolean, jpeg_resync_to_restart, (j_decompress_ptr, int)); static int -init_jpeg_functions (Lisp_Object libraries) +init_jpeg_functions (void) { HMODULE library; - if (!(library = w32_delayed_load (libraries, Qjpeg))) + if (!(library = w32_delayed_load (Qjpeg))) return 0; LOAD_IMGLIB_FN (library, jpeg_finish_decompress); @@ -6648,7 +6643,7 @@ static const struct image_keyword tiff_format[TIFF_LAST] = }; #ifdef HAVE_NTGUI -static int init_tiff_functions (Lisp_Object); +static int init_tiff_functions (void); #else #define init_tiff_functions NULL #endif @@ -6702,11 +6697,11 @@ DEF_IMGLIB_FN (void, TIFFClose, (TIFF *)); DEF_IMGLIB_FN (int, TIFFSetDirectory, (TIFF *, tdir_t)); static int -init_tiff_functions (Lisp_Object libraries) +init_tiff_functions (void) { HMODULE library; - if (!(library = w32_delayed_load (libraries, Qtiff))) + if (!(library = w32_delayed_load (Qtiff))) return 0; LOAD_IMGLIB_FN (library, TIFFSetErrorHandler); @@ -7103,7 +7098,7 @@ static const struct image_keyword gif_format[GIF_LAST] = }; #ifdef HAVE_NTGUI -static int init_gif_functions (Lisp_Object); +static int init_gif_functions (void); #else #define init_gif_functions NULL #endif @@ -7175,11 +7170,11 @@ DEF_IMGLIB_FN (GifFileType *, DGifOpen, (void *, InputFunc)); DEF_IMGLIB_FN (GifFileType *, DGifOpenFileName, (const char *)); static int -init_gif_functions (Lisp_Object libraries) +init_gif_functions (void) { HMODULE library; - if (!(library = w32_delayed_load (libraries, Qgif))) + if (!(library = w32_delayed_load (Qgif))) return 0; LOAD_IMGLIB_FN (library, DGifCloseFile); @@ -7600,7 +7595,7 @@ static struct image_keyword imagemagick_format[IMAGEMAGICK_LAST] = }; #ifdef HAVE_NTGUI -static int init_imagemagick_functions (Lisp_Object); +static int init_imagemagick_functions (void); #else #define init_imagemagick_functions NULL #endif @@ -8154,7 +8149,7 @@ static const struct image_keyword svg_format[SVG_LAST] = }; #ifdef HAVE_NTGUI -static int init_svg_functions (Lisp_Object); +static int init_svg_functions (void); #else #define init_svg_functions NULL #endif @@ -8218,14 +8213,14 @@ DEF_IMGLIB_FN (void, g_error_free); Lisp_Object Qgdk_pixbuf, Qglib, Qgobject; static int -init_svg_functions (Lisp_Object libraries) +init_svg_functions (void) { HMODULE library, gdklib, glib, gobject; - if (!(glib = w32_delayed_load (libraries, Qglib)) - || !(gobject = w32_delayed_load (libraries, Qgobject)) - || !(gdklib = w32_delayed_load (libraries, Qgdk_pixbuf)) - || !(library = w32_delayed_load (libraries, Qsvg))) + if (!(glib = w32_delayed_load (Qglib)) + || !(gobject = w32_delayed_load (Qgobject)) + || !(gdklib = w32_delayed_load (Qgdk_pixbuf)) + || !(library = w32_delayed_load (Qsvg))) return 0; LOAD_IMGLIB_FN (library, rsvg_handle_new); @@ -8549,12 +8544,6 @@ static const struct image_keyword gs_format[GS_LAST] = {":background", IMAGE_STRING_OR_NIL_VALUE, 0} }; -#ifdef HAVE_NTGUI -static int init_gs_functions (Lisp_Object); -#else -#define init_gs_functions NULL -#endif - /* Structure describing the image type `ghostscript'. */ static struct image_type gs_type = @@ -8563,7 +8552,7 @@ static struct image_type gs_type = gs_image_p, gs_load, gs_clear_image, - init_gs_functions, + NULL, NULL }; @@ -8826,77 +8815,69 @@ DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0, "") Initialization ***********************************************************************/ -DEFUN ("init-image-library", Finit_image_library, Sinit_image_library, 2, 2, 0, +DEFUN ("init-image-library", Finit_image_library, Sinit_image_library, 1, 1, 0, doc: /* Initialize image library implementing image type TYPE. Return non-nil if TYPE is a supported image type. -Image types pbm and xbm are prebuilt; other types are loaded here. -Libraries to load are specified in alist LIBRARIES (usually, the value -of `dynamic-library-alist', which see). */) - (Lisp_Object type, Lisp_Object libraries) +If image libraries are loaded dynamically (currently only the case on +MS-Windows), load the library for TYPE if it is not yet loaded, using +the library file(s) specified by `dynamic-library-alist'. */) + (Lisp_Object type) { - return lookup_image_type (type, libraries) ? Qt : Qnil; + return lookup_image_type (type) ? Qt : Qnil; } /* Look up image type TYPE, and return a pointer to its image_type - structure. Return 0 if TYPE is not a known image type. - - LIBRARIES is an alist associating dynamic libraries to external - files implementing them, which is passed to the image library - initialization function if necessary. A nil value defaults to - Vdynamic_library_alist. */ + structure. Return 0 if TYPE is not a known image type. */ static struct image_type * -lookup_image_type (Lisp_Object type, Lisp_Object libraries) +lookup_image_type (Lisp_Object type) { - if (NILP (libraries)) - libraries = Vdynamic_library_alist; - /* Types pbm and xbm are built-in and always available. */ if (EQ (type, Qpbm)) - return define_image_type (&pbm_type, libraries); + return define_image_type (&pbm_type); if (EQ (type, Qxbm)) - return define_image_type (&xbm_type, libraries); + return define_image_type (&xbm_type); #if defined (HAVE_XPM) || defined (HAVE_NS) if (EQ (type, Qxpm)) - return define_image_type (&xpm_type, libraries); + return define_image_type (&xpm_type); #endif #if defined (HAVE_JPEG) || defined (HAVE_NS) if (EQ (type, Qjpeg)) - return define_image_type (&jpeg_type, libraries); + return define_image_type (&jpeg_type); #endif #if defined (HAVE_TIFF) || defined (HAVE_NS) if (EQ (type, Qtiff)) - return define_image_type (&tiff_type, libraries); + return define_image_type (&tiff_type); #endif #if defined (HAVE_GIF) || defined (HAVE_NS) if (EQ (type, Qgif)) - return define_image_type (&gif_type, libraries); + return define_image_type (&gif_type); #endif #if defined (HAVE_PNG) || defined (HAVE_NS) if (EQ (type, Qpng)) - return define_image_type (&png_type, libraries); + return define_image_type (&png_type); #endif #if defined (HAVE_RSVG) if (EQ (type, Qsvg)) - return define_image_type (&svg_type, libraries); + return define_image_type (&svg_type); #endif #if defined (HAVE_IMAGEMAGICK) if (EQ (type, Qimagemagick)) - return define_image_type (&imagemagick_type, libraries); + return define_image_type (&imagemagick_type); #endif #ifdef HAVE_GHOSTSCRIPT if (EQ (type, Qpostscript)) - return define_image_type (&gs_type, libraries); + return define_image_type (&gs_type); #endif return NULL; diff --git a/src/w32.c b/src/w32.c index bcb0511e2fa..8775a366e61 100644 --- a/src/w32.c +++ b/src/w32.c @@ -6525,29 +6525,27 @@ sys_localtime (const time_t *t) Lisp_Object Vlibrary_cache; -/* The argument LIBRARIES is an alist that associates a symbol - LIBRARY_ID, identifying an external DLL library known to Emacs, to - a list of filenames under which the library is usually found. In - most cases, the argument passed as LIBRARIES is the variable - `dynamic-library-alist', which is initialized to a list of common - library names. If the function loads the library successfully, it - returns the handle of the DLL, and records the filename in the - property :loaded-from of LIBRARY_ID; it returns NULL if the library - could not be found, or when it was already loaded (because the - handle is not recorded anywhere, and so is lost after use). It - would be trivial to save the handle too in :loaded-from, but - currently there's no use case for it. */ +/* Try loading LIBRARY_ID from the file(s) specified in + Vdynamic_library_alist. If the library is loaded successfully, + return the handle of the DLL, and record the filename in the + property :loaded-from of LIBRARY_ID. If the library could not be + found, or when it was already loaded (because the handle is not + recorded anywhere, and so is lost after use), return NULL. + + We could also save the handle in :loaded-from, but currently + there's no use case for it. */ HMODULE -w32_delayed_load (Lisp_Object libraries, Lisp_Object library_id) +w32_delayed_load (Lisp_Object library_id) { HMODULE library_dll = NULL; CHECK_SYMBOL (library_id); - if (CONSP (libraries) && NILP (Fassq (library_id, Vlibrary_cache))) + if (CONSP (Vdynamic_library_alist) + && NILP (Fassq (library_id, Vlibrary_cache))) { Lisp_Object found = Qnil; - Lisp_Object dlls = Fassq (library_id, libraries); + Lisp_Object dlls = Fassq (library_id, Vdynamic_library_alist); if (CONSP (dlls)) for (dlls = XCDR (dlls); CONSP (dlls); dlls = XCDR (dlls)) diff --git a/src/w32.h b/src/w32.h index 73d57a65a4a..39409e38082 100644 --- a/src/w32.h +++ b/src/w32.h @@ -146,7 +146,7 @@ extern int _sys_read_ahead (int fd); extern int _sys_wait_accept (int fd); extern Lisp_Object Vlibrary_cache, QCloaded_from; -extern HMODULE w32_delayed_load (Lisp_Object, Lisp_Object); +extern HMODULE w32_delayed_load (Lisp_Object); #ifdef HAVE_GNUTLS #include diff --git a/src/xml.c b/src/xml.c index b668525cf26..a22ca208743 100644 --- a/src/xml.c +++ b/src/xml.c @@ -82,7 +82,7 @@ libxml2_loaded_p (void) #endif /* !WINDOWSNT */ static int -init_libxml2_functions (Lisp_Object libraries) +init_libxml2_functions (void) { #ifdef WINDOWSNT if (libxml2_loaded_p ()) @@ -91,7 +91,7 @@ init_libxml2_functions (Lisp_Object libraries) { HMODULE library; - if (!(library = w32_delayed_load (libraries, Qlibxml2_dll))) + if (!(library = w32_delayed_load (Qlibxml2_dll))) { message ("%s", "libxml2 library not found"); return 0; @@ -257,7 +257,7 @@ DEFUN ("libxml-parse-html-region", Flibxml_parse_html_region, If BASE-URL is non-nil, it is used to expand relative URLs. */) (Lisp_Object start, Lisp_Object end, Lisp_Object base_url) { - if (init_libxml2_functions (Vdynamic_library_alist)) + if (init_libxml2_functions ()) return parse_region (start, end, base_url, 1); return Qnil; } @@ -269,7 +269,7 @@ DEFUN ("libxml-parse-xml-region", Flibxml_parse_xml_region, If BASE-URL is non-nil, it is used to expand relative URLs. */) (Lisp_Object start, Lisp_Object end, Lisp_Object base_url) { - if (init_libxml2_functions (Vdynamic_library_alist)) + if (init_libxml2_functions ()) return parse_region (start, end, base_url, 0); return Qnil; } -- 2.39.2