| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | /* GMODULE - GLIB wrapper code for dynamic module loading
 | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  |  * Copyright (C) 1998, 2000 Tim Janik | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This library is free software; you can redistribute it and/or | 
					
						
							| 
									
										
										
										
											2000-07-26 11:02:02 +00:00
										 |  |  |  * modify it under the terms of the GNU Lesser General Public | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |  * License as published by the Free Software Foundation; either | 
					
						
							|  |  |  |  * version 2 of the License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This library is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU | 
					
						
							| 
									
										
										
										
											2000-07-26 11:02:02 +00:00
										 |  |  |  * Lesser General Public License for more details. | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2000-07-26 11:02:02 +00:00
										 |  |  |  * You should have received a copy of the GNU Lesser General Public | 
					
						
							| 
									
										
										
										
											2014-01-23 12:58:29 +01:00
										 |  |  |  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											1998-12-15 05:28:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-24 06:14:27 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2000-07-26 11:02:02 +00:00
										 |  |  |  * Modified by the GLib Team and others 1997-2000.  See the AUTHORS | 
					
						
							| 
									
										
										
										
											1999-02-24 06:14:27 +00:00
										 |  |  |  * file for a list of people on the GLib Team.  See the ChangeLog | 
					
						
							|  |  |  |  * files for a list of changes.  These files are distributed with | 
					
						
							|  |  |  |  * GLib at ftp://ftp.gtk.org/pub/gtk/. 
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-15 05:28:02 +00:00
										 |  |  | /* 
 | 
					
						
							|  |  |  |  * MT safe | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2007-11-08 03:43:46 +00:00
										 |  |  | #include "config.h"
 | 
					
						
							| 
									
										
										
										
											1998-12-15 05:28:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | #include <dlfcn.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Perl includes <nlist.h> and <link.h> instead of <dlfcn.h> on some systmes? */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* dlerror() is not implemented on all systems
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef	G_MODULE_HAVE_DLERROR
 | 
					
						
							|  |  |  | #  ifdef __NetBSD__
 | 
					
						
							|  |  |  | #    define dlerror()	g_strerror (errno)
 | 
					
						
							|  |  |  | #  else /* !__NetBSD__ */
 | 
					
						
							|  |  |  | /* could we rely on errno's state here? */ | 
					
						
							|  |  |  | #    define dlerror()	"unknown dl-error"
 | 
					
						
							|  |  |  | #  endif /* !__NetBSD__ */
 | 
					
						
							|  |  |  | #endif	/* G_MODULE_HAVE_DLERROR */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* some flags are missing on some systems, so we provide
 | 
					
						
							|  |  |  |  * harmless defaults. | 
					
						
							|  |  |  |  * The Perl sources say, RTLD_LAZY needs to be defined as (1), | 
					
						
							|  |  |  |  * at least for Solaris 1. | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Mandatory: | 
					
						
							|  |  |  |  * RTLD_LAZY   - resolve undefined symbols as code from the dynamic library | 
					
						
							|  |  |  |  *		 is executed. | 
					
						
							|  |  |  |  * RTLD_NOW    - resolve all undefined symbols before dlopen returns, and fail | 
					
						
							|  |  |  |  *		 if this cannot be done. | 
					
						
							|  |  |  |  * Optionally: | 
					
						
							|  |  |  |  * RTLD_GLOBAL - the external symbols defined in the library will be made | 
					
						
							|  |  |  |  *		 available to subsequently loaded libraries. | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | #ifndef	RTLD_LAZY
 | 
					
						
							|  |  |  | #define	RTLD_LAZY	1
 | 
					
						
							|  |  |  | #endif	/* RTLD_LAZY */
 | 
					
						
							|  |  |  | #ifndef	RTLD_NOW
 | 
					
						
							|  |  |  | #define	RTLD_NOW	0
 | 
					
						
							|  |  |  | #endif	/* RTLD_NOW */
 | 
					
						
							| 
									
										
										
										
											2001-02-17 06:28:07 +00:00
										 |  |  | /* some systems (OSF1 V5.0) have broken RTLD_GLOBAL linkage */ | 
					
						
							|  |  |  | #ifdef G_MODULE_BROKEN_RTLD_GLOBAL
 | 
					
						
							|  |  |  | #undef	RTLD_GLOBAL
 | 
					
						
							|  |  |  | #endif /* G_MODULE_BROKEN_RTLD_GLOBAL */
 | 
					
						
							|  |  |  | #ifndef	RTLD_GLOBAL
 | 
					
						
							|  |  |  | #define	RTLD_GLOBAL	0
 | 
					
						
							|  |  |  | #endif	/* RTLD_GLOBAL */
 | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* --- functions --- */ | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | static gchar* | 
					
						
							| 
									
										
											  
											
												Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".
	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)
	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.
	* gmodule.c: Lock recursive mutex during most module functions for
	safety.
	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.
	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.
	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
	* glib/tmpl/modules.sgml: Updated.
											
										 
											2000-12-22 13:44:25 +00:00
										 |  |  | fetch_dlerror (gboolean replace_null) | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   gchar *msg = dlerror (); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".
	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)
	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.
	* gmodule.c: Lock recursive mutex during most module functions for
	safety.
	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.
	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.
	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
	* glib/tmpl/modules.sgml: Updated.
											
										 
											2000-12-22 13:44:25 +00:00
										 |  |  |   /* make sure we always return an error message != NULL, if
 | 
					
						
							|  |  |  |    * expected to do so. */ | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".
	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)
	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.
	* gmodule.c: Lock recursive mutex during most module functions for
	safety.
	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.
	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.
	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
	* glib/tmpl/modules.sgml: Updated.
											
										 
											2000-12-22 13:44:25 +00:00
										 |  |  |   if (!msg && replace_null) | 
					
						
							|  |  |  |     return "unknown dl-error"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return msg; | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | static gpointer | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | _g_module_open (const gchar *file_name, | 
					
						
							| 
									
										
										
										
											2004-02-20 01:41:00 +00:00
										 |  |  | 		gboolean     bind_lazy, | 
					
						
							|  |  |  | 		gboolean     bind_local) | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   gpointer handle; | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											2004-02-20 01:41:00 +00:00
										 |  |  |   handle = dlopen (file_name, | 
					
						
							| 
									
										
										
										
											2006-12-13 15:41:22 +00:00
										 |  |  | 		   (bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW)); | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   if (!handle) | 
					
						
							| 
									
										
											  
											
												Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".
	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)
	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.
	* gmodule.c: Lock recursive mutex during most module functions for
	safety.
	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.
	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.
	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
	* glib/tmpl/modules.sgml: Updated.
											
										 
											2000-12-22 13:44:25 +00:00
										 |  |  |     g_module_set_error (fetch_dlerror (TRUE)); | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   return handle; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static gpointer | 
					
						
							|  |  |  | _g_module_self (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   gpointer handle; | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   /* to query symbols from the program itself, special link options
 | 
					
						
							|  |  |  |    * are required on some systems. | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											2012-11-28 16:55:54 +01:00
										 |  |  | #ifdef __BIONIC__
 | 
					
						
							|  |  |  |   handle = RTLD_DEFAULT; | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   handle = dlopen (NULL, RTLD_GLOBAL | RTLD_LAZY); | 
					
						
							| 
									
										
										
										
											2012-11-28 16:55:54 +01:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   if (!handle) | 
					
						
							| 
									
										
											  
											
												Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".
	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)
	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.
	* gmodule.c: Lock recursive mutex during most module functions for
	safety.
	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.
	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.
	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
	* glib/tmpl/modules.sgml: Updated.
											
										 
											2000-12-22 13:44:25 +00:00
										 |  |  |     g_module_set_error (fetch_dlerror (TRUE)); | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   return handle; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | _g_module_close (gpointer handle, | 
					
						
							|  |  |  | 		 gboolean is_unref) | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   /* are there any systems out there that have dlopen()/dlclose()
 | 
					
						
							|  |  |  |    * without a reference count implementation? | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   is_unref |= 1; | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   if (is_unref) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |       if (dlclose (handle) != 0) | 
					
						
							| 
									
										
											  
											
												Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".
	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)
	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.
	* gmodule.c: Lock recursive mutex during most module functions for
	safety.
	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.
	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.
	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
	* glib/tmpl/modules.sgml: Updated.
											
										 
											2000-12-22 13:44:25 +00:00
										 |  |  | 	g_module_set_error (fetch_dlerror (TRUE)); | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static gpointer | 
					
						
							| 
									
										
										
										
											2000-03-01 04:57:07 +00:00
										 |  |  | _g_module_symbol (gpointer     handle, | 
					
						
							|  |  |  | 		  const gchar *symbol_name) | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   gpointer p; | 
					
						
							| 
									
										
										
										
											2006-12-13 15:41:22 +00:00
										 |  |  |   gchar *msg; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   fetch_dlerror (FALSE); | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |   p = dlsym (handle, symbol_name); | 
					
						
							| 
									
										
										
										
											2006-12-13 15:41:22 +00:00
										 |  |  |   msg = fetch_dlerror (FALSE); | 
					
						
							|  |  |  |   if (msg) | 
					
						
							|  |  |  |     g_module_set_error (msg); | 
					
						
							| 
									
										
										
										
											1998-08-10 01:36:18 +00:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											1998-08-09 08:32:18 +00:00
										 |  |  |   return p; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
											  
											
												removed dummy structure definitions for struct _GCache, _GTree, _GTimer,
Tue Oct 27 03:00:50 1998  Tim Janik  <timj@gtk.org>
        * glib.h: removed dummy structure definitions for struct _GCache,
        _GTree, _GTimer, _GMemChunk, _GListAllocator and _GStringChunk.
        * gutils.c: implement glib's inline functions _after_ all include
        statements have been processed.
        removed Tor's MAXPATHLEN check since there already was one supplied
        further down in this file.
        (LibMain): special cased the #ifdef __LCC__ case for NATIVE_WIN32,
        since lcc maybe used on other platforms as well. why in hell is this
        stuff required?
        (g_get_any_init): for windows, if the user name is supplied, use it as
        realname also.
        in general, if there is no homedir specified, use the tmpdir that
        we already figured.
        * gtimer.c (g_timer_elapsed): changed a g_assert() statement to
        g_return_if_fail().
        * applied glib-tml-981020-0.patch for WIN32 portability, added some
        comments and g_return_if_fail() statements, minor indentation fixes.
        ChangeLog entry from Tor Lillqvist is appended.
        * glib.h (struct dirent): use lower case structure members.
        * glib.h:
        * makefile.lcc:
        * makefile.msc:
        s/COMPILING_GLIB/GLIB_COMPILATION/
1998-10-20: Tor Lillqvist <tml@iki.fi>
        * README.win32 glib.def gmodule.def
        * glibconfig.h.win32 gmodule/gmoduleconf.h.win32:
        New files for the Windows port. The .def files list exported
        symbols for the Microsoft linker and compatibles.
        * configure.in:
        Added checks for some platform-dependent headers: pwd.h sys/param.h
        sys/select.h sys/time.h sys/times.h unistd.h, and the function lstat.
        * gerror.c:
        Conditionalized inclusion of system-dependent headers. Changes
        for Windows: no gdb to do a stack trace. Just call abort().
        * glib.h:
        Changes for Windows:
        Added macros G_DIR_SEPARATOR, G_DIR_SEPARATOR_S for
        platform-dependent file name syntax elements. Added macros
        G_SEARCHPATH_SEPARATOR, G_SEARCHPATH_SEPARATOR_S for
        platform-dependent search path syntax conventions.
        Added pragmas for Microsoft C to make it more pedantic.
        Marked GLib's global variables for export from DLL.
        Added the function g_strescape that escapes backslashes.
        Added functions g_path_is_absolute and g_path_skip_root to
        handle platform-dependent file name syntax.
        Added the function g_getenv that expands environment variables
        that contain references to other environment variables, as is
        typical on Windows NT.
        Added the GIOChannel structure which is used to encapsulate the
        IPC mechanism used by the GIMP's plug-ins, and possibly other
        things later. On Unix a GIOChannel encapsulates just a file
        descriptor. On Windows it contains a file handle from _pipe() and a
        few other things related to the implementation of gdk_input_add
        and GIMP plug-in communication. Subject to change.
        Removed duplicate declarations of the version variables.
        For the Microsoft compiler, declare own implementation of
        ftruncate and the <dirent.h> functions.
        * gmem.c:
        Define a symbolic name  for the profiling table size.
        * gmessages.c:
        Conditionalized inclusion of unistd.h. On Windows, output using
        stdio to stdout.
        * gscanner.c:
        Conditionalized inclusion of unistd.h. Added changes for
        Microsoft C. Added CR to the skipped character set. Added small
        workaround for MSC compiler bug in g_scanner_cur_value.
        * gstrfuncs.c:
        Added the function g_strescape, which escapes the backslash
        character. Needed especially when printing Windows filenames.
        * gtimer.c:
        Conditionalized inclusion of unistd.h and sys/time.h. Added
        implementations for Windows.
        * gutils.c:
        Conditionalized inclusion of platform-dependent headers. Use
        the platform-independent file name syntax macros.
        Conditionalize code on platform-dependent features. Added the
        functions g_path_is_absolute g_path_skip_root and g_getenv.
        Added the GIOChannel-related functions. Added
        compiler-dependent Unix compatibility functions for Windows.
        * makefile.lcc makefile.msc:
        New files. Compiler-specific makefiles for LCC-Win32 and
        Microsoft C. Only Microsoft C is actually supported currently.
        * testglib.c:
        Added pathname check cases for Windows. Added workaround for
        bug in the Microsoft runtime library. Improved some tests a bit.
Tue Oct 27 04:00:11 1998  Tim Janik  <timj@gtk.org>
        * testgmodule.c (main): changed the #ifdef WIN32 test to NATIVE_WIN32,
        this needs to be more constistent throughout the code, do we go for
        NATIVE_WIN32 or WIN32?
        * gmodule.c (LibMain): special cased the #ifdef __LCC__ case for
        NATIVE_WIN32, since lcc maybe used on other platforms as well.
        * libgplugin_a.c (LibMain):
        * libgplugin_b.c (LibMain):
        likewise. not sure i like this special requirement for lcc in here.
        * gmodule-dl.c (_g_module_build_path):
        feature empty "" directories and prepend the module name with "lib".
        * gmodule-dld.c (_g_module_build_path):
        * gmodule-win32.c (_g_module_build_path):
        feature empty "" directories.
        * we need some more magic in the _g_module_build_path variants
        so we don't append/prepend lib and .so, .sl or .dll for those names
        that already contain it.
        * applied patch from Tor Lillqvist for g_module_build_path() and
        windows support.
1998-10-20: Tor Lillqvist <tml@iki.fi>
        * gmodule/gmodule-win32.c:
        New file.
        * gmodule/gmodule.c gmodule/gmodule.h:
        Added the funcion g_module_build_path that builds the path to
        a module file, decorating the name according to the system's
        conventions.  Added the Windows implementation.
        * gmodule/libgplugin_a.c gmodule/libgplugin_b.c:
        Added LibMain for LCC-Win32.
        * gmodule/testgmodule.c:
        Handle Windows dll names.
											
										 
											1998-10-27 04:11:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static gchar* | 
					
						
							|  |  |  | _g_module_build_path (const gchar *directory, | 
					
						
							|  |  |  | 		      const gchar *module_name) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1999-01-21 18:07:20 +00:00
										 |  |  |   if (directory && *directory) { | 
					
						
							| 
									
										
											  
											
												Merge in current Win32 version. Almost no Unix code touched.
	* README.win32: More text.
	* config.h.win32 glibconfig.h.win32: Update to match the
	corresponding generated files on Unix.
	* makefile.msc: Update with new source files, and gthread
 	library. Use the compiler flag -MD instead of using -D_DLL and
	"/nodefaultlib:libc msvcrt.lib" in the link phase.
	* glib.def: Include new functions, drop removed ones.
	* glib.h: Add comments about main loop and polling on Win32. (In
	general, it's only for the GIMP's use.) Add Win32 IO Channel
	functions. Remove the obsoleted old IO Channel stuff (which was
	in #if 0 already).
	* giowin32.c: New file.
	* gmain.c: Include config.h, conditionalize <sys/time.h>
 	inclusion.  Add g_poll implementation for Win32 (only for the
 	GIMP's needs for now, it's hard or even impossible to be as clean
 	and generic as on Unix). Implement g_get_current_time on Win32. If
 	threads aren't supported, don't try to wake up main thread's
 	loop. On Win32, use a semaphore and not a pipe to wake up the main
 	loop.
	* gmessages.c: On Win32, allocate a console window if the standard
	output handle is invalid before writing to stdout, and reopen stdout
	to that console window.
	* giochannel.c: Conditionalize unistd.h inclusion. Some indentation
	cleanup.
	* gstrfuncs.c: Include <signal.h>.
	* gutils.c: On Win32, also check the HOMEDRIVE and HOMEPATH
	environment variables.
	* gmodule-dl.c gmodule-dld.c: In
 	_g_module_build_path, don't add the "lib" prefix and
 	".so" or ".sl" suffix if already there.
	* gmodule-win32.c: Likewise for the ".dll" suffix.
	* gthread-posix.c: Conditionalize <sys/time.h> inclusion.
											
										 
											1999-01-16 23:46:42 +00:00
										 |  |  |     if (strncmp (module_name, "lib", 3) == 0) | 
					
						
							|  |  |  |       return g_strconcat (directory, "/", module_name, NULL); | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2002-03-02 20:30:33 +00:00
										 |  |  |       return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL); | 
					
						
							| 
									
										
										
										
											1999-01-21 18:07:20 +00:00
										 |  |  |   } else if (strncmp (module_name, "lib", 3) == 0) | 
					
						
							| 
									
										
											  
											
												Merge in current Win32 version. Almost no Unix code touched.
	* README.win32: More text.
	* config.h.win32 glibconfig.h.win32: Update to match the
	corresponding generated files on Unix.
	* makefile.msc: Update with new source files, and gthread
 	library. Use the compiler flag -MD instead of using -D_DLL and
	"/nodefaultlib:libc msvcrt.lib" in the link phase.
	* glib.def: Include new functions, drop removed ones.
	* glib.h: Add comments about main loop and polling on Win32. (In
	general, it's only for the GIMP's use.) Add Win32 IO Channel
	functions. Remove the obsoleted old IO Channel stuff (which was
	in #if 0 already).
	* giowin32.c: New file.
	* gmain.c: Include config.h, conditionalize <sys/time.h>
 	inclusion.  Add g_poll implementation for Win32 (only for the
 	GIMP's needs for now, it's hard or even impossible to be as clean
 	and generic as on Unix). Implement g_get_current_time on Win32. If
 	threads aren't supported, don't try to wake up main thread's
 	loop. On Win32, use a semaphore and not a pipe to wake up the main
 	loop.
	* gmessages.c: On Win32, allocate a console window if the standard
	output handle is invalid before writing to stdout, and reopen stdout
	to that console window.
	* giochannel.c: Conditionalize unistd.h inclusion. Some indentation
	cleanup.
	* gstrfuncs.c: Include <signal.h>.
	* gutils.c: On Win32, also check the HOMEDRIVE and HOMEPATH
	environment variables.
	* gmodule-dl.c gmodule-dld.c: In
 	_g_module_build_path, don't add the "lib" prefix and
 	".so" or ".sl" suffix if already there.
	* gmodule-win32.c: Likewise for the ".dll" suffix.
	* gthread-posix.c: Conditionalize <sys/time.h> inclusion.
											
										 
											1999-01-16 23:46:42 +00:00
										 |  |  |     return g_strdup (module_name); | 
					
						
							| 
									
										
											  
											
												removed dummy structure definitions for struct _GCache, _GTree, _GTimer,
Tue Oct 27 03:00:50 1998  Tim Janik  <timj@gtk.org>
        * glib.h: removed dummy structure definitions for struct _GCache,
        _GTree, _GTimer, _GMemChunk, _GListAllocator and _GStringChunk.
        * gutils.c: implement glib's inline functions _after_ all include
        statements have been processed.
        removed Tor's MAXPATHLEN check since there already was one supplied
        further down in this file.
        (LibMain): special cased the #ifdef __LCC__ case for NATIVE_WIN32,
        since lcc maybe used on other platforms as well. why in hell is this
        stuff required?
        (g_get_any_init): for windows, if the user name is supplied, use it as
        realname also.
        in general, if there is no homedir specified, use the tmpdir that
        we already figured.
        * gtimer.c (g_timer_elapsed): changed a g_assert() statement to
        g_return_if_fail().
        * applied glib-tml-981020-0.patch for WIN32 portability, added some
        comments and g_return_if_fail() statements, minor indentation fixes.
        ChangeLog entry from Tor Lillqvist is appended.
        * glib.h (struct dirent): use lower case structure members.
        * glib.h:
        * makefile.lcc:
        * makefile.msc:
        s/COMPILING_GLIB/GLIB_COMPILATION/
1998-10-20: Tor Lillqvist <tml@iki.fi>
        * README.win32 glib.def gmodule.def
        * glibconfig.h.win32 gmodule/gmoduleconf.h.win32:
        New files for the Windows port. The .def files list exported
        symbols for the Microsoft linker and compatibles.
        * configure.in:
        Added checks for some platform-dependent headers: pwd.h sys/param.h
        sys/select.h sys/time.h sys/times.h unistd.h, and the function lstat.
        * gerror.c:
        Conditionalized inclusion of system-dependent headers. Changes
        for Windows: no gdb to do a stack trace. Just call abort().
        * glib.h:
        Changes for Windows:
        Added macros G_DIR_SEPARATOR, G_DIR_SEPARATOR_S for
        platform-dependent file name syntax elements. Added macros
        G_SEARCHPATH_SEPARATOR, G_SEARCHPATH_SEPARATOR_S for
        platform-dependent search path syntax conventions.
        Added pragmas for Microsoft C to make it more pedantic.
        Marked GLib's global variables for export from DLL.
        Added the function g_strescape that escapes backslashes.
        Added functions g_path_is_absolute and g_path_skip_root to
        handle platform-dependent file name syntax.
        Added the function g_getenv that expands environment variables
        that contain references to other environment variables, as is
        typical on Windows NT.
        Added the GIOChannel structure which is used to encapsulate the
        IPC mechanism used by the GIMP's plug-ins, and possibly other
        things later. On Unix a GIOChannel encapsulates just a file
        descriptor. On Windows it contains a file handle from _pipe() and a
        few other things related to the implementation of gdk_input_add
        and GIMP plug-in communication. Subject to change.
        Removed duplicate declarations of the version variables.
        For the Microsoft compiler, declare own implementation of
        ftruncate and the <dirent.h> functions.
        * gmem.c:
        Define a symbolic name  for the profiling table size.
        * gmessages.c:
        Conditionalized inclusion of unistd.h. On Windows, output using
        stdio to stdout.
        * gscanner.c:
        Conditionalized inclusion of unistd.h. Added changes for
        Microsoft C. Added CR to the skipped character set. Added small
        workaround for MSC compiler bug in g_scanner_cur_value.
        * gstrfuncs.c:
        Added the function g_strescape, which escapes the backslash
        character. Needed especially when printing Windows filenames.
        * gtimer.c:
        Conditionalized inclusion of unistd.h and sys/time.h. Added
        implementations for Windows.
        * gutils.c:
        Conditionalized inclusion of platform-dependent headers. Use
        the platform-independent file name syntax macros.
        Conditionalize code on platform-dependent features. Added the
        functions g_path_is_absolute g_path_skip_root and g_getenv.
        Added the GIOChannel-related functions. Added
        compiler-dependent Unix compatibility functions for Windows.
        * makefile.lcc makefile.msc:
        New files. Compiler-specific makefiles for LCC-Win32 and
        Microsoft C. Only Microsoft C is actually supported currently.
        * testglib.c:
        Added pathname check cases for Windows. Added workaround for
        bug in the Microsoft runtime library. Improved some tests a bit.
Tue Oct 27 04:00:11 1998  Tim Janik  <timj@gtk.org>
        * testgmodule.c (main): changed the #ifdef WIN32 test to NATIVE_WIN32,
        this needs to be more constistent throughout the code, do we go for
        NATIVE_WIN32 or WIN32?
        * gmodule.c (LibMain): special cased the #ifdef __LCC__ case for
        NATIVE_WIN32, since lcc maybe used on other platforms as well.
        * libgplugin_a.c (LibMain):
        * libgplugin_b.c (LibMain):
        likewise. not sure i like this special requirement for lcc in here.
        * gmodule-dl.c (_g_module_build_path):
        feature empty "" directories and prepend the module name with "lib".
        * gmodule-dld.c (_g_module_build_path):
        * gmodule-win32.c (_g_module_build_path):
        feature empty "" directories.
        * we need some more magic in the _g_module_build_path variants
        so we don't append/prepend lib and .so, .sl or .dll for those names
        that already contain it.
        * applied patch from Tor Lillqvist for g_module_build_path() and
        windows support.
1998-10-20: Tor Lillqvist <tml@iki.fi>
        * gmodule/gmodule-win32.c:
        New file.
        * gmodule/gmodule.c gmodule/gmodule.h:
        Added the funcion g_module_build_path that builds the path to
        a module file, decorating the name according to the system's
        conventions.  Added the Windows implementation.
        * gmodule/libgplugin_a.c gmodule/libgplugin_b.c:
        Added LibMain for LCC-Win32.
        * gmodule/testgmodule.c:
        Handle Windows dll names.
											
										 
											1998-10-27 04:11:34 +00:00
										 |  |  |   else | 
					
						
							| 
									
										
										
										
											2002-03-02 20:30:33 +00:00
										 |  |  |     return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL); | 
					
						
							| 
									
										
											  
											
												removed dummy structure definitions for struct _GCache, _GTree, _GTimer,
Tue Oct 27 03:00:50 1998  Tim Janik  <timj@gtk.org>
        * glib.h: removed dummy structure definitions for struct _GCache,
        _GTree, _GTimer, _GMemChunk, _GListAllocator and _GStringChunk.
        * gutils.c: implement glib's inline functions _after_ all include
        statements have been processed.
        removed Tor's MAXPATHLEN check since there already was one supplied
        further down in this file.
        (LibMain): special cased the #ifdef __LCC__ case for NATIVE_WIN32,
        since lcc maybe used on other platforms as well. why in hell is this
        stuff required?
        (g_get_any_init): for windows, if the user name is supplied, use it as
        realname also.
        in general, if there is no homedir specified, use the tmpdir that
        we already figured.
        * gtimer.c (g_timer_elapsed): changed a g_assert() statement to
        g_return_if_fail().
        * applied glib-tml-981020-0.patch for WIN32 portability, added some
        comments and g_return_if_fail() statements, minor indentation fixes.
        ChangeLog entry from Tor Lillqvist is appended.
        * glib.h (struct dirent): use lower case structure members.
        * glib.h:
        * makefile.lcc:
        * makefile.msc:
        s/COMPILING_GLIB/GLIB_COMPILATION/
1998-10-20: Tor Lillqvist <tml@iki.fi>
        * README.win32 glib.def gmodule.def
        * glibconfig.h.win32 gmodule/gmoduleconf.h.win32:
        New files for the Windows port. The .def files list exported
        symbols for the Microsoft linker and compatibles.
        * configure.in:
        Added checks for some platform-dependent headers: pwd.h sys/param.h
        sys/select.h sys/time.h sys/times.h unistd.h, and the function lstat.
        * gerror.c:
        Conditionalized inclusion of system-dependent headers. Changes
        for Windows: no gdb to do a stack trace. Just call abort().
        * glib.h:
        Changes for Windows:
        Added macros G_DIR_SEPARATOR, G_DIR_SEPARATOR_S for
        platform-dependent file name syntax elements. Added macros
        G_SEARCHPATH_SEPARATOR, G_SEARCHPATH_SEPARATOR_S for
        platform-dependent search path syntax conventions.
        Added pragmas for Microsoft C to make it more pedantic.
        Marked GLib's global variables for export from DLL.
        Added the function g_strescape that escapes backslashes.
        Added functions g_path_is_absolute and g_path_skip_root to
        handle platform-dependent file name syntax.
        Added the function g_getenv that expands environment variables
        that contain references to other environment variables, as is
        typical on Windows NT.
        Added the GIOChannel structure which is used to encapsulate the
        IPC mechanism used by the GIMP's plug-ins, and possibly other
        things later. On Unix a GIOChannel encapsulates just a file
        descriptor. On Windows it contains a file handle from _pipe() and a
        few other things related to the implementation of gdk_input_add
        and GIMP plug-in communication. Subject to change.
        Removed duplicate declarations of the version variables.
        For the Microsoft compiler, declare own implementation of
        ftruncate and the <dirent.h> functions.
        * gmem.c:
        Define a symbolic name  for the profiling table size.
        * gmessages.c:
        Conditionalized inclusion of unistd.h. On Windows, output using
        stdio to stdout.
        * gscanner.c:
        Conditionalized inclusion of unistd.h. Added changes for
        Microsoft C. Added CR to the skipped character set. Added small
        workaround for MSC compiler bug in g_scanner_cur_value.
        * gstrfuncs.c:
        Added the function g_strescape, which escapes the backslash
        character. Needed especially when printing Windows filenames.
        * gtimer.c:
        Conditionalized inclusion of unistd.h and sys/time.h. Added
        implementations for Windows.
        * gutils.c:
        Conditionalized inclusion of platform-dependent headers. Use
        the platform-independent file name syntax macros.
        Conditionalize code on platform-dependent features. Added the
        functions g_path_is_absolute g_path_skip_root and g_getenv.
        Added the GIOChannel-related functions. Added
        compiler-dependent Unix compatibility functions for Windows.
        * makefile.lcc makefile.msc:
        New files. Compiler-specific makefiles for LCC-Win32 and
        Microsoft C. Only Microsoft C is actually supported currently.
        * testglib.c:
        Added pathname check cases for Windows. Added workaround for
        bug in the Microsoft runtime library. Improved some tests a bit.
Tue Oct 27 04:00:11 1998  Tim Janik  <timj@gtk.org>
        * testgmodule.c (main): changed the #ifdef WIN32 test to NATIVE_WIN32,
        this needs to be more constistent throughout the code, do we go for
        NATIVE_WIN32 or WIN32?
        * gmodule.c (LibMain): special cased the #ifdef __LCC__ case for
        NATIVE_WIN32, since lcc maybe used on other platforms as well.
        * libgplugin_a.c (LibMain):
        * libgplugin_b.c (LibMain):
        likewise. not sure i like this special requirement for lcc in here.
        * gmodule-dl.c (_g_module_build_path):
        feature empty "" directories and prepend the module name with "lib".
        * gmodule-dld.c (_g_module_build_path):
        * gmodule-win32.c (_g_module_build_path):
        feature empty "" directories.
        * we need some more magic in the _g_module_build_path variants
        so we don't append/prepend lib and .so, .sl or .dll for those names
        that already contain it.
        * applied patch from Tor Lillqvist for g_module_build_path() and
        windows support.
1998-10-20: Tor Lillqvist <tml@iki.fi>
        * gmodule/gmodule-win32.c:
        New file.
        * gmodule/gmodule.c gmodule/gmodule.h:
        Added the funcion g_module_build_path that builds the path to
        a module file, decorating the name according to the system's
        conventions.  Added the Windows implementation.
        * gmodule/libgplugin_a.c gmodule/libgplugin_b.c:
        Added LibMain for LCC-Win32.
        * gmodule/testgmodule.c:
        Handle Windows dll names.
											
										 
											1998-10-27 04:11:34 +00:00
										 |  |  | } |