Fri May  4 11:49:18 2001  Owen Taylor  <otaylor@redhat.com>

	* Released 1.3.5

	* NEWS: Updated

	* configure.in (GLIB_MICRO_VERSION): Up version to 1.3.5,
	interface/binary age 0.

2001-05-04  Sven Neumann  <sven@convergence.de>

	* ghash.c: fixed a typo in a comment.

	* gtree.[ch]: added new functions g_tree_new_full(), g_tree_replace(), 
	g_tree_steal() and g_tree_foreach() to adapt GTree to the GHashTable
	API. Moved comments into the C file.

	* docs/reference/glib/glib-sections.txt
	* docs/reference/glib/tmpl/glib-unused.sgml
	* docs/reference/glib/tmpl/hash_tables.sgml
	* docs/reference/glib/tmpl/linked_lists_double.sgml
	* docs/reference/glib/tmpl/linked_lists_single.sgml
	* docs/reference/glib/tmpl/macros_misc.sgml
	* docs/reference/glib/tmpl/trees-binary.sgml: updated documentation
	
Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>

	* g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
	foreach() safe against removal of the _current_ element. While
	this could break some code, the new behavior is consistent with
	the rest of GLib/GTK+ and probably is what people expect in most
	cases. (Suggested by Paul Kuykendall, #50071)

Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
	(#50404, fix from Jonas Borgström)
	
Sun Apr 29 00:37:34 2001  Tim Janik  <timj@gtk.org>

	* ghook.[hc]: made hook ids a gulong.

2001-04-20  Dan Winship  <danw@ximian.com>

	* configure.in: Add a check for the Darwin dynamic linker. Use
	AC_TRY_LINK when checking for "nonposix getpwuid_r" so it notices
	"no getpwuid_r" correctly.

	* testglib.c (main): Make template[] bigger to prevent an overrun.
	Remove an unused variable. Initialize error to NULL.

	* tests/gio-test.c (main): Add a cast to prevent a warning when
	size_t is a long.

	* tests/type-test.c (main): Add an #ifdef to prevent a warning
	when G_HAVE_GINT64 is defined and G_GINT64_FORMAT isn't.

2001-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* ghash.c, ghash.h: Remove definition of g_hash_table_freeze and
	g_hash_table_thaw. Instead added G_DISABLE_DEPRECATED-guarded
	macros to ghash.h to go along the lines of the standard.

	* gscanner.c, gscanner.h: Dito for g_scanner_freeze_symbol_table
	and g_scanner_thaw_symbol_table.

	* gutils.c, gutils.h: Dito for g_dirname. g_basename is still
	defined in gutils.c, but declared ing gutils.h only
	G_DISABLE_DEPRECATED-guarded.
	
	* configure.in: Removed bashism in test for the pkg-config
	version.

	* configure.in: Rewrote test for multithread flag. Now uses
	localtime_r, which hopefully has a consistent prototype across
	different platforms. Also it uses a clever double EGREP trick
	instead of compiling, which could give false positives. Thanks to
	Dan Winship <danw@ximian.com> for the hint.

Wed Apr 18 17:35:38 2001  Owen Taylor  <otaylor@redhat.com>

	* gutils.c (_glib_gettext): Add missing static pointed
	out by Michael Meeks.

Wed Apr 18 09:37:07 2001  Owen Taylor  <otaylor@redhat.com>

	* MAINTAINERS: Removed. Keeping README, README.cvs-commits
	HACKING, and AUTHORS up to date is plenty without extra
	random files that someone thought a module should have.
	(Actually, I believe this was used for debbugs in the past.)

Tue Apr 17 11:47:07 2001  Owen Taylor  <otaylor@redhat.com>

	* Released 1.3.4

	* NEWS: Updated

Tue Apr 17 10:43:36 2001  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c: Define _GNU_SOURCE for stpcpy

	* tests/mainloop-test.c (main): Wait for all threads
	to start before beginning tests.

2001-04-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c (g_thread_pool_thread_proxy): Until now every
	thread pool always had at least one tread waiting to avoid
	switching overhead in case a new task would be added soon after
	one finished. This however means a big waste of threads, if many
	mostly inactive thread pools are involved. Now such a waiting
	thread will only wait for half a second (This value is of course
	very randomly picked) and go to the global threadpool afterwards.

Mon Apr 16 12:04:52 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Remove warnings about conflicts with the
	stable version.

	* glib-2.0.m4: Fix some of the error text to be halfway
	up to date.

	* README.in INSTALL.in: Add these to generate README, INSTAL
	(as in the stable branch). Update.

	* HACKING: Update.

2001-04-16  Havoc Pennington  <hp@redhat.com>

	* gqsort.c: docs

	* gfileutils.c: docs

	* gwin32.c: docs fixes

	* gconvert.c: docs

	* guniprop.c: docs

	* gutf8.c: docs

2001-04-16  Havoc Pennington  <hp@redhat.com>

	* glib-2.0.m4: put AC_PATH_PROG(pkg-config) before "Checking for
	glib" so the output looks right	

2001-03-23  Havoc Pennington  <hp@redhat.com>

	* gutils.c (g_parse_debug_string): make GDebugKeys argument 
	const

2001-04-14  Hans Breuer  <hans@breuer.org>

	* glib.def : 
	* makefile.msc.in : updated

	* gpattern.c : include "gutils.h" to resolve the inline hassle

2001-04-11  Alexander Larsson  <alexl@redhat.com>

	* glib-2.0.m4: Pass pkg-config options
	before the other args so it works even if
	POSIXLY_CORRECT is set.

Mon Apr  9 18:57:44 2001  Tim Janik  <timj@gtk.org>

	* configure.in: increment version to 1.3.4 (binary 0, interface 0).

2001-04-05  Christian Rose  <menthos@menthos.com>

	* configure.in: Added sv to ALL_LINGUAS.

Wed Apr  4 09:18:55 2001  Tim Janik  <timj@gtk.org>

	* Released GLib-1.3.3.

Tue Apr  3 20:22:59 2001  Tim Janik  <timj@gtk.org>

	* NEWS: updates.

	* NEWS.pre-1-3: take over old news.

Tue Apr  3 12:38:16 2001  Owen Taylor  <otaylor@redhat.com>

	* glib-config-2.0.in: Exit with an error message that you
	should use pkg-config instead.

	* configure.in (PACKAGE): Require pkg-config.

	* tests/Makefile.am (EXTRA_DIST): Add utf8.txt.

	* configure.in (GLIB_MICRO_VERSION): Up MICRO to 3,
	leave interface/binary at 0.

Tue Apr  3 13:46:22 2001  Tim Janik  <timj@gtk.org>

	* glist.[hc]: added g_list_nth_prev() which walks ->prev instead
	of ->next.

	* gpattern.[hc]: added shell-style pattern matching code from beast,
	derived from the gtk_pattern_*() code, but with a couple of bug fixes
	and a number of optimizations.

2001-04-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c: Added documentation.

	* gthreadpool.c: The global thread pool now also is seperated for
	bound and unbound threads. Only threads with standard stack size
	go to the global pool. g_thread_pool_new now protects the global
	setup of inform_mutex etc. with a lock. Fixed some typos. Unlock
	the queue after g_thread_pool_wakeup_and_stop_all in the proxy.

2001-04-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c: Use the new GRealThread member "context" instead of a
	GStaticPrivate to store the thread specific main loop context.

	* gthread.c: Added "context" member to GRealThread and updated
	g_thread_create, g_thread_self and g_thread_cleanup accordingly.
	
	* gthread.c, gthread.h: Removed the functions
	g_static_private_(get|set)_for_thread and adapted
	g_static_private_(get|set) and g_static_private_free
	accordingly. This fixes Bug #51435.
	
2001-03-30  Sven Neumann  <sven@gimp.org>

	* ghash.[ch]
	* docs/reference/glib/tmpl/hash_tables.sgml: added new functions
	g_hash_table_new_full, g_hash_table_replace, g_hash_table_steal and
	g_hash_table_foreach_steal. Moved most docs out of the template
	file into the C file. Please proofread the new documentation.

2001-03-29  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Updates.
	* tests/makefile.mingw.in
	* tests/makefile.msc.in: Add module-test rules.

Mon Mar 26 14:14:53 2001  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (INCLUDES): -DG_DISABLE_DEPRECATED

	* gmain.h timeloop.c: Surround the cruftiest stuff with
	#ifndef G_DISABLE_DEPRECATED.

	* gcompat.h gdate.h: Move compat defines back to 
	gdate.h, surround with #ifndef G_DISABLE_DEPRECATED. 
	Remove gcompat.h.

Mon Mar 26 13:34:50 2001  Owen Taylor  <otaylor@redhat.com>

	[ Patch from DindinX  <David.Odin@bigfoot.com>, added docs ]
 
 	* gstrfuncs.c, gstrfuncs.h: Add g_stpcpy () for platform that don't
 	have stpcpy ().
 	* gstrfuncs.c (g_strjoin, g_strjoinv and g_strconcat): use
 	g_stpcpy () so these functions run much faster.
 	* config.h.win32.in, glib.def: add reference to g_stpcpy ()
 	* configure.in: Add a test for the stpcpy () function.
 
2001-03-20  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
	Anders

2001-03-19  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_unichar_validate): added this function

2001-03-18  Tor Lillqvist  <tml@iki.fi>

	* gspawn-win32.c (SETUP_DEBUG): Add braces to silence gcc -Wall.

	* gspawn-win32-helper.c (write_no_error): Remove unused function.

	* tests/makefile.mingw.in (module-test.exe): Add rules for
	building module-test.

Wed Mar 14 18:46:54 2001  Tim Janik  <timj@gtk.org>

	* gscanner.[hc]: removed archaic gpointer derived_data; relict and
	added a GData member instead.
	
	* glist.[hc]: added g_list_remove_all().

	* gslist.[hc]: added g_slist_remove_all().

Sat Mar 17 19:54:51 2001  Owen Taylor  <otaylor@redhat.com>

	* timeloop.c: Reorder headers to make FreeBSD happy. 

2001-03-13  Tor Lillqvist  <tml@iki.fi>

	From Edward M. Lee  <tailbert@yahoo.com>:

	* gdate.c (g_date_set_parse): add support for dates that in the
	form "Wed Mar 14 2001". Running testgdate on cygwin requires this.

Fri Mar  9 18:01:43 2001  Tim Janik  <timj@gtk.org>

	* gscanner.[hc]: made config arg to g_scanner_new() const.

2001-03-12  Tor Lillqvist  <tml@iki.fi>

	* tests/Makefile.am (libmoduletestplugin_b_la_LIBADD,
	libmoduletestplugin_b_la_LIBADD): Link with the libgmodule la only
	on Win32.

2001-03-10  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Define G_PLATFORM_WIN32 here, too.

	* tests/Makefile.am: Use the _LIBADD dependency on libglib only on
	Win32.

2001-03-09  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update with some information about using configure
	and libtool.

2001-03-09  Hans Breuer  <hans@breuer.org>

	* gobject/gobject.def : updated

2001-03-08  Tor Lillqvist  <tml@iki.fi>

	* glib.def
	* gobject/gobject.def
	* gobject/makefile.mingw.in: Update.

2001-03-08  Sven Neumann  <sven@gimp.org>

	* gtree.[ch]: 
	* docs/reference/glib/tmpl/trees-binary.sgml: added new function 
	g_tree_lookup_extended().

Thu Mar  8 16:23:34 2001  Tim Janik  <timj@gtk.org>

	* ghook.[hc]: destruction cleanup. there's one
	->finalize_hook member in the hooklist now that gets
	called when a hook should be destroyed, that's it.
	that function is guarranteed to be called only when
	all ref_counts to the hook vanished, thus also when
	the hook is not in call.

2001-03-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in (FLAG_DOES_NOT_WORK): Fix typo and thus bug #51862.

Wed Mar  7 09:32:06 2001  Tim Janik  <timj@gtk.org>

	* glib-object.h: add gvaluearray.h.

	* gstring.[hc]: fixup naming of g_string_sprint*.
	
	* gtypes.h: fixed GCompareDataFunc naming.

2001-03-07  Christian Meyer  <chrisime@gnome.org>

	* configure.in: Added de (German) to ALL_LINGUAS.

2001-03-02  Christophe Merlet  <redfox@eikonex.org>

	* configure.in: Added fr (French) to ALL_LINGUAS.

2001-03-01  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_path_is_absolute): (Win32) Remove test for initial
	double backslash (UNC path), this will of course be matched by the
	test for an initial G_DIR_SEPARATOR right up front. Silly me.
	(g_find_program_in_path): Implement on Win32. Append the
	executable file name suffixes from PATHEXT in turn while looking
	for the program.
	(g_find_program_in_path): If the program we are looking for is a
	relative path in a subdirectory, don't do any path search.
	(g_get_any_init): (Win32) Also look for the USERPROFILE env var
	indicating the home directory equivalent.
	(g_find_program_in_path): (Win32): Use MAXPATHLEN, not PATH_MAX
	which isn't defined with MSVC.

	* testglib.c (main): Test g_find_program_in_path() on Win32 by
	looking for more.com and regedit.

	* glib.def: Add g_find_program_in_path.

2001-02-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c (g_thread_pool_thread_proxy): Make
	max_unused_threads work for -1 as well.

2001-02-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.h (struct _GThread): Change the order to match the order
	in g_thread_create().

	* gthread.c (g_static_rec_mutex_lock_full): Also do the right
	thing (behave like 'depth' calls to g_static_rec_mutex_lock) for a
	mutex, that is already locked.

Thu Feb 22 10:31:36 2001  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_source_remove_poll): Add missing implementation
	of g_source_remove_poll. (Pointed out by Stefan Westerfeld)

2001-02-21  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_find_program_in_path): Implement on Win32.

	Cygwin support contributed by Stefan Ondrejicka
	<ondrej@idata.sk>. Hopefully I got it all in while simultaneously
	adding support for auto*/libtool for mingw.

	* Makefile.am: Changes for auto* support on Cygwin and Win32. Do
	still distribute the hand-written makefiles and *.win32.in files,
	though. Use GIO, GSPAWN and PLATFORMDEP macros set by configure.
	Use -no-undefined. Pass -export-symbols glib.def to libtool.
	
	* configure.in: Define G_PLATFORM_WIN32 on both pure Win32 (mingw)
	and Cygwin. Add AC_CYGWIN, AC_EXEEXT and AC_LIBTOOL_WIN32_DLL
	calls for Cygwin and mingw support.  Check for %I64u guint64
	format (in MS C library). Set G_MODULE_IMPL on mingw and
	Cygwin. Use ac_object and ac_exeext.  Set GIO, GSPAWN, PLATFORMDEP
	and G_LIBS_EXTRA. Compile timeloop only on Unix. Define OS_WIN32
	automake conditional on Win32.
	
	* glib.h: Include gwin32.h also on Cygwin.

	* gfileutils.c (get_contents_posix): Use O_BINARY (defined as 0 on
	Unix) for Cygwin's sake.

	* gtimer.c (GETTIME): Reduce #ifdefs, use a macro GETTIME().

	* gconvert.c
	* gthread.c
	* gutf8.c
	* gutils.c: For code needed both on Cygwin and native Win32,
	test for G_PLATFORM_WIN32.

	* gmarkup.h: Use G_BEGIN_DECLS and G_END_DECLS.
	
	* gtypes.h: Refine GLIB_VAR definition. Also check for DLL_EXPORT
	in case compiling a static library on Win32 or Cygwin.

	* gwin32.c: No <direct.h> on Cygwin. No need for ftruncate() or
	dirent emulation on Cygwin.
	(get_package_directory_from_module) Convert return value from
	GetModuleFileName() to POSIX path on Cygwin.

	* tests/Makefile.am (progs_LDADD): Link with libglib, libgthread
	and libgmodule as appropriate. Use -no-undefined.

	* gbacktrace.c: Move #ifdefs around a bit on Win32.

2001-02-21  Tor Lillqvist  <tml@iki.fi>

	* gshell.c (unquote_string_inplace): Make static.

	* gthread.h: Include gtypes.h to be sure to get GLIB_VAR
	definition, remove definition from here.

	* gunicode.h: Remove duplicate GLIB_VAR definition from here, too.

	* gutils.c: (Win32) Use USERPROFILE as home dir if present. On
	Win2k, HOMEDRIVE and HOMEPATH aren't reliable.
	
	* Makefile.am (INCLUDES): Add -DGLIB_COMPILATION.

	* makefile.mingw.in: Remove install target, Windows isn't Unix.
	(DEFINES): Add -DDLL_EXPORT.

	* testgdate.c
	* testgdateparser.c
	* testglib.c: Undefine GLIB_COMPILATION.

	* testglib.c: Make some vars static. Add Cygwin path tests.

	* glib.def: Updates.

	* .cvsignore
	* */.cvsignore: Ignore also .obj, .dll, .lib and .exe files.

2001-02-19  Hans Breuer <hans@breuer.org>

	* glib/glib.def, gobject/gobject.def : added nissing symbols

	* gobject/makefile.msc : updated

	* glib/gmessages.c : call the "debug interrupt" before exiting the
	program, if build with msvc as debug version. Which gives the opportunity
	to see the callstack, etc.

	* glib/gthread.c : thread->pid is only defined #ifdef
	G_THREAD_USE_PID_SURROGATE

Mon Feb 19 07:32:38 2001  Tim Janik  <timj@gtk.org>

	* glib-config-2.0.in (lib_glib): my name is glib-config-2.0!
	don't exit with errorcode!=0 for --help or -h.
	
	* Makefile.am:
	* configure.in: build glib-config-2.0.

