Thu Mar 28 18:25:14 2002  Owen Taylor  <otaylor@redhat.com>

	* Released 2.0.1

	* configure.in: Version 2.0.1, interface, binary age 1.

Thu Mar 28 18:22:53 2002  Owen Taylor  <otaylor@redhat.com>

	* README: Remove warning about g_print, etc, encoding.

	* NEWS: Updates.

	* glib/gmessages.c (g_log_default_handler): Use %lu
	(plus a cast) when printing out pid_t arguments.
	(#76770, Morten Welinder)

	* glib/gstrfuncs.c (g_strdup_vprintf): Check the
	result of vasprintf(), return NULL on failure.
	(#76802, Akira Tagoh)

	* tests/testglib.c (TEST): Supress a warning with
	some GCC versions. 

Thu Mar 28 20:31:51 2002  Tim Janik  <timj@gtk.org>

	* glib/gmessages.c:
	(g_print): 
	(g_printerr): convert prtinf() strings to local charset
	when writing them to stdout or stderr.

Wed Mar 27 18:42:22 2002  Tim Janik  <timj@gtk.org>

	* gmessages.[hc]:
	major cleanups. introduced _g_log_fallback_handler() to handle
	recursive messages which really doesn't call any GLib functions.
	this allowes the default handler to use normal GLib functions and
	also fixes user supplied log level handlers.
	fixed locking issues, based on a patch from Sebastian Willhelmi,
	attached to #74356. translate log messages from UTF-8, based
	on the same patch. save fatal and recursion flags across flag
	loop. use new integer format code from above patch.
	move GLib functions out of locked mutex state to avoid deadlocks.
	move the level prefix and filedescriptor logic into mklevel_prefix().
	move _g_debug_init() into a place where we can figure and handle
	recursion.

Mon Mar 25 18:13:06 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gtypes.h (GUINT*_SWAP_LE_BE_X86): Remove __const__
	qualifier from __asm__ statements... GCC since at least
	2.96 has assumed no side effects automaticaly, and gcc-3.1
	will warn about this usage. (#73308, Cody Russell)

Fri Mar 22 17:59:27 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gmem.c (g_mem_chunk_reset): Fix problem where
	if g_mem_chunk_reset() is called on an alloc-only
	memchunk, then a useles GTree was created.

Wed Mar 20 18:20:21 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gconvert.c (open_converter): Try to work around segfaults
	on Solaris if NULL is passed for outbuf... supposedly gchar
	*outbuf = NULL... &outbuf works. (#74336, Lauri Alanko)

Wed Mar 20 11:17:32 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gfileutils.c (get_contents_regfile): Close the
	file descriptor. (#75507, Matthias Clasen)

Wed Mar 20 11:00:59 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Use $PKG_CONFIG, not pkg-config.
	(LEE Sau Dan, #75572)

2002-03-20  Sven Neumann  <sven@gimp.org>

	* glib/ghash.c (g_hash_table_resize): avoid repeated call of 
	g_spaced_primes_closest() by moving it out of the CLAMP macro 
	(spotted by Salmaso Raffaele).

2002-03-17  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Add MSVC-specific text by Hans Breuer.

2002-03-16  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c: Some debugging output formatting changes. The
	following changes fix a problem with buffered GIOChannels, noticed
	with the help of Owen's test program, thanks! (#59969)
	(g_io_win32_prepare): Return value that takes the buffer condition
	into account, like g_io_unix_prepare() does.
	(g_io_win32_check): Ditto, like g_io_unix_check().
	(g_io_win32_dispatch): Ditto, like g_io_unix_dispatch().

Thu Mar 14 17:37:45 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_channel_write_chars): Fix some
	gsize/gint mismatches. (#74422, Miroslaw Dobrzanski-Neumann)

2002-03-14  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gmessages.c: Fixed threading issues brought up by
	#74577. Make g_log_find_domain, g_log_domain_new,
	g_log_domain_check_free and g_log_domain_get_handler require being
	called with g_messages_lock held and remove all internal locking
	in them. Then added proper locking to g_log_set_handler,
	g_log_remove_handler and g_logv. Problem spotted by Miroslaw
	Dobrzanski-Neumann <mne@mosaic-ag.com>. (#74577)

2002-03-13  Erwann Chenede  <erwann.chenede@sun.com>
        * glib/gconvert.c 
	  glib/gen-unicode-tables.pl
	  glib/gunidecomp.h : fixed cast/type problems to 
	  avoid warnings (with forte compiler) (#73898)
	
2002-03-12  Alexander Larsson  <alla@lysator.liu.se>

	* glib/gconvert.c:
	Cache getenv("G_BROKEN_FILENAMES") in have_broken_filenames() and
	use instead. Add g_convert_init() that calls have_broken_filenames()

	* gthread/gthread-impl.c:
	Have g_thread_init call g_convert_init.

2002-03-11  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strtod): 
	(g_ascii_strtod): 
	(g_ascii_dtostr): 
	(g_ascii_formatd): Doc formatting fixes.