2001-02-17  Havoc Pennington  <hp@pobox.com>

	* gthread.c: include string.h

        Applied patch from Soeren Sandmann:
	
	* testglib.c: const fixes

	* gwin32.h: format cleanups

	* gutils.c (g_atexit): constify a variable
	(g_find_program_in_path): constification
	(g_basename): G_CONST_RETURN
	(g_path_skip_root): G_CONST_RETURN
	(g_getenv): G_CONST_RETURN
	(g_get_user_name): G_CONST_RETURN
	(g_get_real_name): G_CONST_RETURN
	(g_get_home_dir): G_CONST_RETURN
	(g_get_tmp_dir): G_CONST_RETURN
	(g_get_prgname): G_CONST_RETURN
	(_glib_gettext): G_CONST_RETURN

	* gunicode.h: formatting cleanups

	* gstrfuncs.c (g_strerror): G_CONST_RETURN
	(g_strsignal): G_CONST_RETURN

	* gspawn.c (g_execute): const on variables

	* gmessages.c (printf_string_upper_bound): fix const on a variable

	* gmem.c (g_mem_chunk_new): make the "name" arg const
	(struct _GRealMemChunk): make the "name" field const

	* gfileutils.c (g_file_open_tmp): store const return in a const
	gchar* variable

	* gdataset.c (g_quark_to_string): G_CONST_RETURN

Sat Feb 17 07:26:33 2001  Tim Janik  <timj@gtk.org>

	* configure.in (G_MODULE_HAVE_DLERROR): add check for broken RTLD_GLOBAL
	(on OSF1 V5.0).

2001-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, configure.in: Reverted the changes necessary to
	enlarge the system thread for G_THREAD_USE_PID_SURROGATE.

	* gthread.c: Now implement G_THREAD_USE_PID_SURROGATE in gthread.c
	instead of gthread/gthread-posix.c. While the latter has the
	advantage, that it is conceptually cleaner, it makes
	g_thread_self_posix_impl _very_ slow and that hurts
	GStaticRecMutex and other things. So the new version is less
	clean, but faster.

2001-02-09  Havoc Pennington  <hp@redhat.com>

	* gconvert.c (g_convert): don't overwrite errors

	* gerror.c (g_set_error): improve warning message if an error is
	overwritten	
	(g_propagate_error): ditto

2001-02-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added functions g_static_rec_mutex_init,
	g_static_rec_mutex_free, g_static_private_init,
	g_static_private_free, g_static_rw_lock_init to allow the usage of
	all those types dynamically. (g_static_rw_lock_free already
	existed). Aditionally freed static_private indeces are reused
	now. Untill now the array would just grow if you would use more
	and more static_private. That required adding a slist of all
	running threads, which could potentially be of good use later. It
	is not exported however. Renamed a LOCK and small indentation
	fixes.

	* tests/thread-test.c: Test the new static_private index freing
	and reusing feature.
	
Mon Feb 12 15:01:09 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in (gtk_doc_min_version): Add check for gtk-doc version.

2001-02-10  Tor Lillqvist  <tml@iki.fi>

	* gtypes.h
	* gutils.h: Move GLIB_VAR definition from gutils.h to gtypes.h

	* glib.def
	* gmem.h: Mark glib_mem_profiler_table for export.

	* gwin32.c (get_package_directory_from_module): Don't store
	address of local variable in hashtable.

2001-02-08  Fatih Demir	<kabalak@kabalak.net>

	* configure.in: Added "tr" to ALL_LINGUAS.

2001-02-04  Tor Lillqvist  <tml@iki.fi>

	* gwin32.c (g_win32_getlocale): Use "nn" for Nynorsk, as nn.po
	files are appearing now. If the sublanguage starts with '@', don't
	use a '_' separator. South Africa is 'ZA', not 'SA'.

Sun Feb  4 07:38:32 2001  Tim Janik  <timj@gtk.org>

	* docs/debugging.txt: s/glib_trap_/g_trap_/. add comments on
	g_trap_instance_signals, g_trace_instance_signals and
	GRUNTIME_DEBUG.

	* gmem.c: s/glib_trap_/g_trap_/.
	
2001-02-04  Tor Lillqvist  <tml@iki.fi>

	* tests/Makefile.am (thread_LDADD): Change order of libs,
	put progs_LDADD last. Needed for cygwin, says jbdoll@kepri.re.kr.

2001-02-02  Tor Lillqvist  <tml@iki.fi>

	* giochannel.h
	* giowin32.c
	* gmain.c: Stylistic cleanups. Use G_STRLOC in g_warning() calls.

	* glib.def: Add missing functions.

2001-02-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added g_static_mutex_init to allow
	initialization of a GStaticMutex, that can not be initialized with
	G_STATIC_MUTEX_INIT, for example in allocated structures.

Wed Jan 31 13:46:58 2001  Owen Taylor  <otaylor@redhat.com>

	* acinclude.m4 glib-gettext.m4: Fix problem with --disable-nls.

2001-01-31  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Corresponding change as below to
	GStaticMutex.

2001-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added g_static_mutex_free to allow using
	GStaticMutexes with limited lifetime without leaking.
	
	* configure.in: GStaticMutex doesn't have to provide extra space
	for debugging information for G_ERRORCHECK_MUTEXES, as then the
	non-default implementation (runtime_mutex) is used anyway.

	* gthread.h (g_cond_wait): Added debug information for
	g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.

2001-01-29  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Use the same GMutex structure as the
	configure-generated glibconfig.h does.

	* gstrfuncs.c (g_strsignal): Declare strsignal() on Cygwin, too,
	says jbdoll@kepri.re.kr.

2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c: Broadcast the condition, if there are waiting
	readers, as all might read at the same time. Only signal the
	writer thread, if there are no more readers.

2001-01-25  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in
	* */makefile.mingw.in: Protect the rule to rebuild makefile.mingw
	if makefile.mingw.in has changed with a check if said .in file
	exists. (This rule is mainly a convenience for yours truly.)

	* giowin32.c: Socket support rewritten. It was utterly broken, and
	untested in fact. We still do use a thread for each socket being
	watched, but instead of blocking in recv() (which of course was
	plain stupid for sockets being listen()ed on in a server-type
	application), we block in select(). The read method for sockets
	calls recv(). It is now possible for the application to call
	accept(), recv() or send() in the callback, just like on
	Unix. Tested with code kindly provided by Andrew Lanoix.

	Rename g_io_channel_win32_new_stream_socket() to
	g_io_channel_win32_new_socket() as it isn't restricted to stream
	sockets.
	
	* gmain.c (g_poll): Related changes in the Win32 version of
	g_poll(). When polling for messages, always do a PeekMessage()
	first. We used to miss messages if several were posted between
	calls to g_poll().

	* giochannel.h: Improve Win32-related comments.

	* gutf8.c: (Win32) Include <stdio.h> for sprintf.

	* tests/gio-test.c: (Win32) Add tests for polling for Windows
	messages.

	* tests/makefile.mingw.in: Remove superfluous compilation command
	line.

2001-01-23  Alex Larsson  <alexl@redhat.com>

	* gmain.c (g_source_callback_unref): Free the callback
	(g_source_set_callback): Initialize the callback refcount

2001-01-20  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_get_codeset): (Win32) Even if g_get_codeset() is
	currently commented out from gutils.h, fix it to return the same
	CP%d value as g_get_charset().

2001-01-19  Kjartan Maraas  <kmaraas@gnome.org>

	* gconvert.c: Fix typo.
	* gfileutils.c: Same here.
	* configure.in: Added no to ALL_LINGUAS
	
2001-01-17  Tor Lillqvist  <tml@iki.fi>

	* gwin32.c (g_win32_getlocale, g_win32_error_message): Add doc
	comments.
	(g_win32_get_package_installation_directory): Add one parameter,
	the name of a DLL in the package. Add possibility to use that to
	deduce the installation directory if not entered into the
	Registry. Make the return value dynamically allocated.
	(g_win32_get_package_installation_subdirectory): New convenience
	function.

	* gutils.c (GLIB_LOCALE_DIR)
	* gwin32.h: Adapt accordingly.

	* testglib.c (main): Adapt tests accordingly.

Tue Jan 16 23:20:38 2001  Owen Taylor  <otaylor@redhat.com>

	* gutils.c glibintl.h: Optimize for size rather than speed by
	making _() always call _glib_gettext() instead of conditionally
	calling gettext() or _glib_gettext_init. glib only uses translated
	strings in slow error handling code anyways.

	* glibintl.h: g'ify types.

	* Makefile.am: include glibintl.h in _SOURCES

2001-01-17  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Define ENABLE_NLS and GETTEXT_PACKAGE.

	* makefile.mingw.in
	* makefile.msc.in: Use the GNU intl library.

	* gwin32.c (g_win32_get_package_installation_directory): New
	function. To be used by various GLib-using packages to get their
	installation directory, which should be stored in the Registry by
	some installer.

	* gwin32.h: Declare it.

	* testglib.c (main): Test it.

	* gutils.c: On Win32, define GLIB_LOCALE_DIR using
	g_win32_get_package_installation_directory().

	* glib.def: Update.

Mon Jan 15 21:39:06 2001  Owen Taylor  <otaylor@redhat.com>

	* glib-2.0.pc.in (Libs) glib-config-2.0.in: Add @INTLLIBS@.

Mon Jan 15 21:12:49 2001  Owen Taylor  <otaylor@redhat.com>

        * configure.in acconfig.h glibintl.h gutils.c
	po/{Makefile.in.in,POTFILES.in,po2tbl.in}: Add gettext
	support.

	* glib-gettext.m4 acinclude.m4: Clean up the GTK+ gettext macros
	some more and put them in this file, though they also need
	to be included in acinclude.m4 due to the brokeness of
	aclocal.

	* gspawn.c gspawn-win32.c gutf8.c gconvert.c gfileutils.c
	gshell.c: Remove dummy _() #defines, include glibintl.m4.

2001-01-09  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c: Rework the changes needed to pass mainloop-test. Now
	we don't need to call TerminateThread() after all, which is a
	relief, as the docs have a BIG RED WARNING SIGN about using that
	API. Instead, when closing a fd channel that has a reader thread
	running, just mark it as non-running and additionally mark the fd
	as ripe for closing. When the reader thread hopefully eventually
	gets something (and EOF or some actual data), it will note that it
	shouldn't be running, break out of the loop, and close the fd.

	The socket channel closing code should probably be changed
	similarily, but that will have to wait until I have a test case.
	
	(g_pipe_readable_msg, g_io_channel_win32_new_pipe,
	g_io_channel_win32_new_pipe_with_wakeups,
	g_io_channel_win32_pipe_request_wakeups,
	g_io_channel_win32_pipe_readable): Remove these, have been
	obsolete for some time.
	
	* gutils.c (g_basename, g_dirname): Don't warn about deprecation
	on Win32. Code written for GLib 1.2 doesn't have much choice but
	to use GLib >= 1.3 on Win32.

	* glib.def: Update.

2001-01-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Made g_profile_mutex a GMutex* instead of
	G_LOCK_DEFINE_STATIC to avoid deadlock for thread implementations
	without native static mutexes. Contruct g_profile_mutex in
	g_mem_init().

2001-01-06  Tor Lillqvist  <tml@iki.fi>

	* gconvert.c (g_locale_to_utf8, g_locale_from_utf8): Get len using
	strlen() if arg is negative in the Win32 code, too.

	* giowin32.c: Changes necessary to be able to run
	mainloop-test. We can't close the fd that our (internal) reader
	thread is sitting doing a blocking read() from. We must terminate
	the thread first. Keep track of thread handle, and close it when
	thread is dying. Start reader thread with the lower-level
	CreateThread() instead of _beginthreadex() from the C runtime, in
	order to be able to use TerminateThread(). Hopefuly this isn't
	harmful.

	* glib.def: Update.

	* tests/makefile.{mingw,msc}.in (TESTS): Add mainloop-test and
	unicode-encoding.

	* tests/mainloop-test.c: Portability: <unistd.h>, need <fcntl.h>
	on Win32.

	* tests/unicode-encoding.c (process): Add missing "line" argument
	to fail(). On Win32, convert UTF-16LE, as libiconv'c ivonf always
	converts to UTF-16BE if we ask for unspecific UTF-16.
	(main) Handle also '\r'.

Fri Jan  5 11:25:42 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in (PACKAGE): move $enable_debug down below
	checks for GCC to avoid setting CFLAGS prematurely,
	change checks to avoid adding -g twice.

	* gutf8.c (g_ucs4_to_utf8): Support len < 0 to mean
	0 termination.

	* gutf8.c (g_utf8_to_ucs4): Terminate result with 0.

	* tests/mainloop-test.c (main): Fix uses of 
	g_main_loop_destroy().

	* tests/unicode-encoding.c tests/Makefile.am tests/utf8.txt:
	Tests for unicode-conversion code.

	* gconvert.c (g_convert, g_convert_with_fallback): work around
	a couple of GNU libc bugs.

	* gconvert.[ch] (g_{locale,filename}_{to,from}_utf8): Standardize
	arguments to match g_convert(). Document.

	* gunicode.[ch]: 
	  - Implement conversion functions to and from UTF-16
	  - Standardize unicode conversion functions on prototype like
	    g_convert.
	  - Add a lot of error checking to unicode conversion functions.

	* gunicode.[ch] (g_utf8_to_ucs4_fast): Add fast, non-checking
	variant of g_utf8_to_ucs4.

	* gutf8.c (g_utf8_validate): 
	 - add g_return_if_fail (str != NULL).
	 - add checks for overlong strings, non-valid Unicode characters (>= 110000)
	   and single surrogates.

2001-01-05  Tor Lillqvist  <tml@iki.fi>

	* testglib.c (main): Add test for g_path_skip_root().

	* gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
	forward slashes in the template.

	* gutils.c (g_path_skip_root): On Win32, skip the \\server\share
	part of UNC paths. On all platforms, skip several initial
	slashes. Add a few comments.
	(g_get_any_init): On Win32, in case HOME is Unix-style with
	(forward) slashes (some other applications apparently set it up
	this way, convert to backslashed form.

	* configure.in (glib_os): Remove stray 'v'. Add case for mingw,
	although using configure for mingw surely doesn't work yet.

	* glib.def: Update.

2001-01-02  Havoc Pennington  <hp@redhat.com>

	* configure.in: remove glib-config-2.0

	* Makefile.am: remove glib-config-2.0

2001-01-03  Havoc Pennington  <hp@pobox.com>

	* tests/Makefile.am (INCLUDES): -I$(top_srcdir)/gmodule, 
	fix from Michael Meeks

	* Makefile.am (INCLUDES): DISABLE was spelled wrong

Wed Jan  3 14:10:49 2001  Owen Taylor  <otaylor@redhat.com>

	* gmain.[ch]: Switch GMainLoop to be ref/unref, use to
	make dropping reference to running loop safe.

Wed Dec 13 20:41:49 2000  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_source_unref_internal): Unref callback->cb_data
	if it was still set when the source is freed. (Usually, this
	will be done by g_source_destroy.)

2001-01-02  Dan Winship  <danw@helixcode.com>

	* garray.h (g_array_append_val, g_array_prepend_val,
	g_array_insert_val): Use parentheses around an argument to make
	these cause an error if you pass a non-lvalue for the value,
	rather than silently doing the wrong thing.

2000-12-29  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Add GLIB_SIZEOF_VOID_P and GLIB_SIZEOF_LONG.

	* glib.def: Update.

	* {.,*}/makefile.{mingw,msc}.in: Add -DG_ENABLE_DEBUG.
	
Fri Dec 29 14:53:18 2000  Tim Janik  <timj@gtk.org>

	* configure.in: we can't grow _cv_ variables by using a backticked
	expr that refers back to the variable (glib_cv_sizeof_system_thread for
	G_THREAD_USE_PID_SURROGATE), that'd keep the variable growing every time
	it's evaluated. quantum states, anyone?)

Thu Dec 28 10:21:46 2000  Tim Janik  <timj@gtk.org>

	* gmem.[hc]: got rid of outdated dmalloc support. provide g_try_malloc()
	and g_try_realloc() which _may_ fail and return NULL.
	nuked g_mem_check(), provided GMemVTable for memory function
	virtualization, alterable at program startup with g_mem_set_vtable().
	provided glib_mem_profiler_table and g_mem_profile() to support limited
	profiling information out of the box (uses mprotect() for free()ed areas
	on linux).
	provide globally visible G_MEM_ALIGN.
	buncha cleanups.

	* docs/macros.txt: file to get a clue about the various configuration
	macros.

	* docs/debugging.txt: explain debugging traps.

	* configure.in: got rid of --enable-mem-check and --enable-mem-profile,
	define GLIB_SIZEOF_VOID_P and GLIB_SIZEOF_LONG. check malloc prototypes
	and define SANE_MALLOC_PROTOS is we can use them.
	<boy, is this file a mess>

	* gutils.c, gscanner.c: fix up compatibility warnings, use g_message().

2000-12-27  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update.

2000-12-25  Tor Lillqvist  <tml@iki.fi>

	* gmessages.c: (Win32) Use a MessageBox for fatal
	messages. Collect eror message into a buffer, and display that.

	* glib.def: Update.

	* glibconfig.h.win32.in: Update. Remove unused wchar and wctype
	macros, add G_MODULE_SUFFIX.

2000-12-24  Ali Abdin  <aliabdin@aucegypt.edu>

	* Makefile.am, gcompat.h, glib.h: New gcompat.h header file
 	  as recommended by Havoc.

	* gdate.c, gdate.h, testgdate.c,
	  docs/reference/glib/glib-sections.txt,
	  docs/reference/glib/tmpl/date.sgml, tests/date-test.c: Rename some
	  of the gdate functions to use the '_get' in their name. Patch
	  reviewed by Havoc.
		
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...)

2000-12-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c: Updated G_RAND_DOUBLE_TRANSFORM to be more
	accurate. Redid g_rand_double() such that it returns 52 bits after
	the point instead of 32 as before. That OTOH requires calling
	g_rand_int() twice. Overhauled g_rand_int_range(), which is easier
	now thanks to the new precision of g_rand_double(). Thanks to
	Sverre Johansen <sj@ifi.uio.no> for the hint.

	* grand.h: Added g_rand_boolean() and g_random_boolean()
	macros. While they could be omitted due to extreme simplicity,
	they make intention clearer in code and are therefore good to have.

	* grand.c, grand.h: Renamed all 'min' and 'max' parameters to'
	begin' and 'end' resp. to avoid making people think, that 'max' is
	included in the interval. 'end' now isn't, whereas 'begin'
	is. That's similar to the use in the STL.

	* gslist.c, glist.c: Ok, I'm a moron. When I originally
	implemented ENABLE_GC_FRIENDLY, I forgot to include config.h into
	the affected files. Now that Alex did that for those two,
	inevitable typos surfaced, which are now fixed.
	
	* garray.c, ghash.c, gqueue.c, gtree.c: Include config.h as well,
	as ENABLE_GC_FRIENDLY should be known.

2000-12-19  Alexander Larsson  <alexl@redhat.com>

	* configure.in:
	Added --disable-mem-pools option.

	* glist.c:
	* gslist.c:
	* gnode.c:
	* gmem.c:
	Disable free list and memory chunks if DISABLE_MEM_POOLS is defined.

2000-12-17  Tor Lillqvist  <tml@iki.fi>

	* gutf8.c (g_utf8_get_charset_internal): (Win32) Use GetACP to get
	the current ANSI codepage.

	* gunicode.h: Add comment that the static string g_get_charset
	sets the parameter to point to should be copied in case the
	charset might be changed later in the program.

2000-12-14  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: No need to -DGSPAWN_HELPER when
	compiling gspawn-win32-helper any longer.

	* giowin32.c (g_io_win32_dispatch): Warn if no callback. Call
	callback correctly.
	(g_io_win32_create_watch): Fix typo.
	(g_io_win32_fd_create_watch): Ditto.
	(g_io_channel_unix_new): If it is a file descriptor (i.e., a Unix
	fd lookalike provided by the C library), call
	g_io_channel_win32_new_fd(). If it is a socket (from WinSock),
	call g_io_cahnnel_win32_new_stream_socket(). Hopefully sockets and
	fds don't overlap. TODO: Implement also datagram sockets.
	(g_io_channel_win32_poll): Call g_main_context_get_poll_func().

	* gcompletion.h: Include <unistd.h> only on Unix. Is this
	inclusion really needed here? OTOH, do include <stddef.h>, for
	size_t.

	* gmessages.c: (Win32) Don't define a function called "write" that
	might clash with the prototype from <io.h>, use a #define.

	* glib.def: Update.

	* gmain.c (g_source_add_poll): Don't return a value from void
	function.
	(g_main_context_get_poll_func): Compile also for non-Win32, as
	presumably was intended. The result var is a GPollFunc, not a
	GPollFunc*. Return the result!

2000-12-13  Havoc Pennington  <hp@redhat.com>

	* gconvert.c (open_converter): make static

	* gutf8.c (g_utf8_validate): Simplify logic a bit, maybe 
	speeding it up - now we just return FALSE if we had to bail out
	for any reason before getting to the end of the string, as defined 
	by a nul byte if len was -1, defined by the len otherwise. This 
	also fixes a bug where nul bytes were not treated as invalid 
	when the length was specified.

2000-12-12  Havoc Pennington  <hp@pobox.com>

	* gmain.c (g_main_context_destroy): don't try to use thread stuff
	unless G_THREADS_ENABLED
	(g_main_context_query): ditto
	(g_main_context_check): ditto
	(g_main_loop_quit): ditto

Tue Dec 12 18:58:22 2000  Tim Janik  <timj@gtk.org>

	* ghash.c (g_hash_table_remove): return whether a value
	got removed.

Tue Dec 12 15:18:10 2000  Owen Taylor  <otaylor@redhat.com>

	* gmain.[ch]: Revert unauthorized changes.

2000-12-12  Elliot Lee  <sopwith@redhat.com>

	* gmain.c, gmain.h (g_main_context_new, g_main_context_destroy):
	GMainContext useful in implementing some additional styles of
	main loop usage.  To do this, however, Joe Hacker needs to be able
	to create/destroy GMainContext's at will. This is just an export
	of existing functionality, rather than any new functionality.

	They are listed in the "Low level functions for implementing custom
	main loops" section of the header file, to avoid confusing people.

Sun Dec 10 10:47:11 2000  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_source_destroy_internal): Remove pollfds
	from the context here, not when actually freeing the
	source.

	* gmain.c (g_source_unref_internal): Free source list
	and source, call source->source_funcs->destroy().

	* giochannel.c: Unreference io_channel properly.

Thu Dec  7 15:22:30 2000  Owen Taylor  <otaylor@redhat.com>

	* tests/mainloop-test.c (recurser_start): Add a bunch
	of unrefs.

	* gmain.c (g_source_attach): Reference the source
	when adding (pointed out by Elliot)

2000-12-08  Raja R Harinath  <harinath@cs.umn.edu>

	* acglib.m4 (GLIB_AC_DIVERT_BEFORE_HELP): 
	Rename from GLIB_DIVERT_BEFORE_HELP.  
	Update to track autoconf 2.49b.
	* configure.in: Reflect above change.
	(AC_EGREP_HEADER): Rename from really obselete AC_HEADER_EGREP.
	(debug_default): Replace "if test `expr ...`" with "case". 

	* tests/Makefile.am (TESTS): Rearrange into other variables, and
	include run-markup-tests.sh.
	(TESTS_ENVIRONMENT): New.  Pass $srcdir to tests.
	(noinst_PROGRAMS): Rename to ...
	(check_PROGRAMS): ... this.  'automake' ensures that these are
	built before running the tests.
	* tests/run-markup-tests.sh: Support $srcdir != $builddir.

2000-12-08  Havoc Pennington  <hp@pobox.com>

	* tests/Makefile.am (TESTS): move markup-test to noinst_PROGRAMS;
	it isn't a proper test, the proper test would be 
	run-markup-tests.sh, but that can't go in tests, so we need 
	a manual make check rule. Didn't do that yet.

2000-12-07  Raja R Harinath  <harinath@cs.umn.edu>

	* gmain.h: Don't put anything after an #endif.
	* gmain.c: Likewise.

2000-12-06  Havoc Pennington  <hp@pobox.com>

	* tests/strfunc-test.c (main): add g_strdupv test

	* gstrfuncs.c (g_strdupv): Add a function to copy 
	an array of strings

Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com>

        * gmain.[hc]: Major change in API for creating sources
	to handle multiple main loops (GMainContext *). 

	GSources are now exposed as GSource * and implemented
	with structure derivation.

	* giochannel.[ch]: Changed vtable for GIOChannel to correspond
	to the new mainloop API, add g_io_channel_create_watch().
	 
	* gtypes.h: Move GTimeVal here.

	* gthread.h: Remove gmain.h include to avoid circularity.
	
        * giounix.c: Update for new GMain API.
	 
	* giowin32.c: Update for new GMain API. (No check for
	proper compilation or working.)

	* timeloop.c timeloop-basic.c: A benchmarking program for
	the main loop comparing the main loop against a 
	hand-written (timeloop-basic.c) variant. 

	* tests/mainloop-test.c: New torture test of mainloop.
	
	* docs/Changes-2.0.txt: Started. Added text about
	changes to GMain.

	* gmain.c (g_main_add_poll_unlocked): Initial fd->revents
	to zero. (#8482, Benjamin Kahn)

2000-12-01  Tor Lillqvist  <tml@iki.fi>

	* {.,*}/makefile.msc.in: Include make.msc from GLib's build subdir.

	* makefile.{mingw,msc}.in (glib_OBJECTS): Add gunibreak.

	* glib.def: Update correspondingly.

2000-11-21  Havoc Pennington  <hp@pobox.com>

	* gmacros.h: Provide G_CONST_RETURN which is 'const' by default,
	and nothing when G_DISABLE_CONST_RETURNS is defined.

2000-11-29  Havoc Pennington  <hp@redhat.com>

	* gunidecomp.c (COMBINING_CLASS): 
	s/UNICODE_LAST_CHAR/G_UNICODE_LAST_CHAR/

	* gunichartables.h: Update for data in Unicode 3.0.1

	* gunidecomp.h: Ditto
	
	* gunicode.h (GUnicodeBreakType): Enum for line break properties
	(g_unichar_break_type): Get the break property for a char
	
	* gunibreak.h: Autogenerated line break property tables

	* gunibreak.c (g_unichar_break_type): added 
	
	* Makefile.am (EXTRA_DIST): dist gen-unicode-tables.pl

	* Makefile.am (libglib_1_3_la_SOURCES): Add gunibreak.h, gunibreak.c
	
	* gen-unicode-tables.pl: Include the script to update the unicode
	char tables

2000-11-28  Elliot Lee  <sopwith@redhat.com>

	* gmarkup.c: Fix warnings.

	* guniprop.c, gunidecomp.c: Make warnings go away by using
	GPOINTER_TO_INT() instead of (int).

	* gcompletion.[ch]: Add g_completion_set_compare(),
	to allow (for example) using case-insensitive completion.

2000-11-28  Tor Lillqvist  <tml@iki.fi>

	Patches by Hans Breuer:
	
	* gspawn-win32.c: Move the code for gspawn-win32-helper to its own
	file.

	* makefile.{mingw,msc}.in: Change accordingly.

	* gspawn-win32-helper.c: New file.

	* Makefile.am (EXTRA_DIST): Add it.

	* gmarkup.c (find_current_text_end): Fix assertion not to check an
	uninitialised variable.

2000-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c: Set the thread data before locking the mutex, because
	the locking call might use g_thread_self ().

	* gthread.h: Do only show the location of the locking/unlocking
	for -DG_ERRORCHECK_MUTEXES and not the name of the mutex. Add the
	errorcheck capability for g_cond_wait and g_cond_timed_wait as
	well.	

2000-11-27  Havoc Pennington  <hp@redhat.com>

	* gthread.h: Add void in empty function arg list

2000-11-22  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: Add gqsort.

	* glib.def: Update.

2000-11-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Add a surrogate for thread priorities using PID
	niceness for systems with no thread priorities and different PIDs
	for threads of the same process (most notably: Linux). Define
	G_THREAD_USE_PID_SURROGATE in that case, as used by
	gthread-posix.c. Also make the system thread bigger by
	sizeof (long) to contain the thread's PID.

	* gfileutils.c: Include stdlib.h for mkstemp prototype.

	* gthread.c: Add priority range checks to the affected functions.

	* gthreadpool.c: Remove unused variable.

Mon Nov 20 18:55:17 2000  Jonathan Blandford  <jrb@redhat.com>

	* gtree.[hc]: Patch from David Benson <daveb@idealab.com> to add
	user_data support to gtree functions.

Mon Nov 13 18:35:52 2000  Jonathan Blandford  <jrb@redhat.com>

	* gtypes.h (GCompareFuncData): new func type to let you use user
	data when comparing nodes.

	* gslist.c (g_list_sort_with_data): new function to sort with
	user_data. 

	* glist.c (g_list_sort_with_data): new function to sort with
	user_data. 

	* garray.[ch]: Added convenience functions to sort arrays.

2000-11-16  Havoc Pennington  <hp@redhat.com>

	* guniprop.c (g_unichar_isspace): Use a switch here, maybe helps 
	the compiler optimize things. Also, ' ' is a SPACE_SEPARATOR,
	so don't special case it.

2000-11-17  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add g_trash_stack entry points.

Fri Nov 17 15:43:00 2000  Owen Taylor  <otaylor@redhat.com>

        * Released 1.3.2
	
	* NEWS: Update.

	* tests/Makefile.am (dist-hook): Add code to distribute
	markup test files.

2000-11-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Check for the sched.h header and include it on
	gthread/gthread-posix.c if available.

	* configure.in: Add -D_POSIX4_DRAFT_SOURCE to
	GTHREAD_COMPILE_IMPL_DEFINES. Also add -D_POSIX4A_DRAFT10_SOURCE
	to G_THREAD_CFLAGS. Really deploy GTHREAD_COMPILE_IMPL_DEFINES,
	when searching for thread libs. Look for sched_* functions in
	-lrte as well. All of that is necessary on DG/UX.

	* configure.in: Use AC_TRY_COMPILE instead of AC_EGREP_HEADERS in
	various places to make it work more reliable, to make it accept
	macros instead of functions etc.

	* configure.in: Replace some NULL's for checks with 0 to make it
	work without stdio.h everywhere.

	* configure.in, gutils.c: changed the test for getpwuid_r to first
	test for a posix version and then for a non-posix version. No code
	change in gutils.c. Again this change deals better with getpwuid_r
	being a macro and not a function. Most of the above with kind help
	from Tethys <tet@isengard.europe.dg.com>. This fixes Bug #13403.
	
2000-11-14  Tor Lillqvist  <tml@iki.fi>

	* gwin32.h: Make #endif comment match #ifdef.

Mon Nov 13 14:00:20 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Up version to 1.3.2

	* gconvert.h (enum GConvertError): Remove trailing ,

	* gfileutils.c (g_file_open_tmp): Fix comment to 
	properly describe return value.

2000-11-13  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Add USE_LIBICONV.

	* gconvert.c: Check G_OS_WIN32 only after including glib.h. 

	* glib.def: Update.

2000-11-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c (g_static_rec_mutex_*): Made recursive mutexes also
	work when the thread system is not (yet) initialized.

Sun Nov 12 18:34:32 2000  Owen Taylor  <otaylor@redhat.com>

	* gconvert.[ch]: Create wrapper functions for iconv()
	so that we can transparently use the native iconv, 
	libiconv, or (in the future) a mini-iconv included
	with glib.

	* glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@

	* INSTALL: Added note about libiconv.

	* configure.in: Add checks for libiconv from pango. If
	EILSEQ is not defined in errno.h add define for it into
	glibconfig.h so g_iconv can use it. (Note, recompiling
	from a system without EILSEQ to a system with EILSEQ
	will break binary compatibility)

2000-11-12  Robert Brady  <robert@suse.co.uk>

	* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8

	* gconvert.c, gconvert.h: Add g_filename_{to,from}_utf8 and
	g_locale_{to.from}_utf8.  The locale_ variant honours 
	nl_langinfo(CODESET), the filename_ variant uses UTF-8 unless
	asked otherwise.

	(g_convert): Add G_CONVERT_ERROR_PARTIAL_INPUT error, if bytesread
	!= length and no bytesread pointer passed.

Sun Nov 12 15:29:53 2000  Owen Taylor  <otaylor@redhat.com>

	* gfileutils.[ch]: template is a reserved word in
	C++ s/template/tmpl/. 

2000-11-11  Havoc Pennington  <hp@pobox.com>

	* gmarkup.c (g_markup_parse_context_parse): Handle a long stream
	of bytes containing no UTF-8 character starts

2000-11-11  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add missing entry points.

	* gfileutils.c (g_mkstemp): Improve chance to generate unique
	names with less effort a bit.

	* gfileutils.h: Add g_file_open_tmp() declaration.

	* testglib.c: Include <io.h> on Win32.

	* makefile.mingw.in: Correct the way to invoke sub-makes.

Sun Nov  5 13:20:54 2000  Owen Taylor  <otaylor@redhat.com>

	* glib-object.h: Add gtypemodule.h

2000-11-11  Tor Lillqvist  <tml@iki.fi>

	* gfileutils.c (g_file_open_tmp): New function, suggested by Havoc
	earlier this month.
	(g_mkstemp): Use only one case for letters in temp file name, as
	this will be used on systems with case-insensitive file systems.

	* testglib.c (main): Test g_mkstemp() and g_file_open_tmp().

2000-11-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c: Don't take other threads with other priorities
	into account as changing the priority is highly
	unportable. (Actually using it at all already is unportable, but
	even sometimes where that works, changing priority is not
	possible).

2000-11-05  Havoc Pennington  <hp@pobox.com>

	* gmarkup.h: rename G_MARKUP_FOO to
	G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG

	* gmarkup.c: don't start doc comments with "Returns"
	
2000-11-05  Havoc Pennington  <hp@pobox.com>

	* gmarkup.c: inline docs
	(unescape_text): properly check strtoul for failure.
	
	* gerror.c (g_propagate_error): Free the src error if the dest
	location is NULL - I'm pretty sure that's what this function was 
	supposed to do.

2000-11-05  Havoc Pennington  <hp@pobox.com>

	* gutils.c (g_find_program_in_path): cleanup docs, sync param 
	names to those in the header

	* gfileutils.c (g_mkstemp): clean up docs

	* gshell.h: sync param names with param names in .c file

	* gfileutils.h (enum GFileTest): remove trailing comma from last
	member, confuses gtk-doc

	* gmarkup.h: s/GMarkupErrorType/GMarkupError/g; to follow
	convention

2000-11-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gasyncqueue.c: Added documentation for asyncronous queues.

	* gspawn.c: Include sys/select.h (some platforms need it for
	select). 

	* gspawn.c: Changed unportable __FUNCTION__ to the verbatim
	function name.

2000-10-31  Tor Lillqvist  <tml@iki.fi>

	* gutils.c
	* gutils.h
	* gfileutils.c
	* gfileutils.h: Actually, g_mkstemp() is better suited in gfileutils.

2000-10-30  Tor Lillqvist  <tml@iki.fi>

	* configure.in: Check for mkstemp.

	* gutils.c (g_mkstemp): New function. If HAVE_MKSTEMP, just call
	it, otherwise use code lifted from glibc.

	* gutils.h: Declare it.

	* glib.def: Here, too. Plus two missing functions.

2000-10-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gcache.h, gcache.c, ghash.h, ghash.c, grel.c, grel.h, gtypes.h:
	Introduced new function type GEqualFunc to return TRUE for equal
	params. This is now used instead of GCompareFunc (which should
	work akin to strcmp) here. This kind of fixes Bug #14412. Note
	that technically GCompareFunc and GEqualFunc are still the same
	types, as gint == gboolean.

	* ghash.h, gutils.c: g_int_equal and g_direct_equal now return
	gboolean to be really become GEqualFunc.

	* gscanner.c, testglib.c, tests/hash-test.c: Some tiny changes to
	follow the above change.

2000-10-27  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in (glib_OBJECTS): Add gmarkup.

	* glib.def: Add missing functions.

	* tests/makefile.{mingw,msc}.in (TESTS): Add markup-test.

2000-10-24  Havoc Pennington  <hp@pobox.com>

	* gmarkup.h, gmarkup.c: New module to parse a simple
	markup language
	
	* Makefile.am: add gmarkup.h, gmarkup.c

	* tests/Makefile.am: add markup-test

	* gstring.h (g_string_new_len): new function to create a string
	with a length
	(g_string_new): avoid a gratuitous realloc

2000-10-26  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: Cosmetics.

2000-10-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gstrfuncs.c (g_strsplit): When the string is ended by a
	delimiter, return an extra empty string just like for a delimiter
	at the start of the string. This makes the function behave more
	consistent and also fixes Bug #15026.

Tue Oct 24 22:09:14 2000  Tim Janik  <timj@gtk.org>

	* glib-object.h: added newly added gobject/ headers.

	* gmesage.c: print g_message() output to stderr instead of stdout.

2000-10-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Use one = instead of two, which is plainly wrong.

2000-10-19  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in: Pass -DGSPAWN_HELPER when building it. Link
	with user32.lib.

	* gspawn-win32.c
	* gfileutils.c: Make them compile with picky MSVC.

	* gwin32.h: New file. Move Win32-only stuff that isn't related to
	GIOChannels here from giochannel.h.

	* Makefile.am: Add it here.

	* giochannel.h: Move stuff to gwin32.h.

	* glib.h: On Win32, include gwin32.h.

Mon Sep 11 10:03:24 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h convert.c (g_convert_with_fallback): Change
	ERROR_OTHER to ERROR_FAILED, add some dummy marking with _().

	* docs/reference/glib/glib-sections.txt
	docs/reference/glib/glib-docs.sgml Update for g_convert,
	g_unicode_validate.

2000-10-16  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Remove alloca stuff from here. galloca.h
	takes care of it, correctly.

	* giowin32.c (reader_thread): Some more debugging output.
	(g_io_channel_win32_poll): Remove unused vars.

	* gfileutils.c: Changes for Win32, with no unistd.h and no
	S_ISLNK().

	* gspawn-win32.c: Implementation of the g_spwan_* functions for
	Win32. Due to the general non-Unixness of Win32, much of the
	functionality that is relatively clean to implement on Unix, is
	hard to do on Win32. We must use a separate helper program to
	change directory, close extra file descriptors, redirect the std
	ones, as needed, and only then start the child process. No child
	process pid can be returned, unfortunately. Or if we used
	CreateProcess directly, it probably could. (Now we use the spawnv*
	functions from msvcrt.)

	* Makefile.am (EXTRA_DIST): Add gspawn-win32.c

	* glib.def: Add new entry points.

	* glib.def
	* giowin32.c: Remove g_io_channel_win32_wait_for_condition(),
	g_io_channel_win32_poll() subsumes it.

	* gbacktrace.h: G_BREAKPOINT for MSVC (on the ix86).

	* gwin32.c (g_win32_getlocale): Use "sp" for
	LANG_CROATIAN+SUBLANG_SERBIAN_LATIN.

	* makefile.{mingw,msc}.in (glib_OBJECTS): Add new files.
	Add gspawn-win32-helper.exe rule.

	* tests/makefile.{mingw,msc}.in (TESTS): Add shell-test and
	spawn-test.

	* tests/spawn-test.c: (run_tests): On Win32, don't try to run
	/bin/sh, but ipconfig (no special significance in choosing that,
	just a program that outputs something to stdout).

2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>

	Remove need for acconfig.h, and misc. cleanups.
	* acglib.m4 (GLIB_SIZEOF): Add 'autoheader' comment to
	AC_DEFINE_UNQUOTED.
	(GLIB_BYTE_CONTENTS): Likewise.

	* configure.in: Add 'autoheader' comments to all AC_DEFINE(...)
	and AC_DEFINE_UNQUOTED(...) lines.
	Replace AC_MSG_CHECKING/AC_CACHE_VAL with AC_CACHE_CHECK.
	(AM_PROG_LIBTOOL): Move after AC_PROG_CC.
	
	* acconfig.h: Empty out.

	* Makefile.am (BUILT_EXTRA_DIST): New variable.  List 'dist'able
	files that are created in the builddir.
	(dist-hook): Handle those files.
	(libglib_1_3_la_SOURCES): Remove @ALLOCA@.  @ALLOCA@ should only
	be used in an _LDADD or _LIBADD, since it expands (if necessary)
	to 'alloca.o'.

	* tests/Makefile.am (BUILT_EXTRA_DIST): New variable.
	(dist-hook): Handle $(BUILT_EXTRA_DIST).
	
2000-10-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c: Added inline documentation. 

	* gtypes.h, gnode.h, gutils.h: Readded GFreeFunc,
	g_node_insert_after and g_find_program_in_path resp., which
	mysteriously disappeared during the glib.h dissection.

2000-10-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glibconfig.h.win32.in: Adapted accordingly to header separation
	and GLIB_HAVE_ALLOCA_H renaming.

	* Makefile.am: Added the new headers to glibinclude_HEADERS.

	* glib.h: Forgot to include gerror.h.

	* glib.h, galloca.h, garray.h, gasyncqueue.h, gbacktrace.h,
	gcache.h, gcompletion.h, gconvert.h, gdataset.h, gdate.h, ghash.h,
	ghook.h, giochannel.h, glist.h , gmacros.h, gmain.h, gmem.h,
	gmessages.h, gnode.h, gprimes.h, gquark.h, gqueue.h, grand.h,
	grel.h, gscanner.h, gslist.h, gstrfuncs.h, gstring.h, gthread.h,
	gthreadpool.h, gtimer.h, gtree.h, gtypes.h, gutils.h: Split glib.h
	into many header files mostly according to the resp. *.c-files.
	
	* gmacros.h: Added G_BEGIN_DECLS and G_END_DECLS to mean: 'in case
	of C++: extern "C" { ... }' analogous to glibc __BEGIN_DECLS and
	__END_DECLS.

	* configure.in, gerror.h, gfileutils.h, gshell.h, gspawn.h,
	gunicode.h, : Changed guard-macro names to something more
	consistent.

	* configure.in, *.h: Use G_BEGIN_DECLS and G_END_DECLS.

	* configure.in: Defined GLIB_HAVE_ALLOCA_H instead of including
	alloca.h in glibconfig.h, GLIB_HAVE_ALLOCA_H is used in glib.h.

	* configure.in: Removed cruft from old threading code.

2000-10-09  Raja R Harinath  <harinath@cs.umn.edu>

	Work with beta autoconf 2.50.
	* configure.in (GLIB_MAJOR_VERSION): Use GLIB_DIVERT_BEFORE_HELP
	instead of AC_DIVERT_PUSH(),AC_DIVERT_POP.
	(AC_CHECK_HEADERS): Remove redundant AC_DEFINE(HAVE_...).
	(REALLOC_0_WORKS): Move AC_DEFINE outside AC_CACHE_VAL.
	(dlopen): Quote nested AC_CHECK_... calls.

	* acglib.m4 (GLIB_TR_SH, GLIB_TR_CPP): Utility macros copied from
	beta autoconf 2.50.
	(GLIB_DIVERT_BEFORE_HELP): New macro that works both with autoconf
	2.13 and beta autoconf 2.50.
	(GLIB_SIZEOF, GLIB_BYTECONTENTS): Use GLIB_TR_*.

	* Makefile.am (CONFIGURE_DEPENDENCIES): Use this to specify
	that 'configure' depends on acglib.m4.

2000-10-09  Havoc Pennington  <hp@redhat.com>

	* Makefile.am, tests/Makefile.am: Add new files.

	* tests/spawn-test.c, tests/shell-test.c: new tests for
	the shell/spawn stuff

	* gutils.c (g_find_program_in_path): convert a relative
	program name into an absolute pathname to an existing 
	executable

	* gspawn.h, gspawn.c: New fork/exec API

	* gshell.h, gshell.c: Shell-related utilities, at the moment
	simply routines to parse argv and quote/unquote strings

	* guniprop.c (g_unichar_isspace): Return TRUE for the 
	ASCII space characters isspace() returns TRUE for.

	* gfileutils.c (g_file_get_contents): Convenience function 
	to slurp entire file into a string and return it. Partially
	written by Joel Becker.
	(g_file_test): file test function

2000-10-06  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in: Revamp to be like makefile.mingw.in, make
	the MSVC build actually work again.

	* gmodule/makefile.msc.in
	* gobject/makefile.msc.in
	* gthread/makefile.msc.in: New files, like their mingw counterparts.

	* gmodule/Makefile.am
	* gobject/Makefile.am
	* gthread/Makefile.am: Make and distribute them.

	* */makefile.mingw.in: Allow override of GLib version number from
	the build/win32/module.defs file.

	* glib.def: Add new entry point.

	* tests/gio-test.c (main): Fix the Win32-only code to use current
	API, g_io_channel_win32_make_pollfd() and g_io_channel_win32_poll().

	Fixes from Hans Breuer:

	* glib.h (struct DIR): Keep the last readdir result cached inside
	the DIR struct, to enable several DIRs being open simultaneously.

	* gwin32.c (g_win32_readdir): Use the above instead of static.

	* giowin32.c (g_io_channel_win32_make_pollfd): Insert cast to keep
	MSVC happy.

2000-10-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h: Changed alloca stuff a bit: when we have a working
	alloca.h, we're not messing with alloca any further. Should fix a
	bug reported by Bernd Demian <wega@csc-dd.de>.

2000-09-29  Jonathan Blandford  <jrb@redhat.com>

	* gnode.c (g_node_insert_after): Added function to keep symmetry
	with g_node_insert_before. 

2000-09-29  Martin Baulig  <baulig@suse.de>

	Several minor ANSI C fixes.

	Added missing casts:
	* gdate.c (g_date_fill_parse_tokens): `s = (guchar *) str'.
	* gmain.c (g_idle_dispatch): `func = (GSourceFunc) source_data'.
	(g_idle_add_full): `(gpointer) function' in call to g_source_add().
	* gstrfuncs.c (g_strdown): `s = (guchar *) string' and
	`return (gchar *) string'.
	(g_strup): Likewise.
	(g_strchug): `start = (guchar*) string' in 1st for() argument;
	`strlen ((gchar *) start)' in call to g_memmove().
	* gstring.c (g_string_down): `s = (guchar *) string->str'.
	(g_string_up): Likewise.
	* gthreadpool.c (stop_this_thread_marker):
	`(gpointer) &g_thread_pool_new'.
	* gunidecomp.h (decomp_table[]): Cast all the strings to
	`unsigned char *'.

	Put text following #endif into comments:
	* gmain.c: here.

2000-09-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, glib.h: Added errorcheck mutexes. These are
	activated through the preprocessor symbol
	G_ERRORCHECK_MUTEXES. Need to add an extra word to StaticMutex in
	order to achieve this. g_(static_)mutex_* functions instrument the
	mutex operations with mutex name and location, when compiled with
	-DG_ERRORCHECK_MUTEXES. g_thread_init activates the errorcheck
	mutexes, when compiled with -DG_ERRORCHECK_MUTEXES.

2000-09-28  Havoc Pennington  <hp@pobox.com>

	* glib.h (GThreadPriority): fix indentation
	(GConvertError): generic error is conventionally called
	_FAILED rather than _OTHER, at least at the moment, 
	according to GError docs in docs/reference.

	* gconvert.c: s/_OTHER/_FAILED/

2000-09-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Adjusted the test for an unimplemented
	 getpwuid_r. Info from Michael Pruett. This is just a forward
	 merge from glib-1-2.

	* configure.in: Moved determination of G_THREAD_FLAGS before
	G_THREAD_LIBS. Check for UnixWare systems and set the right cflags
	and libs there (it needs -Kthread for the native compiler and
	-pthread for gcc). Thanks to Boyd Lynn Gerber <gerberb@zenez.com>
	for the info.

	* configure.in: Fail immediately, when no thread library is found,
	instead of continuing searching for rt libs etc. Changed almost
	all occurances of $enable_threads to $have_threads, as that's,
	what we want.

	* tests/threadpool-test.c: Define vars inside the guard to avoid
	warnings.

	* configure.in, tests/type-test.c: Some platforms support 64 bit
	'long long', but you can not printf or scanf them. In that case,
	don't define G_G{UINT|INT}64_FORMAT. Changed the type-test program
	to reflect that.

	* gutils.c (g_get_current_dir): max_len can't be initialized
	statically as it might call a function. So do it at first call.

Tue Sep 26 2000 Elliot Lee <sopwith@redhat.com>

	* glib.h: Add G_GNUC_PURE macro (but don't use it anywhere).

Mon Sep 25 2000 Elliot Lee <sopwith@redhat.com>

	* garray.c, glib.h, gmem.c: Add a few missing G_GNUC_CONST's.

2000-09-21  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in: Add gconvert.o. Use libiconv.

	* config.h.win32.in: Define HAVE_GETCWD.

	* glib.def: Add new entry points.

2000-09-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: The last released automake (1.4) still requires
	AM_PROG_LIBTOOL instead of AC_PROG_LIBTOOL, so use that for the
	time being.

2000-09-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, configure.in, gutils.c: Test for the existence of
	getcwd, and use it only when found.

	* glib.h: Only use the gcc-variable-macro-argument-extension for
	gcc >= 2.4. Both patches from Jonas Oberg <jonas@gnu.org>.

Mon Sep 18 10:58:21 2000  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c: Implement g_ucs4_to_utf8 which was in
	the header file but not implemented.

Sun Sep 17 2000 Elliot Lee <sopwith@redhat.com>

	* glib.h configure.in: Define g_alloca() as an
	alloca-that-works-anywhere.

	* gconvert.c: Fix warnings which could have caused problems on
	64-bit platforms.

Sun Sep 10 12:37:40 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h gconvert.c (g_convert): Havoc Pennington's implementation 
	of convenient character set conversion using iconv, with
	the addition of GError. We probably need a fallback that
	just does conversions between, say UTF-8,16,32 and ISO-8859-1
	for targets without iconv at all.

	Also add g_convert_with_fallback() to take care of conversions 
	where we accept some loss going to the target encoding.

2000-09-10  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_utf8_validate): Add this function.

Sat Sep  9 18:50:42 2000  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c (g_strescape): Add a missing g_return_if_fail().

Mon Aug 21 03:57:46 2000  Tim Janik  <timj@gtk.org>

	* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
	implement BREAKPOINT() as raise (5 /* SIGTRAP */);

	* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
	to turn on compilation of inline function implementations provided
	in header files with extern linkage.
	wrap inline function implementations into ifdef __G_UTILS_C__, so we
	really only compile them for gutils.c and not also into arbitrary user
	code that wants to make use of G_IMPLEMENT_INLINES.
	adjusted comment apropriately.

	* gutils.c: to turn on compilation of inline functions, provide
	#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.

2000-09-06  Havoc Pennington  <hp@redhat.com>

	* gerror.c: docs

	* docs/reference/glib/tmpl/error_reporting.sgml: docs

Wed Sep  6 10:28:34 2000  Owen Taylor  <otaylor@redhat.com>

	* guniprop.c gunicode.h gutf8.c: Some inline docs fixes.

2000-09-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, gtimer.c, tests/thread-test.c:
	s/G_MICROSEC/G_USEC_PER_SEC/

	* glib.h: Removed G_G{U}{SHORT|INT|LONG}_FORMAT from glib.h, as
	they are really superfluous.

Tue Sep  5 20:16:27 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in docs/Makefile.am: Add gtk-doc checks
	for newly added docs/reference/ subdir.

2000-09-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c (g_thread_error_quark): Don't use a G_LOCK, as it
	isn't necessary.

2000-09-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gstring.c (g_string_free): Use g_return_val_if_fail instead of
	g_return_if_fail, as the function now is supposed to return
	something.

	* gerror.c, gerror.h (g_propagte_error): Added function
	g_propagte_error to hand over local errors to the calling
	function.

	* glib.h: Include gerror.h before it is used for some g_thread_*
	functions.

	* gthread.c, gthreadpool.c, glib.h: Enable error reporting for
	thread creation, namely for g_thread_create, g_thread_pool_new,
	g_thread_pool_push and g_thread_pool_set_max_threads.

	* tests/thread-test.c, tests/threadpool-test.c: Adapted
	accordingly.

2000-08-31  Tor Lillqvist  <tml@iki.fi>

	* glib.h
	* glib.def
	* giowin32.c (g_io_channel_win32_make_pollfd): New function, to
	make a GPollFD from a GIOChannel. Creates the events and starts
	the reader thread if necessary.

	* glib.h
	* giowin32.c (g_io_channel_win32_poll): No use for separate
	condition parameter.

	* gmain.c (g_get_current_time): (Win32): Simplify, use
	GetSystemTimeAsFileTime().

2000-08-27  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c (g_io_channel_win32_poll): New function, otherwise
	like g_io_channel_win32_wait_for_condition(), but accept several
	GPollFDs.
	(g_io_channel_win32_wait_for_condition): Call
	g_io_channel_win32_poll().

	* glib.h: Declare g_io_channel_win32_poll().

	* gwin32.c (g_win32_error_message): Don't believe return value
	from FormatMessage.

2000-08-25 Elliot Lee <sopwith@redhat.com>

	* glib.h, gunicode.h, gmodule/gmodule.h:
	Mark the following functions G_GNUC_CONST (to allow optimization)
	because their results are a function of only their parameters: 
	g_int_hash, g_int_equal, g_direct_hash, g_direct_equal,
	g_quark_to_string, g_date_is_leap_year, g_date_days_in_month,
	g_date_monday_weeks_in_year, g_date_sunday_weeks_in_year,
	g_spaced_primes_closest, g_unichar_is*, g_unichar_to*,
	g_unichar_*digit_value, g_unichar_type

2000-08-21 Elliot Lee <sopwith@redhat.com>

	* gobject/Makefile.am, gobject/gobject-query.c,
	gobject/gparamspecs.c: Fix inclusion of config.h

Mon Aug 21 14:46:23 2000  Owen Taylor  <otaylor@redhat.com>

	* tests/gio-test.c: Fix a couple of trivial bugs that
	were causing warnings.

Mon Aug 21 14:39:36 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h: Use C99 varargs macros where possible 
	(check __STDC_VERSION__), otherwise, on gcc, use an alternate 
	form of gcc varargs which is more likely
	to be supported going forward. (Based on some code
	from Raja Harinath)

2000-08-17  Darin Adler  <darin@eazel.com>

	* glib.h:
	* garray.c: (g_array_free), (g_ptr_array_free),
	(g_byte_array_free): Return the data left behind.
	* gstring.c: (g_string_free): Return the data left behind.

	Changed the free calls that leave data behind so they
	return a pointer to the left-behind data, NULL if told not
	to leave anything behind. This makes these calls easier
	to use correctly, without any incompatible API change for
	callers that don't know about the return value. Of course,
	it would be even clearer if the free calls weren't dual-purpose
	in the first place.

2000-08-12  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c: Some indentation and spacing fixes. Add some more
	logging.
	(g_io_win32_add_watch): New function, with common code from
	g_io_win32_fd_add_watch and g_io_win32_sock_add_watch. Don't start
	more than one reader thread for a GIOChannel. We should obviously
	have just one reader thread reading a file descriptor or socket.

2000-08-10  Havoc Pennington  <hp@redhat.com>

	* gthread-2.0.pc.in (Cflags): don't duplicate glib Cflags

	* gmodule-2.0.pc.in (Cflags): don't duplicate glib Cflags

	* gobject-2.0.pc.in (Cflags): don't duplicate Cflags from glib
	itself

2000-08-10  Havoc Pennington  <hp@redhat.com>

	* glib-2.0.pc.in (Cflags): Look in glib-2.0/include for
	glibconfig.h

2000-08-07  Tor Lillqvist  <tml@iki.fi>

	* tests/gio-test.c (shutdown_source): New function, that calls
	g_source_remove(). Check return value of g_source_remove(), and
	decrement running subprocess counter only if g_source_remove()
	actually did remove the source.

	(recv_message): Call shutdown_source() on EOF condition. Return
	FALSE on G_IO_HUP and G_IO_ERR condition. Fix printf format typo.

Sun Aug  6 20:06:02 2000  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_log_domain_check_free): keep *last updated while
	running through the domain list, so we don't screw up the removal,
	patch provided by Gady Kozma <gadykozma@hotmail.com>.

Sun Aug  6 20:03:41 2000  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_log_remove_handler): keep *last updated while running
	through the handler list, so we don't screw up the removal.

Sun Jul 30 16:54:13 2000  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h: Fix stray character

	* gutf8.c (g_unichar_to_utf8): Allow outbuf to be NULL, in
	which case we just compute the length.

2000-07-31  Havoc Pennington  <hp@redhat.com>

	* Makefile.am (EXTRA_DIST): forgot to add .pc.in to EXTRA_DIST

2000-07-31  Havoc Pennington  <hp@redhat.com>

	* glib-2.0.pc.in, gobject-2.0.pc.in, gmodule-2.0.pc.in,
	gobject-2.0.pc.in: pkg-config data files	 

	* Makefile.am: Install/dist the .pc files

	* configure.in: Output the .pc files

2000-07-31  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c (buffer_read): The code didn't compile (must
	have been sleepy when committing). "return" instead of "break"

	(g_io_win32_fd_add_watch): Cannot check if the file descriptor is
	readable by calling ReadFile to read zero bytes. ReadFile blocks
	on NT even if trying to read nothing at all. So, don't check if
	file descriptor is readable; assume this function isn't called
	otherwise.

Sun Jul 30 10:44:16 2000  Tim Janik  <timj@gtk.org>

	* gmain.c (g_get_current_time): fix tor's recent changes which
	got rid of a required variable in the non-windows path.

2000-07-30  Tor Lillqvist  <tml@iki.fi>

	Finally, a new and improved IO Channel and condition watch
	implementation for Win32. Based on code provided by Craig Setera.

	When watching file descriptors, for which there is no select()
	like functionality on Win32 that would work on all Win32 platforms
	for all types of file descriptors (including anonymous pipes), we
	start a new thread that blocks while trying to read from the file
	descriptor. When the read returns, a Win32 Event is signalled that
	the polling routine eventually notices. Meanwhile, the data being
	read is stored in a circular buffer, from where the IO channel's
	read() method picks it up.

	If the buffer fills up the reading thread has to wait for space
	becoming available. For this another Win32 Event is used. The IO
	Channel's read() method signals this when it has read some data
	out of the buffer.

	The separate reader thread(s), and the circular buffer(s) with
	associated events mean lots of possibilities for fun parallelism
	errors. But it seems to work OK, i.e. GIMP runs.

	* gmain.c: Small changes to the Win32 polling function.
	(g_main_win32_get_poll_func): New function. Perhaps it would be a
	good idea to provide this on all platforms.

	* giowin32.c: The bulk of the new implementation.
	(g_io_channel_win32_wait_for_condition): New function. To be used
	where on Unix one does a select() on the channel's fd, like
	libgimp's gimp_extension_process(). Could be provided on all
	platforms.

	* glib.h: Update documentation for IO Channels on Win32. Remove
	the declarations for the as of now obsolete old functions related
	to IO Channels for pipes with "wakeup" messages.

	* glib.def: Some new functions.

	* tests/gio-test.c: New file, to test GIOChannel and main loop.

	* tests/Makefile.am
	* tests/makefile.mingw.in: Add it.

	(Later the same night:)

	* giowin32.c: Compile in the debugging code all the time, but only
	output debug messages if told so. Add (unadvertised) function to
	turn on/off debug messages for a channel.

	(buffer_read): Don't loop. It is expected behaviour to return a
	short read occasionally, for instance when reading from
	pipes. It's the calling code that should loop if it *knows* how
	much the writer has written.

	* tests/gio-test.c: Correct the program's name in the output.
	(recv_message): Loop calling g_io_channel_read() (in a new
	function read_all()) until we have all the bytes we want (that we
	know the writer has written/will write).

Thu Jul 27 05:15:11 2000  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strlcpy, g_strlcat): completed tor's fix
	to cover both #ifdef branches.

2000-07-26  Tor Lillqvist  <tml@iki.fi>

	* gstrfuncs.c (g_strlcpy, g_strlcat): Return 0 on error, not NULL.

	* glib.def: Add g_strlcpy, g_strlcat.

	* glibconfig.h.win32.in: Add gsize and gssize.

Wed Jul 26 12:59:31 2000  Tim Janik  <timj@gtk.org>

	* *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that
	updates the license headers to the GNU Lesser General Public License,
	as well as updating the copyright year to 2000.

Wed Jul 26 05:47:48 2000  Tim Janik  <timj@gtk.org>

	* configure.in:
	* testglib.c:
	* gstrfuncs.c:
	* glib.h: added g_strlcat() and g_strlcpy() wrappers, supplied by
	David Wheeler <dwheeler@ida.org>:

	* glib.h, gstrfuncs.c: added g_strlcpy and g_strlcat to support
	  safe manipulation of fixed-length string buffers.
	  These functions were originally developed by Todd Miller to simplify
	  development of security-related programs, and
	  are available on many (but not all) Unix-like systems,
	  including OpenBSD, FreeBSD, and Solaris.  See
	  ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3
	  and http://www.openbsd.org/security.html.
	  If there's a strlcpy/strlcat on the system, it's called, otherwise
	  an implementation is provided.

	* testglib.c: Added tests for g_strlcpy, g_strlcat.

Wed Jul 26 05:03:24 2000  Tim Janik  <timj@gtk.org>

	* acglib.m4 (GLIB_SIZEOF): include <stdlib.h> and <stddef.h> if
	STDC_HEADERS is defined.

	* glib.h:
	* glibconfig.h: define gsize and gssize in terms of GLIB_SIZEOF_SIZE_T

	* glib.h (g_return_if_reached): applied darin's fix for copy'n
	paste error in the macro implementation.

Wed Jul 26 00:46:03 2000  Tim Janik  <timj@gtk.org>

	* glib.h: applied patch from Darin Adler <darin@eazel.com> which
	supplies g_return_if_reached(), g_return_val_if_reached() and
	g_critical().

2000-07-22  Tor Lillqvist  <tml@iki.fi>

	* build-dll: Fix resource handling, the resource file got left out
	from the DLL after all... Remove the WIN32APIHEADERS, not needed
	with current windres.

	* glib.def: Add new functions.

2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c, glib.h: Mark the functions g_basename and g_dirname
	deprecated. They will issue an warning once, when compiled with
	G_ENABLE_DEBUG, but continue to work as before. Instead the
	functions g_path_get_basename and g_path_get_dirname should be
	used, which BOTH return newly allocated memory, that has to freed
	by g_free. The new g_path_get_basename now strips trailing slashes
	from the path. This fixes #5097. For discussion see
	http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html

	* gwin32.c, testglib.c, tests/dirname-test.c: Use the new
	functions instead of the old ones.

	* ghash.c, gscanner.c, glib.h: Mark the functions
	g_hash_table_freeze, g_hash_table_thaw and thus
	g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
	deprecated. They will issue an warning once, when compiled with
	G_ENABLE_DEBUG. This fixes Bug #3883. For discussion see
	http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html

2000-07-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, glib.h: glibconfig.h and glib.h now include files
	outside of the extern "C" block. Makes some C++ compiler
	happy. Reported by Denis Vakatov <vakatov@peony.nlm.nih.gov>.

Sat Jul 15 23:49:03 2000  Owen Taylor  <otaylor@redhat.com>

	* glib/glib.texi: Remove incomplete start of info file -
	real docs are in RDP.	

Sat Jul 15 22:44:22 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Add build/Makefile and 
	build/win32/Makefile to AC_OUTPUT() so things build
	again.

Sat Jul 15 09:11:46 2000  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strncasecmp): fixed an off by 0 error (yeah,
	the function went off when the while (n--) loop failed due to
	n==0 ;), reported by Jean-Louis HAMEL <jlhamel@club-internet.fr>.

2000-07-15  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (SUBDIRS): Include the "build" module in GLib, too,
	to make it more self-contained. If your CVS client doesn't
	automatically get it, do a cvs get build in glib.

	* */makefile.mingw.in: Include make.mingw from build in the glib
	source directory.

Fri Jul 14 16:26:35 2000  Owen Taylor  <otaylor@redhat.com>

	* Release 1.3.1

Fri Jul 14 12:22:49 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in Makefile.am glib-config.m4 glib.m4: Move
	glib-config to glib-config-2.0 move glib.m4 to
	glib-2.0.m4

	* Makefile.am gobject/Makefile.am gmodule/Makefile.am
	gthread/Makefile.am tests/Makefile.am: Change 
	library names to libglib-1.3.la, etc, so that we
	can distinguish glib-1.2 and glib-2.0 on the linkline.

	* Makefile.am gobject/Makefile.am gmodule/Makefile.am:
	Move include files into /usr/include/glib-2.0.

Thu Jul  6 18:54:49 2000  Owen Taylor  <otaylor@redhat.com>

	* docs/Makefile.am (EXTRA_DIST): Remove info files
	from the build.

2000-07-14  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add g_error functions.

	* makefile.mingw.in: Add gbacktrace.o.

	* gbacktrace.c: No need to include <process.h>.

2000-07-12  Havoc Pennington  <hp@redhat.com>

	* glib.h: #include <gerror.h>

	* Makefile.am (include_HEADERS): Add gerror.h
	(libglib_la_SOURCES): Add gbacktrace.c

	* gbacktrace.c: Move g_on_error_query() in here (moved on the 
	server, so history is preserved)

	* gerror.h: GError interface

	* gerror.c: GError implementation replaces stuff that's now in 
	gbacktrace.c

Sun Jul  9 21:20:45 2000  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h: Include stddef.h instead of stdlib.h

2000-07-08  Tor Lillqvist  <tml@iki.fi>

	* glib.h (GLIB_VAR): Rename the GUTILS_C_VAR macro to GLIB_VAR.

	* gunicode.h: Mark the g_utf8_skip array with GLIB_VAR.

	* glib.def: Add two missing entry points.

Thu Jul  6 15:35:28 2000  Owen Taylor  <otaylor@redhat.com>

	* Release 1.3.1

	* Makefile.am (EXTRA_DIST): Dist fixes.

	* configure.in: Moderate the warnings just a little bit.

2000-07-05  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update.

Mon Jul  3 17:58:02 2000  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c (g_utf8_get_charset_internal): Fix up
	to correspond to configure.in checks.

Mon Jul  3 17:18:19 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h: Comment g_get_codeset() out of the header file
	temporarily. (Very similar to g_get_charset(), need
	to resolve the two.)

2000-07-01  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add new entry points.

	* makefile.{mingw,msc}.in: Add the new Unicode object files.

Thu Jun 29 15:57:28 2000  Owen Taylor  <otaylor@redhat.com>

	* NEWS: updated

	* Makefile.am: added snapcheck target to go along with snapshot

	* gstring.c glib.h (g_string_hash): Add g_string_hash to 
	go along with g_string_equal.

Tue Jun 27 12:40:23 EDT 2000  David A. Wheeler <dwheeler@dwheeler.com>

	* glib.h: Added g_string_equal for comparing GStrings;
	changed g_str_equal so it returns gboolean (instead of gint).

	* gstring.c: Modified GString implementation to support embedded
	ASCII NUL ('\0') characters, and implemented g_string_equal.

	* testglib.c tests/string-test.c: Added tests for g_string_equal
	and tests for proper handling of embedded ASCII NUL characters.

Wed Jun 28 22:52:00 2000  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (libglib_la_SOURCES): Fix
	gunichartable.h => gunichartables.h. (From Eric Limings)

Fri Jun 23 17:20:26 2000  Tim Janik  <timj@gtk.org>

	* glib.h: define gstring in terms of gchar*. this typedef reflects
	the type name of the primitive G_TYPE_STRING in the gobject module.

Wed Jun 21 12:09:03 2000  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h gutf8.c guniprop.c gunidecomp.[ch] gunichartables.h
	Makefile.am glib.h: Initial pass at adding unicode support
	functions. A few things still need to be implemented, a bit
	of cleanup needs to be done, tests need to be added, and 
	the docs need to be finished, but this should allow replacing
	most or all use of libunicode.

2000-06-06  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c (g_io_channel_win32_pipe_readable): If we are
	watching the same pipe for different conditions (with different
	callbacks), check them all. Only call the callback for G_IO_IN
	from here. (This bug popped up when a watch for G_IO_ERR|G_IO_HUP
	was added to gimplib.)

2000-05-30  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_locale_get_codeset): Implement on Win32.

	* glib.def: Add g_get_codeset.

	* tests/Makefile.am (EXTRA_DIST): makefile.cygwin* has been
	renamed to makefile.mingw*.

Tue May 30 16:01:32 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h gutils.c: Move the g_locale_get_codeset() up in the 
	header file to correspond to to comments about memory
	management. Rename to g_get_codeset() to avoid 
	polluting the g_locale_* namespace, which probably
	would have g_locale_get_codeset (GLocale *locale).
	Add a doc comment.

Mon May 29 14:10:35 2000  Owen Taylor  <otaylor@redhat.com>

	* gutils.c (g_locale_get_codeset): Add function to get the 
	codeset name for the current locale.

	* configure.in acconfig.h: Add check for nl_langinfo(CODESET);

Fri May 19 11:39:29 2000  Tim Janik  <timj@gtk.org>

	* gutils.c (g_snprintf):
	(g_vsnprintf): added argument assertments.

	* gstring.c (g_string_assign): added argument assertments.
	(g_string_truncate): make len a guint.

Fri May 19 09:00:44 2000  Tim Janik  <timj@gtk.org>

	* gmem.c (g_free): fixed SIZEOF_LONG==4 assumption with
	ENABLE_MEM_CHECK, from Art Haas <ahaas@neosoft.com>.

	* gslist.c (g_slist_reverse): shut up compiler.

	* gscanner.c (g_scanner_get_token_ll): removed inline assignment.

	* garray.c: remove index>=0 checks for unsigned indices.

	* gmain.c (g_idle_prepare): timeout assignment fix.

	* gtree.c (g_tree_node_rotate_right): shut up compiler.

2000-05-13  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in
	* tests/makefile.mingw.in
	* build-dll: Rename makefile.cygwin(.in) to
	makefile.mingw(.in), which better describes what it is. Move the
	build of gmodule, gthread and gobject DLLs to makefiles in those
	directories. Move resource file handling and build number bump to
	build-dll, where it sits much cleaner.

	* README.win32
	* Makefile.am (EXTRA_DIST): Update accordingly.

	* glib.h: Add G_PI, G_PI_2, G_PI_4, G_E, G_LN2, G_LN10 and
	G_SQRT2. M_PI etc aren't necessarily in <math.h> in strict ISO C
	implementations.

	* glib.def: Add g_strcanon.

	* gtree.c (g_tree_node_rotate_left): Remove unused variables.

	* gwin32.c (g_win32_opendir): Remove unneeded statement.

Thu May  4 02:04:46 2000  Tim Janik  <timj@gtk.org>

	* configure.in (STRIP_DUMMY): some Make 3.79 $(strip ) versions are
	broken and require an empty arg, give it to them.

Fri Apr 28 23:54:35 2000  Tim Janik  <timj@gtk.org>

	* setup things for a new sub-library libgobject:

	* Makefile.am (SUBDIRS): added gobject

	* glib-config.in: feature -lgobject.

	* configure.in (AC_OUTPUT): generate gobject/Makefile.

	* glib.m4 (AM_PATH_GLIB): feature gobject module.

	* glib.spec.in: added %{prefix}/lib/libgobject-1.3.so.*

Fri Apr 28 21:41:49 2000  Tim Janik  <timj@gtk.org>

	* glib.h: added G_STRLOC macro.
	G_STRUCT_OFFSET(): signedness corrections.
	(G_CSET_DIGITS): list 0-9.
	* gscanner.c (g_scanner_config_template): use G_CSET_DIGITS.

	* glib.h: 
	* gstrfuncs.c:
	(g_strdown):
	(g_strup):
	(g_strreverse): return the modified string instead of void, so
	calls to these functions can be nested.
	(g_strcanon): new function, canonicalizes string according to
	a given character set.

Fri Apr 28 19:45:16 2000  Tim Janik  <timj@gtk.org>

	* gasyncqueue.c (g_async_queue_unref): get rid of an unused variable.

Wed May 10 19:52:44 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.m4: Print found version when test succeeds.

2000-05-04  Tor Lillqvist  <tml@iki.fi>

	* makefile.cygwin.in
	* tests/makefile.cygwin.in: Include the common makefile snippet
	from ../build/win32.

	Maybe CVSROOT/modules should be changed so that the 'build' module
	is included within the glib module (and gtk+, and gimp, and maybe
	others later), in the same way as the 'macros' module is included
	in lots of GNOME CVS modules?

2000-05-02  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add new functions.

	* makefile.{cygwin,msc}.in (glib_OBJECTS): Add new object files.

	* tests/makefile.{cygwin,msc}.in: Add threadpool-test.

2000-04-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gasyncqueue.c: New File implementing an asynchronous queue to be
	used for asynchronous inter-thread communication.

	* gthreadpool.c: New File implementing a thread pool to be used
	for distributing work among several threads. 

	* glib.h: Added the type and function declarations for these two
	types.

	* tests/threadpool-test.c: New File implementing a test for the
	thread pool. This also checks the asynchronous queue underlying
	the thread pool.

	* tests/Makefile.am: Changed accordingly.

2000-04-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Look for both pthread_create and pthread_join in
	the thread library. Some systems define one of them, but not both
	in libc. Arghh. Now we really start a thread and join it later and
	check, whether the thread to actually ran.

	* glib.h, gcache.c, gtree.c: Changed the 'value' parameter of
	g_cache_remove from gpointer to gconstpointer. Dito for the 'key'
	parameter of g_tree_lookup and g_tree_remove and the 'data'
	parameter of g_tree_search. This function now takes a function of
	type GCompareFunc instead of GSearchFunc. This fixes Bug
	#8267. Thanks to Juan Toledo <toledo@users.sourceforge.net> for
	pointing that out.

	* glib.h: Removed declaration of GSearchFunc.

	* gmem.c: s/GSearchFunc/GCompareFunc/.

2000-04-19  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Update entry point list.

2000-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h (G_TRYLOCK): Made the debugging G_TRYLOCK call also work
	for compilers with funny G_STMT_(START|END) macros.

	* tests/thread-test.c: Implemented a check for that.

	* gutils.c (g_getenv): Changed the win32 part of this function to
	be thread safe and to make the returned environment string
	persistent to match the UN*X behavior. This is again a response to
	Bug #8983.

	* glib.h (G_LOCK_NAME): Removed parentheses around the lock name,
	as that seems to cause problems for some compilers and really
	isn't necessary.

Wed Apr 19 08:32:32 2000  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_new): make sure that
	scanner->config->cset_skip_characters is "" instead of NULL, so we
	don't segfault further on.

2000-04-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, glist.h, gslist.h: Changed the 'data' parameters from
	gpointer to gconstpointer for the functions
	g_(list|slist)_(remove|find|find_custom|index), as they do not
	change this parameter. This fixes bug #4836.

	* glib.h: Changed comment for g_getenv to reflect, that the
	returned memory must not be freed. Fixes bug #8983.

2000-04-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, acconfig.h: Add configure test for garbage
	collector friendliness for GLib. If enabled, ENABLE_GC_FRIENDLY
	will be defined.

	* garray.c, ghash.c, glist.c, gmain.c, gmem.c, gnode.c, gqueue.c,
	gslist.c, gtree.c: If ENABLE_GC_FRIENDLY is defined, NULLify all
	memory released by the user, but cached by GLib. This lets a
	garbage collector have a more correct view of the actually used
	memory.

	* garray.c, glib.h: Added g_(array|ptr_array|byte_array)_sized_new
	functions, that reserve a certain amount of memeory for the array
	at creation time to avoid reallocation. Fixes bug #6707 from
	Charles Kerr <ckerr@osserver1.nssl.noaa.gov>.

	* glib.h, gqueue.c, tests/queue-test.c (main): Renamed
	g_queue_create to g_queue_new in conformance to all other GLib
	data types.

2000-04-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c (g_rand_new): Fixed bug. Thanks to Marko Kreen
	<marko@l-t.ee> for reporting that.

2000-03-26  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Tell about using the mingw-based gcc, which is
	much easier than modifying the cygwin gcc to product mingw code
	for the msvcrt runtime.

	* makefile.cygwin.in (WIN32APIHEADERS): Kludge to make it work
	with a "pure" mingw gcc, too.

2000-03-24  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* garray.c: Made GArray behave correctly. Now zero_terminated
	really means, that the element array->data[array->len] exists and
	is zeroed, and clear means that any unassigned elements obtained
	through g_array_set_size (the only way to get unassigned elements
	AFAICT) are zeroed. Added some macros to make the code more
	obvoius. Also made GPtrArray zero elements after
	g_ptr_array_set_size. This is done in a portbale way (assignment
	of NULL instead of just memsetting it to zero), though that might
	be more portability than we actually want.

	* Makefile.am, gthread/Makefile.am, gmodule/Makefile.am,
	tests/Makefile.am: Added various win32 related *.in files to
	EXTRA_DIST to let 'make distcheck' procude all the corresponding
	files, which it silently fails to do currently.

2000-03-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: After finding the right thread library (containing
	e.g. pthread_create) we now search for the right realtime library
	(containing e.g. sched_get_priority_max). Makes the output of the
	thread related libraries correct. 

	* gtimer.c (g_usleep): The current implementation of g_usleep
	(simply calling select) doesn't work reliable for multi-threaded
	programs on some platforms (bad omen for the main loop....), so I
	changed the implementation for thread-using programs to wait for a
	GCond for the specified amount of time (NB: sleep and usleep are
	not MT-safe in general, because they often use signals).

Wed Mar 22 16:49:57 2000  Owen Taylor  <otaylor@redhat.com>

	* gmem.c (g_mem_chunk_area_compare): Fix indentation.

2000-03-22 Elliot Lee <sopwith@redhat.com>

	* gmem.c (g_mem_chunk_area_compare): Fix 64-bitness bug in
	comparing two pointers more than 4G apart.

2000-03-22  Tor Lillqvist  <tml@iki.fi>

	* gutils.c: Move Win32-only includes after inclusion of glib.h, so
	that G_OS_WIN32 is defined.

	* glibconfig.h.win32.in: Add GSystemThread.

2000-03-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_current_dir): Ok, Marcus Brinkmann
	<Marcus.Brinkmann@ruhr-uni-bochum.de> convinced me, that 128 KB
	path length might not be enough for the HURD. So I changed the
	loop to at least avoid an integer overflow, which could happen at
	beyond 2GB size ;-)

	* configure.in: Test for sched_yield as the native yield function
	first. Corrected typo g_thread_sleep -> g_usleep. Corrected
	message for the pthread_create test. Negative Priorities are
	allowed (and used on Solaris), so consider
	sched_get_priority_min failed only if it returns -1, not <0. Check
	for sched_get_priority_min also in -lrt, if not found in -lpthread
	alone and add -lrt to G_THREAD_LIBS then. Remove special case
	handling of priorities for older solaris versions and posix
	threads. Thanks to Wan-Teh Chang <wtc@netscape.com> for suggesting
	some of those changes.

	* config.guess, config.sub, ltconfig, ltmain.sh:
	Upgrade to libtool 1.3.4.

2000-03-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, configure.in, gutils.h: always define G_GNUC_EXTENSION,
	even when not needed by GLib. That's actually also the way, the
	GLib reference manual describes that macro. Therefore I had to
	remove the lonesome #include <glibconfig.h> in gutils.c, which
	doesn't seem to be needed there however. This change should make
	Ben Gertzfield <che@debian.org> happy.

	* gutils.c: Furthermore two warnings in gutils.c were voided,
	which crept in due to my last change.

	* gutils.c (g_get_current_dir): Allocate only up to 128KB for a
	pathname. While this is an arbitrary value just like 2048, it
	seems to be enough (after all, even 4GB is an arbitrary value).

2000-03-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c (g_main_poll): Warn in case of an error during the call
	to poll(2). Closes Bug#7564 as reported by David Helder
	<dhelder@umich.edu>.

	* gutils.c (g_get_current_dir): Make g_get_current_dir work on
	systems with unlimited pathname length like the HURD (It worked
	there before, but only for pathes shorter than 2048). Closes
	Bug#4525 as reported by Marcus Brinkmann
	<Marcus.Brinkmann@ruhr-uni-bochum.de>.

2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* giounix.c (g_io_unix_write, g_io_unix_read): Interpret EINTR as
	G_IO_ERROR_AGAIN.

2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added the missing POSIX_NO_YIELD and
	POSIX_NO_PRIORITIES warning messages.

	* configure.in: Use AC_TRY_RUN instead of AC_TRY_LINK, to test for
	real thread support. On solaris pthread_create can be linked to
	even in -lc, but it doesn't work then.

	* configure.in: Don't use priorities for threads, when the
	minimal/maximal priorities couldn't be determined at configure
	time.

	* configure.in, gthread.c: Always define GSystemThread in
	glibconfig.h to represent a system thread.

	* configure.in: Do not use native recursive threads, when
	possibe. We use some features, that they do not expose (namely the
	depth counter).

	* glib.h, gthread.c: Redefined GStaticRecMutex. The functions are
	now implemented in a different way, which should be way
	faster. Alsothere are now functions g_static_rec_mutex_unlock_full
	and g_static_rec_mutex_lock_full to leave/enter a recursive mutex
	completly.

	* gthread.c (g_thread_self): Do not test the system_thread to be
	non-zero to speed things up.

	* gthread.c (g_mutex_init): Therefore set the system_thread of the
	main thread here.

	* tests/thread-test.c: Rerun all tests once again, but this time
	we fool the system into thinking, that the available thread system
	is not native, but userprovided.

2000-03-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gqueue.c (g_queue_push_tail_link, g_queue_push_head_link): We
	want the next and prev pointer of the inserted link to be NULL.

2000-03-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Another small change to the pthread_.. search
	pattern. Should work *now* for AIX.

2000-03-04  Tor Lillqvist  <tml@iki.fi>

	* gwin32.c (g_win32_error_message): New function that returns the
	message string for a Win32 error code.

	* glib.h: Declare it.

	* glib.def: Export it, plus g_node_copy.

2000-03-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Make the search for pthread_attr_... prototypes
	find names at the start of a line also, like it is on AIX. Thanks
	to Valdis Kletnieks <Valdis.Kletnieks@vt.edu> for the info.

Wed Mar  1 10:39:39 2000  Tim Janik  <timj@gtk.org>

	* gslist.c (g_slist_reverse): minor optimization.

	* testglib.c (g_node_test): added a couple of tests for
	g_node_copy().

	* glib.h:
	* gnode.c (g_node_copy): new function to copy subtrees,
	supplied by dbsears@ix.netcom.com.
	changed iterator to walk the children list backwards, so
	we get down from O(n^2) to O(n).

	* gnode.c (g_node_first_sibling): applied patch from
	dbsears@ix.netcom.com to optimize access if node->parent
	is present.

	* gutils.c (g_get_any_init): backed out HAVE_PW_GECOS check around
	assignment of g_real_name, sicne HAVE_PW_GECOS is never defined and
	thus breaks the original code.

	* merged changes from 1.2.7.

Fri Jan 28 11:37:41 2000  Owen Taylor  <otaylor@redhat.com>

	Bug #4156 - Changes vaguely modelled after Scott Gifford's patch

	* gtimer.c (g_timer_elapsed): Never report negative times -
	clip times to 0.

	* gmain.c (g_timeout_prepare): Guard against unexpected
	clock shifts by never setting a timeout of more than
	data->interval msecs.

2000-02-27  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add new functions.

2000-02-23  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Add a missing step to the setup instructions for
	gcc-2.95.2. Thanks to Arnaud Charlet.

	* glib.def: Add missing entry point.

2000-02-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Changed GCC version test to also accept major
	versions > 2. Thanks to Ben Gertzfield <che@debian.org> for
	pointing this out.

Thu Feb 17 12:53:44 2000  Tim Janik  <timj@gtk.org>

	* gstring.c: changed g_str_hash() to a 31 bit version based on
	a submission by Karl Nelson and hand optimized ad absurdum by
	various people ;)

	* gstring.c: applied patch from havoc for new gstring functions,
	added some more sanity checks, coding style fixups.

2000-02-13  Havoc Pennington  <hp@pobox.com>

	* tests/string-test.c (main): Add tests for the new GString 
	features

	* testglib.c (main): Add tests for the new GString features

	* gstring.c (g_string_insert_len): New function; insert 
	a given length of string at a given position. 
	(g_string_append): reimplement in terms of g_string_insert_len
	(g_string_append_len): new function
	(g_string_insert_c): accept -1 for "pos" arg to mean "append"
	(g_string_append_c): reimplement in terms of g_string_insert_c
	(g_string_prepend): reimplement in terms of g_string_insert_len
	(g_string_prepend_len): new function
	(g_string_prepend_c): reimplement in terms of g_string_insert_c
	(g_string_insert): reimplement in terms of g_string_insert_len

	* glib.h: Declare g_string_insert_len, g_string_append_len,
	g_string_prepend_len

Sun Feb 13 08:16:47 2000  Tim Janik  <timj@gtk.org>

	* configure.in: wtf??? someone destroyed the configure.in, reverting to
	an older version from Feb 4 which apears to still work.

2000-02-07  Tor Lillqvist  <tml@iki.fi>

	* gmodule.rc.in gthread.rc.in: Move to corresponding subdirectories.

	* Makefile.am
	* gmodule/Makefile.am
	* gthread/Makefile.am: Change accordingly.

	* makefile.cygwin: Corresponding changes, some cleanup.

2000-02-05  Tor Lillqvist  <tml@iki.fi>

	* glib.rc.in gmodule.rc.in gthread.rc.in: New files, for putting
	version info in the DLLs on Win32.

	* Makefile.am: Generate corresponding *.rc files and distribute
	them.

	* makefile.cygwin.in: Add rules to automatically bump a "build
	number" in the version info in the rc files each time the DLL is
	built. But do this only for the person who releases binaries. If
	others build the DLLs, the build number is set to zero.

Fri Feb  4 19:36:05 2000  Tim Janik  <timj@gtk.org>

	* glib.h: 
	* gdataset.c: return stolen data from g_datalist_id_remove_no_notify()
	and g_dataset_id_remove_no_notify() to avoid second lookup for common
	use.

2000-02-01  Tor Lillqvist  <tml@iki.fi>

	* glib.h
	* gstrfuncs.c (g_filename_to_utf8, g_filename_from_utf8): New
	functions for conversion between UTF-8 and the encoding expected
	by C runtime functions like open() and stat(), and returned by
	readdir().

	Implement them on Win32 where we use the system "ANSI" codepage,
	which might be single-byte or double-byte. On Unix, just skip the
	issue for now and provide dummy implementations that return a copy
	of the argument.

	* README.win32
	* build-dll
	* glib.def: Minor updates.

Wed Jan 26 05:24:38 2000  Tim Janik  <timj@gtk.org>

	* glib.h:
	* gmain.c: s/current_time/dispatch_time/ for the dispatch() handlers.
	refetch the current time after invocation of poll() to cover up for
	the time spent in that function call.

Fri Jan 21 10:18:24 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h (G_N_ELEMENTS): Added G_N_ELEMENTS macro to determine
	the number of elements in an array.

Sun Jan  9 13:28:36 2000  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strtod): correctly fetch the current locale,
	fix from owen.

1999-12-16  Tor Lillqvist  <tml@iki.fi>

	* gmodule/gmodule-win32.c: Use FormatMessage to translate system
	error codes into textual messages.

1999-11-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h (G_TRYLOCK): This of course should return TRUE in a
	program with a thread-disabled GLib.

1999-11-18  Tor Lillqvist  <tml@iki.fi>

	* glib.def: g_strjoin was missing.

1999-11-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, config.h.win32.in, configure.in: Renamed
	GLIB_SIZEOF_PTHREAD_T to GLIB_SIZEOF_SYSTEM_THREAD to reflect
	changed meaning.

	* configure.in: Cope with systems, that have a pthread_t type,
	that is not a pointer. Hint from Karl Nelson
	<kenelson@ece.ucdavis.edu>. Define GLIB_SIZEOF_SYSTEM_THREAD to 4
	for Solaris. Cope with systems, that have no default mutex
	initialize, like obviously most DCE systems.

	* glib.h, gthread.c: Changed the prototype of thread_create and
	thread_self to return the system thread into provided memory
	instead of a return value. This is necessary, as HPUX has a
	pthread_t, that is bigger than the biggest integral type there.

	* gthread.c: system_thread is no longer a pointer, but an memory
	area of size GLIB_SIZEOF_SYSTEM_THREAD. Changed the
	zeroinitialization and the tests for zeroness accordingly.

1999-11-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Create docs/glib-config.1 from
	docs/glib-config.1.in. Makes 'make distcheck' happy (and me too).

	* glib-config.1: Removed from CVS, as it is a generated file.

1999-11-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Make the test for getpwuid_r work on newer AIX
	versions, too. Still works on Solaris and Linux. Patch from Craig
	Rodrigues <rodrigc@mediaone.net>.

1999-11-08  Tor Lillqvist  <tml@iki.fi>

	* gwin32.c (g_win32_getlocale): Look at env vars LC_ALL, LC_CTYPE
	and LANG first. Some refinements to the sublanguage logic.

1999-11-04  Tor Lillqvist  <tml@iki.fi>

	* makefile.{cygwin,msc}.in: Add gwin32 object. Add rule to make .i
	(preprocessed source) files.

1999-11-01  Tor Lillqvist  <tml@iki.fi>

	* glib.h
	* glib.def: Rename Win32-only functions from gwin_* to g_win32_*
	to match the GLib naming conventions.

	* gutils.c
	* gwin32.c
	* testglib.c
	* Makefile.am: Move the Win32-only functions to the new
	file gwin32.c

1999-10-31  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (gwin_getlocale): New Win32-specific function, returns
	a Unixish current locale string (en, zh_TW etc).

	* glib.h: Declare it.

	* glib.def: Export it.

	* testglib.c: Test it.

	* gmessages.c (Win32: ensure_stdout_valid): Some improvements,
	make sure we don't call AllocConsole several times, which I think
	has happened.

Sun Oct 31 18:55:01 1999  ape@spacetec.no  (Asbjorn Pettersen)

	* gcache.c (g_cache_remove): Test if node is NULL.
	If not tested, GIMP's script-fu will crash. 

Sun Oct 17 18:11:40 1999  Tim Janik  <timj@gtk.org>

	* gdataset.c (g_data_set_internal): remove g_dataset_global_lock around
	destroy() notification here as well.

1999-10-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gdataset.c (g_datalist_clear_i): Avoid Freezing, when g_datalist
	is called recursivly. Reported by Ola Andersson <rand@ling.umu.se>.

Tue Oct 12 14:17:12 1999  Tim Janik  <timj@gtk.org>

	* glib.h: removed useless g_string(x) macro that cluttered the namespace
	and was just a poor wrapper around the cpp '#' symbol, use #x if you
	need to work around this.
	added new macro G_STRINGIFY(arg) that will convert arg to a string,
	no matter whether it contains macros or not.

1999-10-12  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Define the new GLIB_SIZEOF_* constants here,
	too.

	* glib.h: Small Win32 comments improvement.

Tue Oct 12 12:16:12 1999  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_printf_string_upper_bound): completly new
	implementation for printf string upper bounds calculation.
	we handle all glibc 2.1 format specifiers now, except for positional
	parameters (%nn$...) and wide char strings, plus some obscure upper
	case variants of the standard conversions. this fixes a lot of
	bugs in the old code, i.e.
	- NULL format strings
	- floats with exponents >+24
	- %G
	- precision specifications in general
	- negative field widths
	- %p for SIZEOF_VOID_P > 4 platforms
	we now issue warnigns in places where the old code would have
	caused buffer overruns anyways. warnings are suppressed when invoked
	from glogv(), to avoid infinite recursions if someone passes a log
	message that comes with really obscure format specifications.

Tue Oct 12 11:49:00 1999  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c: nuked old g_printf_string_upper_bound() version.

Tue Oct 12 03:34:40 1999  Tim Janik  <timj@gtk.org>

	* glib.h: added GFloatIEEE754 and GDoubleIEEE754 unions to access sign,
	mantissa and exponent of IEEE floats and doubles (required by the new
	version of g_printf_string_upper_bound). the unions are endian specific,
	we handle G_LITTLE_ENDIAN and G_BIG_ENDIAN as of currently. ieee floats
	and doubles are supported (used for storage) by at least intel, ppc and
	sparc, reference:
	http://twister.ou.edu/workshop.docs/common-tools/numerical_comp_guide/ncg_math.doc.html

Mon Oct 11 18:01:49 1999  Tim Janik  <timj@gtk.org>

	* configure.in: added additional checks to figure sizes of size_t,
	ptrdiff_t and intmax_t (required by g_printf_string_upper_bound).

Wed Oct  6 12:44:23 PDT 1999 Manish Singh <yosh@gimp.org>

	* configure.in: blah. use G_WITH_CYGWIN instead of G_HAVE_CYGWIN

1999-10-05  Tor Lillqvist  <tml@iki.fi>

	* glib.h: (Win32) Drop the mapping of POSIX function names to the
	underscored versions, it's unnecessary after all. With MSVC we get
	them from oldnames.lib, with gcc-2.95 and mingw32 from
	-lmoldname-msvc. Add comment about what headers to include for
	prototypes.

	* glibconfig.h.win32.in: Don't define WIN32 and NATIVE_WIN32.

	* gerror.c (g_on_error_query): (Win32) Slightly increased verbosity.

	* build-dll: Don't strip.

	* tests/string-test.c tests/dirname-test.c: Use G_OS_WIN32.

	* glib.def: Add g_thread_use_default_impl.

Sun Oct  3 19:46:55 PDT 1999 Manish Singh <yosh@gimp.org>

	* configure.in: use G_HAVE_CYGWIN instead of G_OS_FEATURE_CYGWIN

Sun Oct  3 19:25:42 PDT 1999 Manish Singh <yosh@gimp.org>

	* acconfig.h
	* configure.in
	* glibconfig.h.win32: G_OS_FOO #defines. I *think* I got the cygwin
	and beos stuff right, but I haven't tested it. The respective
	porters should fix any screwups

	* glib.h
	* gerror.c
	* gmain.c
	* gmessages.c
	* gscanner.c
	* gthread.c
	* gtimer.c
	* gutils.c
	* testglib.c: use G_OS stuff

Wed Sep 22 01:53:18 1999  Tim Janik  <timj@gtk.org>

	* glib.h (NULL): define NULL as (0L) if __cplusplus is defined, to
	avoid "ANSI C++ forbids implicit conversion from `void *' in argument
	passing" errors upon NULL usage in C++ programs (gcc-2.95 is on crack
	for erroring out on this, instead of just issueing a warning).

	* glib.h (g_trash_stack_pop): use uncasted NULL again.

Fri Sep 17 10:24:45 1999  Tim Janik  <timj@gtk.org>

	* gmem.c (g_mem_chunk_compute_size) (g_mem_chunk_new): applied
	patch from Soeren Sandmann <sandmann@daimi.au.dk>, to force mem
	chunk's area sizes to be a multitiple of atom_size, and to
	eliminate the MAX_MEM_AREA restriction of 65536 bytes. we also
	catch cases where users pass an area size < atom size with a
	return_if_fail statement now (which is ok, because previously this
	lead to memory corruption anyways).

Thu Sep 16 13:19:54 1999  Tim Janik  <timj@gtk.org>

	* glib.h (g_trash_stack_pop): add explicit (GTrashStack*) cast for NULL
	pointer to cure ANSI C++ error.

Mon Sep 13 23:25:59 1999  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_logv): in case we have to abort the program,
	debugging is enabled and we are not called recursively, try
	to abort with raise (SIGTRAP) first, so developers may ignore
	certain failure conditions during debugging stage.

Thu Aug 26 15:09:36 1999  Tim Janik  <timj@gtk.org>

	* Makefile.am:
	* gmodule/Makefile.am:
	* gthread/Makefile.am: added --export-dynamic so we can load dynmic
	modules, (required, according to the libtool 1.3.3 docu).

1999-07-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c (g_rand_new): Use /dev/urandom, as it doesn't block,
	which /dev/random might do. Do not XOR the time, when getting the
	seed form /dev/urandom, as this is good itself. Prevent the
	initial seed from being zero, which causes the PRNG to produce
	only zeros. Hints from Colin Plumb <colin@pgp.com>.

1999-08-17  Tor Lillqvist  <tml@iki.fi>

	* glib.h (g_trash_stack_push): Add a cast.

	* gslist.c
	* glist.c: Make the inline functions static inline, and add
	separate extern wrappers. Not all compilers produce callable entry
	points for inline functions, even if gcc does.

Sun Aug 15 02:47:14 1999  Tim Janik  <timj@gtk.org>

	* glib.h (g_trash_stack_pop): eliminate memset() call, since string.h
	has not neccessarily been included prior to glib.h.

Mon Aug  2 21:03:10 1999  Tim Janik  <timj@gtk.org>

	* configure.in: added --enable-msg-prefix option.

	* gmessages.c (g_log_default_handler): feature "prg_name (pid:%u): "
	if --enable-msg-prefix was selected (use "(process:%u): " if
	g_get_prgname () returns NULL, along the lines of g_on_error_query).

1999-08-03  Tor Lillqvist  <tml@iki.fi>

	* glib.h
	* gstrfuncs.c
	* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
	g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
	destination parameter, always g_malloc a new string.  Fix bug in
	g_strcompress, octal digits were gobbled up without limit, should
	use max three.

	Sources that use g_strescape must have ifdefs to be compilable
	both with GLib 1.2 and 1.3.

Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>

	* glib.h
	* gstrfuncs.c: the #define for g_strescape interfered with the
	compilation of the function, so just remove the function and
	note that it's deprecated in the header

1999-08-01  Tor Lillqvist  <tml@iki.fi>

	* gstrfuncs.c (g_strccpy, g_strecpy): New functions.

	* glib.h: Declare and document them. Define the deprecated
	g_strescape as a macro that calls g_strecpy.

	* tests/strfunc-test.c (main): Test them.

	* makefile.{cygwin,msc}.in
	* tests/makefile.{cygwin,msc}.in: Remove gstack and its test
	program.

	* glib.def: Additions and removals.

	* README.win32: Improve gcc build instructions.

	* build-dll: Also build import library for MSVC.

Sat Jul 24 20:11:35 1999  Tim Janik  <timj@gtk.org>

	* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
	* incorporated proposed cleanups from gtk-devel-list.

	* bumped version number to GLib-1.3.1

	* glib.h:
	* gqueue.c:
	* gstring.c:
	* glist.c:
	removed string tokenisation (we got g_strsplit() and g_strjoin()
	already) and readline functions.
	s/g_list_delete/g_list_delete_link.
	implemented g_slist_delete_link.
	removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
	macro, g_atexit() is provided for public consumption.
	added GTrashStack inline utility functions.
	reimplement double eneded queues.
	removed GStack implementation, people can use a queue or a (singly)
	linked list for this task.
	deprecated g_strescape(), we need the SunOS variants here.

	* gdate.c: added DEBUG_MSG() macro to wrap old messages.

	* *.*: CVS merges.

	* upgrade to libtool 1.3.3.

1999-07-21  Tor Lillqvist  <tml@iki.fi>

	Win32: With the latest gcc (2.95, pre-release), we can have binary
 	compatibility with MSVC by using the switch -fnative-struct. No
 	longer build DLLs with .gcc in the name when using gcc.

	* README.win32: Renew gcc build instructions.

	* build-dll: Comments change, handle also .a files.

	* makefile.cygwin.in
	* tests/makefile.cygwin.in: Remove .gcc from DLL name.

1999-07-13  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Correct URL for mingw runtime sources.

	* build-dll: Combine commands with &&.

	* glib.h: Map also rmdir() and hypot() for MSVCRT library.

	* makefile.cygwin.in
	* tests/makefile.cygwin.in: New DLL naming style. GCC-compiled DLLs are
 	now called *.gcc.dll, to avoid binary incompatibilities with
 	MSVC-compiled versions.

	* makefile.msc.in: Cosmetics.

1999-07-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Test for pthread_join rather than for
	pthread_create to determine the right thread-lib. Makes it work on
	mips-sgi-irix6.5. Hitn from to Jari Vuoksenranta
	<javu@piano.ux.phys.jyu.fi>.

1999-07-02  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Note about need to fix another bug in the mingw32
 	headers.

	* makefile.msc.in: Debugging turned on via an nmake variable,
	no need to edit the makefile.

1999-07-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, acconfig.h, gutils.c: Added a g_memmove
	replacement for platforms without memmove, where bcopy can't
	handle overlapping copies and the corresponding checks, which is
	taken form the PERL Configure routine.

	* glib.h: Updated the commentary about g_memmove to be right and
	more GLib-like.

	* configure.in: Removed test for rand_r, as it isn't used anymore.

1999-06-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, grand.c: Finally removed the g_random_normal and
	g_rand_normal functions.

1999-06-28  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add missing export of g_strncasecmp.

1999-06-21  Jose Mercado  <jmercado@mit.edu>

	* glib.spec.in: Changed version number (1.1->1.3) in files section
	to allow rpm to build packages again.

1999-06-21  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update the pthreads snapshot version we want.
	Advice how to hand-expand the makefile.*.in files.

	* config.h.win32.in: Define values needed by Sebastian Wilhelmi's
	new thread stuff.

	* glib.def: Add new functions.

	* glibconfig.h.win32.in: Update the pthreads snapshot version.
	Fix typo.

	* gthread.c: Include config.h, guard inclusion of unistd.h.  When
 	using gcc on Win32, g_thread_functions_for_glib_use must be marked
 	for export here, too.

	* gtimer.c: Implement g_usleep on native Win32 using Sleep (which
	only has millisecond granularity, though).

	* makefile.cygwin.in
	* makefile.msc.in: Update pthreads snapshot version. File
	name changes. Remove testgthread.

	* tests/makefile.cygwin.in
	* tests/makefile.msc.in: Add thread-test. Link with gthread lib.

1999-06-18  Jeff Garzik  <jgarzik@pobox.com>

	* tests/Makefile.am:  Re-order tests in alpha order.

1999-06-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Changed test for pthread_attr_setstacksize from
	AC_TRY_COMPILE to AC_TRY_LINK.

1999-06-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, acglib.m4, acconfig.h, glib.h, gthread.c:
	Completed the thread support in GLib. Thread creation,
	prioritizing threads, yielding, joining threads as well as
	reader/writer locks and recursive mutexes are now in place. Please
	test heavily on your platform. It is so far tested on
	Linux/i386/pthreads, Solaris/Sparc/pthreads and
	Solaris/Sparc/solaristhreads.

	* gtimer.c, glib.h: Implement g_usleep (gulong microseconds) for
	thread safe sleeping. (sleep() is not MT-safe at all!)

	* gutils.c: Avoid compiler warning.

	* tests/Makefile.am, tests/thread-test.c: New program to test some
	aspects of the thread implementation.

	* gthread.c, Makefile.am: Renamed from gmutex.c to reflect the
	change of content.

	* configure.in: Purged all appearances of nspr. 

Wed Jun  2 11:42:46 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3.2 (BeOS changes merged)

1999-05-29  Tor Lillqvist  <tml@iki.fi>

	* gstrfuncs.c (g_strescape): Backslashify also '"' characters.

	* glib.h: Document g_strescape.

1999-05-12  Tor Lillqvist  <tml@iki.fi>

	* glib.h (Win32): Map fileno to _fileno for mingw32. Map fstat to
 	_fstat.

	* README.win32: Advice also to remove -lmoldname in the
 	patch to the egcs-1.1.2 spec file.

Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* gmodule/Makefile.am: Another small fix.

1999-05-08  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am tests/Makefile.am: Correct rules for making the
	win32-related files that are made from corresponding .in files.
	Is there a cleaner way than explicitly writing rules that invoke
	config.status?

Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>

	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3.3

1999-06-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
	is..... and to..... macros, which take unsigned chars, not chars!
	Thanks to Morten Welinder <terra@diku.dk> for pointing this out.

Thu Jun  3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>

	* gerror.c (g_on_error_query): check isatty() before querying so
	we don't loop endlessly

Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3.2

1999-05-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c: provide a poll prototype for SunOS, as they do not do
	it self. Hint from Christian Parg <cparg@fs-design.de>.

Tue May 25 12:23:07 1999  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
	(Reported by Charles Levert <charles@comm.polymtl.ca>)

Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.3

1999-05-08  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am tests/Makefile.am: Correct rules for making the
	win32-related files that are made from corresponding .in files.
	Is there a cleaner way than explicitly writing rules that invoke
	config.status?

Sat May  1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3

1999-04-30  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am: Don't distribute glibconfig.h.win32.in, but
	glibconfig.h.win32. Generate it when making a dist. Also generate
	makefile.msc and config.h.win32 from corresponding .in files when
	making dist.

	* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
	@GLIB_BINARY_AGE@ (needed in config.h.win32).

	* glibconfig.h.win32.in: Use static mutex structure and initial
	value corresponding to the 1999-04-07 snapshot of pthreads-win32.

	* tests/Makefile.am: Distribute makefile.msc. Generate it when
	making dist.

	* tests/makefile.msc.in: New file.

	* tests/node-test.c: Include <stdlib.h> for exit().

Thu Apr 29 02:16:36 1999  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c: minor code cleanups.

Tue Apr 27 13:11:29 1999  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
	the events field so we don't give IRIX fits.

Tue Apr 20 08:42:22 1999  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_unexp_token): behave conservative with
	G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
	to be "null" in that case.

1999-04-20  Havoc Pennington  <hp@pobox.com>

	* gutils.c (g_vsnprintf):  When using the vsnprintf()
	implementation, '\0'-terminate the resulting string
	and return its length rather than -1.

Mon Apr 19 13:42:21 1999  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_main_iterate): Added missing
	#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
	the first place!)

1999-04-18  Havoc Pennington  <hp@pobox.com>

	* gutils.c (g_snprintf): When using the vsnprintf()
	implementation, '\0'-terminate the resulting string
	and return its length rather than -1.

Fri Apr 16 06:52:07 1999  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
	expected token as well, so we get "- expected end of file" instead of
	"- expected (unknown) token <0>".

Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.2

1999-04-12  Elliot Lee  <sopwith@mh69.mh.cuc.edu>

	* g_strchug(): s/strcpy/memmove/

1999-04-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Adjusted the test for an unimplemented
	getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.

Sun Apr 11 15:07:34 1999  Tim Janik  <timj@gtk.org>

	* configure.in: bumped versin number to GLib 1.2.2, interface 2,
	binary 2.

	* NEWS: updates.

Sun Apr 11 14:37:06 1999  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.

Sat Apr 10 19:30:50 1999  Tim Janik  <timj@gtk.org>

	* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
	and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for
	compile time string concatenation.

Thu Apr  8 19:53:19 1999  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_main_iterate): Check for two threads
	calling g_main_iterate at once.

	* gmain.c: If the set of poll file descriptors changes
	during a call to poll(), abort that call, and start
	a new poll. My test program still segfaults
	obscurely on glibc 2.0 (in read()!!!), but now it works on
	glibc 2.1, so I'll blame something else for the other segfault.

1999-03-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Fixed slight bug, that made configure hang on some
	systems. Please do not merge this into 1.3 branch. It's taken care
	of differently there. Info from J. Rhett Aultman
	<cuplan@alley.gator.net>

Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.1

	* README:
	  INSTALL: 
	  NEWS: 
	  sanity_check: updated

	* glibconfig.h.win32.in:
	  Makefile.am:
 	  docs/glib-config.1.in:
	  docs/Makefile.am: Added files used to generate new files.

	* glibconfig.h.win32:
	  docs/glib-config.1: Removed, now generated.

	* configure.in: Added to output now-generated files.

Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>

	* giounix.c: add user_data param to check and prepare functions

Mon Mar 22 03:54:43 1999  Tim Janik  <timj@gtk.org>

	* glib.h:
	* gmain.c: add user_data to the GSource ->check and ->prepare
	functions, so it can be used to e.g. pass a GPollFd.
	(g_main_poll): only add poll records with an events mask != 0 to the
	fd_array. don't even bother calling poll_func() if fds=timeout=0.
	added debugging printouts around poll_func() invokation that can be
	enabled with #define G_MAIN_POLL_DEBUG.

Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.sub
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.2f

	* autogen.sh: libtool is not required to autogen glib

	* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
	needed)

1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Fixed another stupid fault of mine: Did
	s/g_static_/g_private_/g

Wed Mar 17 03:17:42 1999  Tim Janik  <timj@gtk.org>

	* configure.in bumped versin number to GLib 1.2.1, interface 1,
	binary 1.

	* NEWS: updates.

	* glib.h: added GLIB_CHECK_VERSION() macro similar to
	GTK_CHECK_VERSION().

Sun Mar 14 17:50:35 1999  Tim Janik  <timj@gtk.org>

	* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
	to g_return_if_fail().
	(g_mem_profile): 
	(g_mem_chunk_print): 
	(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
	messages.

	* gtimer.c (g_timer_*):	changed a bunch of g_assert() statements
	to g_return_if_fail().
	* grel.c (g_*): changed a bunch of g_assert() statements to
	g_return_if_fail() and added some extra ones to check relation != NULL.

1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Also accept _Pctime_r instead of ctime_r, while
	seraching for the right `_REENTRANT' flag. This is for Digital
	UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.

Tue Mar  9 23:25:50 1999  Tim Janik  <timj@gtk.org>

	* configure.in: check for working realloc (NULL,).
	* gmem.c (g_realloc): use malloc() for initial allocation on systems
	where realloc(NULL,) will not work (this is the case on SunOS, reported
	by Tom Geiger).

Mon Mar  8 07:42:08 1999  Tim Janik  <timj@gtk.org>

	* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
	flag around the call to g_hook_free() to avoid spurious
	warnings (happens during destruction phase).

1999-03-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
	from config.h.win32 to glibconfig.h.win32

	* acconfig.h, configure.in, config.h.win32: Added test for DCE
	versions of mutex_trylock and cond_timedwait. The win32 versions
	are posix, aren't they?

1999-03-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
	Friedrich Dominicus <Friedrich.Dominicus@inka.de>

1999-03-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_any_init): Fixed yet another bloody
	implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
	<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
	test better than that, but have no idea, how to do that easily.

Sun Feb 21 22:11:51 CST 1999  Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.0

	* AUTHORS: updated

Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>

	* *.[ch]: inserted additional note to look for ChangeLog and
	  AUTHORS file for a log of modifications.

Sun Feb 21 14:01:00 1999  Dr Mike <drmike@redhat.com>

	* Made specfile generated, tweaked slightly

Sat May  8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* configure.in
	  gmodule/Makefile.am
	  gthread/Makefile.am: Better testing reveals better
	  methods.  Fixes for BeOS.

Sat May  8 01:52:29 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* configure.in
	  gerror.c
	  gmain.c
	  gstrfuncs.c
	  gutils.c
	  ltconfig
	  ltmain.sh
	  gmodule/Makefile.am
	  gmodule/gmodule.c
	  gmodule/gmoduleconf.h.in
	  gmodule/gmodule-beos.c
	  gthread/Makefile.am: Port to BeOS by myself and Richard Offer.

1999-05-06  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
 	config.h.win32.in tests/makefile.msc.in tests/makefile.cygwin.in:
 	New files, used to generate corresponding non-.in files when
 	making a dist. This is just so the version numbers will be kept in
 	synch automatically.

	* configure.in: Also substitute @GLIB_MAJOR_VERSION@,
 	@GLIB_MINOR_VERSION@, and @GLIB_INTERFACE_AGE@.

	* Makefile.am tests/Makefile.am: Also distribute makefile.cygwin.

	* gerror.c (g_on_error_query): On Win32, put up a MessageBox and
 	then exit.

	* glib.def: Add a couple of functions.

Sat May  1 10:26:20 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3

1999-04-25  Tor Lillqvist  <tml@iki.fi>

	* README.win32: More editing.
	* build-dll: Use gcc, not ld to link.
	* glib.h: On native Win32 use _unlink().
	* gscanner.c: Use corrent NATIVE_WIN32 feature test macro,
	not _MSC_VER.
	* gstring.c: Include <io.h> on Win32 for _read prototype.
	* gutils.c: Remove old IO channel code (was in #if 0).
	* makefile.cygwin: Don't need to link with kernel32 and msvcrt
	explicitly, they are included anyway.

1999-04-24  Tor Lillqvist  <tml@iki.fi>

	Support added for building using a GNU toolchain on Win32,
	i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).

	* README.win32: Updated.
	* build-dll makefile.cygwin tests/makefile.cygwin: New files.
	* glib.h glib.def glibconfig.h.win32: Slight updates. 
	* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
	* gmain.c gutils.c testglib.c tests/string-test.c: Test for
	NATIVE_WIN32, not _MSC_VER.
	* gmutex.c: Must declare g_thread_functions_for_glib_use as
	exported (using the GUTILS_C_VAR macro).
	* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
	* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
	* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
	value of g_thread_functions_for_glib_use (?).
	* makefile.msc tests/makefile.msc: Cosmetics.

Fri Apr 23 14:29:25 BST 1999  Tony Gale <gale@gtk.org>

	* glib.h: Fix typo in g_string_ncasecmp macro (by me).
	  Add b_string_strncasecmp macro.

1999-04-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_any_init): use sysconf (_SC_GETPW_R_SIZE_MAX) as
	the new initinal bufsize for getpwuid_r on systems, that support
	this. Hint from Holger Duerer <H.Duerer@zait.uni-bremen.de>.

Sat Apr 17 20:55:13 BST 1999  Tony Gale <gale@gtk.org>

	* glib.h, gstring.c: Add new g_string functions for reading
	  from file/socket descriptors, and tokenising strings.

	  Added various g_string macros.

Tue Apr 13 23:28:32 1999  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Mention the tests directory.

	* glib.def: Add the functions from grand.c.

	* glibconfig.h.win32: Add unsigned max values, and the format
 	strings.

	* makefile.msc: Add grand.

	* tests/{date-test,node-test}.c: Include <stdlib.h> for exit().

	* tests/makefile.msc: New file.

1999-04-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h: Moved struct declaration up. Style fixes.

	* grand.c: Style fixes. Only try to open /dev/random once.

	* tests/rand-test.c (main): New tests; Slight bug fix. 

1999-04-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c, tests/rand-test.c: New files to implement the Mersenne
	Twister Pseudo Random Number Generator.

	* glib.h, AUTHORS, Makefile.am, tests/Makefile.am: Changed
	accordingly.

Thu Apr  8 21:12:30 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.3.0

1999-03-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added a check for the right format to printf and
	scanf long longs. It is %qi instead of %lli on FreeBSD for
	whatever reason.

1999-03-28  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (glibconfig.h): Make sure `glibconfig.h' exists
	after the rule is fired.
	(install-exec-local): Install glibconfig.h only if the contents
	are different from the currently installed glibconfig.h.

1999-03-26  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (configexecincludedir): Rename from 
	configincludedir so that glibconfig.h will be installed 
	as part of `make install-exec'. 

Thu Mar 25 22:45:47 1999  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32: Update version numbers.

	* glibconfig.h.win32: Update version numbers and pthreads-win32-
 	related magic values.

	* README.win32: Some improvements.

	* makefile.msc: Add gqueue and gstack. Correct version number.

Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.sub
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.2f

	* autogen.sh: libtool is not required to autogen glib

	* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
	needed)

1999-03-18  Jeff Garzik  <jgarzik@pobox.com>

	* glib.def: Add new g_list, g_stack, g_queue functions.

1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: added new AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
	to hold various defines to get the right thread implementation on
	different platforms. Also look in -ldce for pthread_create. Should
	make it work on HP-UX 10.x. Information from "D. Emilio Grimaldo
	Tunon" <emilio_tunon@nl.compuware.com>.

1999-03-17  Jeff Garzik  <jgarzik@pobox.com>

	* gstack.c, gqueue.c:
	Add copyright, clean up code a bit.

1999-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added missing values for G_MAXU(SHORT|INT|LONG) on
	platforms with only /usr/include/values.h.

	* acconfig.h: Removed unnecessary macros.

	* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
	from config.h.win32 to glibconfig.h.win32. Taken from glib 1.2
	branch.

	* configure.in: Also accept _Pctime_r instead of ctime_r, while
	seraching for the right `_REENTRANT' flag. This is for Digital
	UNIX 4.0d. Taken from glib 1.2 branch.

Wed Mar 17 03:14:56 1999  Tim Janik  <timj@gtk.org>

	* glib.h: added GLIB_CHECK_VERSION() macro similar to
	GTK_CHECK_VERSION().

Wed Mar 17 01:46:28 1999  Tim Janik  <timj@gtk.org>

	* merges from glib-1-2:

Sun Mar 14 17:50:35 1999  Tim Janik  <timj@gtk.org>

	* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
	to g_return_if_fail().
	(g_mem_profile):
	(g_mem_chunk_print):
	(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
	messages.

	* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
	to g_return_if_fail().
	* grel.c (g_*): changed a bunch of g_assert() statements to
	g_return_if_fail() and added some extra ones to check relation != NULL.

Tue Mar  9 23:25:50 1999  Tim Janik  <timj@gtk.org>

	* configure.in: check for working realloc (NULL,).
	* gmem.c (g_realloc): use malloc() for initial allocation on systems
	where realloc(NULL,) will not work (this is the case on SunOS, reported
	by Tom Geiger).

Mon Mar  8 07:42:08 1999  Tim Janik  <timj@gtk.org>

	* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
	flag around the call to g_hook_free() to avoid spurious
	warnings (happens during destruction phase).

1999-03-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
	Friedrich Dominicus <Friedrich.Dominicus@inka.de>

1999-03-16  Timur Bakeyev  <mc@bat.ru>

	* configure.in: Fix problem with pthread_create in libc, as running
	"gcc test.c -l " is not legal.

1999-03-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* tests/type-test.c: Added a test for the
	G_(U)?INT(16|32|64)_FORMAT and G_(MIN|MAX|MAXU)(SHORT|INT|LONG)
	macros.

	* configure.in: Removed G_(U)?INT8_FORMAT again, as it can't be
	used for scanf.

	* configure.in: Added the macros G_MAXU(SHORT|INT|LONG). I do not
	know how to handle these on platforms with /usr/include/values.h,
	but without /usr/include/limits.h. Please someone add this.


1999-03-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added the macros G_(U)?INT(8|16|32|64)_FORMAT to
	use for printf and (much more important) scanf format strings for
	the corresponding GLib types. 

	* glib.h Added G_(U)?(SHORT|INT|LONG)_FORMAT for consistency. It
	however makes no sense to also provide G_(FLOAT|DOUBLE)_FORMAT, as
	they are different for printf (f for both) and scanf (f for float,
	lf for double). Defining G_INT_FORMAT makes sense however, as we
	might want to define gint to something different than int someday
	in the future. Idea from Sascha Brawer <sb@adasys.ch>.

1999-03-14  Jeff Garzik  <jgarzik@pobox.com>

	* gdate.c:
	Commented out debugging output.

	* tests/Makefile.am, tests/date-test.c:
	Added test of the GDate module, based closely on testgdate.c.

	* tests/Makefile.am:
	Bugfix - compile tests with @GLIB_DEBUG_FLAGS@.

1999-03-14  Raja R Harinath  <harinath@cs.umn.edu>

	* configure.in (glibconfig.h): Remove widechar tests and defines.
	(fd_set): Change the grep for `fd_mask' to search for `fd_set'.
	* gerror.c (fd_mask): Remove conditional typedef.  It is not used
	elsewhere in the file.
	* gmain.c (fd_mask): Likewise.

1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Test for posix threads first, then for dce threads.

1999-03-11  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Revamped the thread configure stuff. Now dce
	threads (old posix draft) are recogniced. This is necessary,
	because dce threads are in fact working quite differently from
	posix threads. Also changed the conditions for checking for MT
	safe functions a bit, because G_THREADS_IMPL_NONE still have to
	compile thread safe. NOTE: Please do not commit my change to
	glib-1-2/{acconfig.h,configure.in,config.h.win32} from 1999-03-03,
	as the current change will take care of that too.

Tue Mar  9 14:37:32 1999  Jeff Garzik  <jgarzik@pobox.com>

	* Makefile.am, glib.h, gstack.c, gqueue.c,
	  tests/Makefile.am, tests/queue-test.c, tests/stack-test.c:
	Added stack, queue ADTs and related tests.

	* glib.h, glist.c:
	New g_list_delete() function.

Sat Mar  6 11:03:08 1999  Asbjorn Pettersen  <ape@lrdpf.spacetec.no>

	* gutils.c (g_get_any_init): add OS/2 changes.
	change '\\' in HOME to '/'.

1999-03-03  Josh MacDonald  <jmacd@spin.dsl.pacbell.net>

	* glib.def: g_spaced_primes_closest was omitted here, so I
	couldn't build Xdelta on Windows.

1999-03-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_any_init): Fixed yet another bloody
	implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
	<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
	test better than that, but have no idea, how to do that easily.

Sat Feb 27 01:18:47 1999  Tim Janik  <timj@gtk.org>

	* ChangeLog: moved old ChangeLog to ChangeLog.pre-1-2, and started
	new one.

	* configure.in: set glib version to 1.3.0.
