Mon Dec 16 17:31:50 2002  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.1.5 ===

	* configure.in: Version 2.1.5, interface age 2.

	* NEWS: Updated.

Mon Dec 16 14:58:33 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Add a hack to mostly deal with
	problems in support of -pthread and -lpthread;
	pass -lpthread (for linux) or -Wc,-pthread (for
	other platforms) to libtool when linking libgthread. 
	(#100697)

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

	* glib/gspawn-win32.c (do_spawn): Fix potential heap
	corruption. Sometimes called g_free() on string literal.

Sun Dec 15 19:51:58 2002  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: AC_SUBST() DATADIRNAME, not 
	DATADIR.

Sun Dec 15 19:22:58 2002  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: Restore a missing AC_SUBST()
	for DATADIRNAME. (Found by Kjartan Maraas)

Sun Dec 15 11:24:29 2002  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: Actually set INTLLIBS
	when needed. (Reported by Tor Lillqvist)

2002-12-15  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add g_rand_init.

	* config.h.win32.in: Slight update to match what is currently
	produced by configure.

Sat Dec 14 21:24:04 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gutils.c (g_get_any_init): HP-UX 10 xshares the
	same non-posix getpwuid_r signature as AIX. 
	(#100756, Kai Poitschke)

Sat Dec 14 21:10:57 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gthread.h: Mark the contents of the strucures
	in this file /*< private >*/

	* glib/gthread.[ch]: Rename the 'write' field of the
	structure to 'have_writer' to avoid any possible
	conflict with system headers. (#90549, Morten Welinder)

Sat Dec 14 20:11:41 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/libcharset/{localcharset.[ch] libcharset-glib.patch}
	glib/gutf8.c: Break _g_locale_charset() into two pieces 
	- a fast "raw" piece, and a slow "unalias pieces". 
	Always call the "raw" piece, and call the unalias bit
	if it changes. Use a per-thread cache. (#79529)

2002-12-15  Matthias Clasen  <maclas@gmx.de>

	* configure.in: Set TRIO_LIBS when building with trio.

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

	* glib/trio/Makefile.am (libtrio_la_LIBADD): Use @TRIO_LIBS@.

	* glib/trio/glibtrio.h: New file, redefining all trio symbols to
	fall into the _G/_g_ private glib namespace.

	* glib/trio/Makefile.am (libtrio_la_SOURCES): Add glibtrio.h

	* glib/trio/trionan.c: 
	* glib/trio/triostr.c: 
	* glib/trio/trio.c: Include glibtrio.h

	* glib/gprintfint.h: 
	* glib/trio/trionan.c: 
	* glib/trio/triostr.c: 
	* glib/trio/trio.c: Include glibtrio.h

Fri Dec 13 17:10:21 2002  Manish Singh  <yosh@gimp.org>

	* glib/gscanner.c (g_scanner_unexp_token): Fix typo. Missing '%'
	in my last commit.

Thu Dec 12 23:08:29 2002  Owen Taylor  <otaylor@redhat.com>

	Fixes from Johannes Stezenbach

	* configure.in: When adding extra libraries to $LIBS for
	tests, always put them at the front, since that's how
	they'll be used in the actual Makefiles.

	* configure.in: Add a couple of missing ','s in AC_LINK_IFELSE()

	* m4macros/glib-gettext.m4: Remove a stray setting of $LIBS.

Thu Dec 12 20:46:26 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Allow not setting glib_cv_long_long_format
	when cross-compiling since we assume other things that
	will cause us to pull in Trio anyways.

	* configure.in: long_long_format is always ll for trio.
	
	* configure.in: Error out if --disable-trio is specified
	but the C library doesn't have the necessary features.

2002-12-13  Matthias Clasen  <maclas@gmx.de>

	* glib/trio/Makefile.am (libtrio_la_LIBADD): Add -lm for pow().

	* tests/string-test.c: Add a test for positional parameters in
	g_snprintf().

Thu Dec 12 14:58:55 2002  Manish Singh  <yosh@gimp.org>

	* configure.in: pull in trio if host printf doesn't have a known
	way of printing 64-bit ints.

	* glib/gmacros.h: remove extra whitespace at the end

	* glib/gscanner.c (g_scanner_unexp_token): use G_GUINT64_FORMAT
	instead of hardcoding "%llu"

	* tests/testglib.c: remove obsolete conditionals using G_HAVE_GINT64,
	we always have it now.

	* tests/type-test.c: same as above, and for G_G[U]INT64_FORMAT as
	well.

Thu Dec 12 13:52:58 2002  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: AC_PREREQ(2.53) here; convinces
	Debian's wrappers to use the right autoconf for atk, etc.
	(Reported by Jody Goldberg)

2002-12-11  Tor Lillqvist  <tml@iki.fi>

	* glib/gtimer.c (g_timer_elapsed): Fix off-by-one error. (#100853)

	* glib/gfileutils.c (g_file_test): Bypass extra test for root on
	Win32.

	* glib/glib.def: Add g_{get,set}_application_name.

Wed Dec 11 17:53:34 2002  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.1.4 ===

	* NEWS: Updates.

Wed Dec 11 17:49:15 2002  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: Unset 
	ac_cv_func_bind_textdomain_codeset before calling
	AC_CHECK_FUNCS(bind_textdomain_codeset) again.

	* configure.in: Remove duplicate call to
	AC_CHECK_FUNCS(bind_textdomain_codeset)

2002-12-11  Pauli Virtanen <pauli.virtanen@hut.fi>

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

Wed Dec 11 17:00:20 2002  Owen Taylor  <otaylor@redhat.com>

	* acglib.m4 (ac_compile): Add GLIB_ASSERT_SET() as
	a helper for adding "must be set when cross-compiling"
	errors.

	* configure.in: For all cached variables without defaults,
	error out if they aren't set.

Wed Dec 11 15:52:01 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Also assume AC_LINK_IFELSE() is
	OK when cross-compiling for the libs checks, and for
	the sched_get_priority_min() check.

	* configure.in: Add cached value glib_cv_use_pid_surrogate.
	
Wed Dec 11 15:10:25 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Factor out repeated thread test into
	a m4_define(); when cross-compiling, assume that 
	AC_LINK_IFELSE() is good enough for thinking that
	-pthread[s] is OK. (More of #58786)

	* m4macros/glib-gettext.m4: Fix typo. (Manish Singh)

Wed Dec 11 14:28:50 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Version 2.1.4, interface age 1.

	* m4macros/glib-gettext.m4: Major rewrite; remove leftovers
	from building intl/, prefer libintl if both libc and libintl 
	have dgettext and libintl also has bind_textdomain_codeset().
	(#70627)

	* configure.in acinclude.m4: Use an include to avoid having 
	to duplicate the gettext macros between glib-gettext.m4
	and acinclude.m4.

	* m4macros/glib-gettext.m4: Do some tricks so that configure.in 
	can use macros under hidden names, but aclocal will still 
	find them when installed.

	* m4macros/glib-gettext.m4: Add AM_GLIB_DEFINE_LOCALEDIR
	to encapsulate install location of catalog files.

	* m4macros/glib-gettext.m4 (AM_GLIB_DEFINE_LOCALEDIR):
	Fix bug where if --prefix wasn't set on the configure line,
	GLib would look for translations in NONE/share/locale.

Wed Dec 11 11:11:44 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/grand.c: Include string.h, supress a warning.

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

	* glib/grand.c (g_rand_int_range): Improve generation of
	pseudo-random integers. (#99720, Morten Welinder <terra@diku.dk>)

	* README.in, docs/reference/glib/running.sgml,
	docs/reference/glib/tmpl/random_numbers.sgml,
	docs/reference/glib/changes.sgml: Added notes about the new
	algorithm.

2002-12-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: use 0 instead of $defattr, as it isn't defined
	anymore on platforms using -pthread and linux, where this is used,
	only uses 0 anyway and not "pthread_attr_default".

Sun Dec  8 23:36:12 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gfileutils.c (g_file_test): Guard against
	the POSIX allowed behavior where access (file, X_OK)
	succeeds for uid==0 when no executable bits are set.

	* glib/gfileutils.c (g_file_test): Add doc notes
	about the possibility of race conditions, and the
	fact that EXISTS and IS_EXECUTABLE give results
	for the real uid not the effective user ID.
	(#81854, Morten Welinder.)

Fri Dec  6 14:34:42 2002  Owen Taylor  <otaylor@redhat.com>

	Avoid literal UTF-8. (Allow it to build with 
	IRIX cc, #72757, Tomas Ogren)

	* tests/patterntest.c (main): Convert literal 
	iso-8859-1 high bit characters in tests to
	string escapes.

	* glib/gunichartable.h glib/gen-unicode-tables.pl:
	Use hex \xMN escapes rather than literal UTF-8
	for casefold tables.

	* configure.in: AC_PREREQ(2.53). needed for recent
	GLIB_SIZEOF() changes.

Fri Dec  6 12:40:00 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/libcharset/Makefile.am (EXTRA_DIST): Don't
	distribute ref-add/del.sed., fixing problem with
	srcdir != destdir. (#99813, Phuc LeHong)

Fri Dec  6 12:31:30 2002  Owen Taylor  <otaylor@redhat.com>
 
 	* configure.in: chmod 0755 scripts in AC_OUTPUT(), since 
 	install -c won't necessarily do that. (#74376, Martin
	Gansser, Joshua Weage)
 
Thu Dec  5 16:05:55 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Use AC_LINK_IFELSE(), not AC_TRY_RUN()
	for va_copy(), __va_copy() checks.

	* configure.in: When there is a reasonable default,
	provide that in the 3rd argument of AC_TRY_RUN(),
	instead of just leaving the 3rd argument empty.

2002-12-05  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strncasecmp): Break long deprecation
	info into two paragraphs.

Thu Dec  5 15:43:46 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Fix multiple problems with the programs
	in the argument of AC_TRY_RUN() having preprocessor
	defines not in the first column.

Thu Dec  5 15:24:14 2002  Owen Taylor  <otaylor@redhat.com>

	Start of fixes for cross-compilation. Based on
	patches from Dimi Shahbaz, Dan Kegel, Johannes Stezenbach,
	Amy Lin. (#58786)

	* configure.in: Don't run the Digital-Unix 4 -std1 check
	when cross_compiling.

	* configure.in: Use AC_TRY_COMPILE() rather than 
	AC_TRY_RUN() for inline checks. (Daniel Egger)

	* configure.in: use AC_CHECK_SIZEOF rather than
	GLIB_SIZEOF for size_t. Remove unused checks for
	size of ptrdiff_t/intmax_t.

	* acglib.m4: Resync GLIB_SIZEOF of to the current
	AC_CHECK_SIZEOF, which handles cross-compilation.

	* acglib.m4: Remove no longer needed GLIB_SYSDEFS(),
	add GLIB_CHECK_VALUE() as a wrapper around the
	amazing _AC_COMPUTE_INT() autoconf 2.5x internal.

	* configure.in: Redo the POLL* value checks in a
	cross-compilation friendly way.

Thu Dec  5 15:28:37 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gtimer.c: Include glibconfig.h early so
	that we include <windows.h> when needed.

	* glib/gstrfuncs.c: Fix typo.

Tue Dec  3 21:10:28 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Add 3rd argument to remaining AC_DEFINES(),
	so we can get rid of acconfig.h. (#76334, Daniel Egger)

	* acconfig.h: Removed.

Tue Dec  3 20:22:27 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/*.c: Patch from Sven Neumann to make the
	include order consistent. (#71704)

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

	* configure.in: Check that strlcpy behaves as per the OpenBSD 
	man page before wrapping it.  (#53933)

2002-12-03  Frederic Crozat  <fcrozat@mandrakesoft.com>

	* glib/gunicollate.c: (g_utf8_collate_key):
	Fix typo from previous commit

Tue Dec  3 01:05:00 2002  James M. Cape  <jcape@ignore-your.tv>

	* glib/gunicollate.c (g_utf8_collate, g_utf8_collate_key):
	Check for NULL before doing anything.

Mon Dec  2 16:34:13 2002  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.1.3 ===

	* NEWS: Updated.

	[ Unmerged change from stable from May 16 ]

	* autogen.sh: Remove check for GNU gettext, since it
	was causing problems for Solaris CVS builds.
	(#81885, Hidetoshi Tajima.)

Tue Nov 26 09:51:43 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_strchomp): Avoid non-ANSI pointer
	comparison. (#54344, Morten Welinder)

	* tests/strfunc-test.c (main): Add tests for strchomp().

2002-11-30  Ole Laursen  <olau@hardworking.dk>

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

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

	* glib/gstrfuncs.c (g_ascii_strtoull): It is a 2.2 addition.

	* glib/gtimer.c (g_time_val_add): Adjust to changed parameter names.

	* glib/gutils.c (g_get_application_name): Mark as 2.2. addition.

	* glib/gstrfuncs.c (g_ascii_strtoull): Mark as 2.0.7 addition. 

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

	* glib/gutils.c:
	* glib/gtree.c: 
	* glib/gstring.c: 
	* glib/gstrfuncs.c: 
	* glib/giochannel.c: Move some docs inline, and add deprecation
	information. To see the list of affected functions, grep for
	"Deprecated:". 

	* configure.in: Fix the definitions around printf: either we use
	system printf in which case HAVE_VASPRINTF, HAVE_C99_VSNPRINTF and
	HAVE_UNIX98_PRINTF have already been determined by earlier tests,
	or we use the included printf, in which case we know that these
	three can be defined as 1.  (#99826)

	* glib/gutf8.c (g_utf8_strreverse): 
	* glib/gstrfuncs.c (g_str_has_suffix): 
	(g_str_has_prefix): 
	* glib/gprintf.c (g_printf): 
	(g_fprintf): 
	(g_sprintf): 
	(g_vprintf): 
	(g_vfprintf): 
	(g_vsprintf): 
	* glib/gmarkup.c (g_markup_parse_context_get_element): 
	Mark as 2.2 API additions.

	* configure.in: Fix the gtk-doc version check.

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

	* glib/gmessages.h: Use G_LIKELY without surrounding parentheses 
	in g_assert() and g_return_[val]_if_fail() so that we always trigger
	the gcc warning about "assignment used as truth value".

	* glib/gmacros.h: Always put parentheses in G_LIKELY and G_UNLIKELY.

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

	* glib/gmessages.h: Only use G_LIKELY in g_assert() and 
	g_return_[val]_if_fail() if it is actually doing something.

2002-11-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/grand.c, gthread/gthread-impl.c, tests/rand-test.c: 
	Changed the seeding algorithm. Old behaviour can be achived by
	setting envvar G_RANDOM_VERSION to "2.0". (#99262)

	* docs/reference/glib/glib-docs.sgml,
	docs/reference/glib/Makefile.am: Renamed
	docs/reference/glib/changes-2.0.sgml to
	docs/reference/glib/changes.sgml and added section for changes
	from 2.0 to 2.2 (Also corrected 1.0 to 1.2).

	* README.in, docs/reference/glib/running.sgml,
	docs/reference/glib/tmpl/random_numbers.sgml,
	docs/reference/glib/changes.sgml: Added notes about the new
	seeding algorithm.

	* configure.in: Make CPPFLAGS, not CFLAGS, include
	G_THREAD_CFLAGS. CFLAGS is used while linking too and thus GLib
	programs would link to the threads library on some platforms. Also
	fixed a bug manifesting through this change. (#77981)

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

	* glib/gmacros.h: Fix the non-gcc-3.x definitions of G_LIKELY 
	and G_UNLIKELY.  (Reported by Dan Mills)

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

	* glib/gfileutils.c (g_build_path): 
	(g_build_filename): Document that the varargs must be 
	NULL-terminated. (#99510)

	* glib/gmessages.h (g_assert): 
	(g_return_if_fail): 
	(g_return_val_if_fail): Remove the (no longer effective) empty
	if-branch.

	* glib/gmacros.h: Change the definition of G_LIKELY, so that
	g_return_if_fail() and friends still trigger a gcc warning if
	the expr is an assignment. 

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

	* configure.in: Generate docs/reference/*/version.xml.

	* glib/gdir.h: Add Copyright notice.

2002-11-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Fixed typo: PTHREAD_PRIO_MIN ->
	PTHREAD_PRIO_MAX. (Laurent Vivier, #99293)

Fri Nov 22 09:39:09 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gmacros.h: Remove broken G_HIDDEN_SYMBOL
	definition which wasn't supposed to be committed
	at all.

Thu Nov 21 16:19:21 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/ghash.c: Patch from Morten Welinder to 
	make ghash.c properly obey DISABLE_MEM_POOLS. (#96600)

Thu Nov 21 14:09:44 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gmacros.h: Add G_GNUC_DEPRECATED. (Tom Tromey,
	#87969)

2002-11-21  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Update to match what is currently produced by
	autotools.

	* configure.in: Remove superfluous spaces on two shell variable
	assignment lines. Don't define HAVE_GOOD_PRINTF as 0 if we don't
	have a good printf, it is tested with #ifdef.

	* glib/glib.def: Add new functions.

	* glib/Makefile.am: If !HAVE_GOOD_PRINTF, add libtrio.la to LIBADD
	and DEPENDENCIES.

	* glib/glib.rc.in
	* gmodule/gmodule.rc.in
	* gobject/gobject.rc.in
	* gthread/gthread.rc.in
	* {glib,gmodule,gobject,gthread}/makefile.{mingw,msc}.in:
	Hardcode 2.0 in the names, as that is what Makefile.am does.

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

	Include a printf implementation supporting C99 snprintf and SUS
	positional parameters:  (#79488)
	
	* glib/gstrfuncs.c:
	* glib/gspawn-win32.c:
	* glib/gscanner.c:
	* glib/gconvert.c: 
	* glib/gbacktrace.c: Use _g_printf wrappers. 

	* glib/gutils.c (g_vsnprintf): Simplify, since we can assume C99
	snprintf semantics now.

	* glib/gmessages.c (printf_string_upper_bound): No longer needed,
	since we can assume C99 snprintf semantics now.
	(g_logv): Simplify.
	
	* acinclude.m4 (AC_FUNC_PRINTF_UNIX98): New macro to check wether
	printf supports SUS positional parameters.

	* configure.in: New option --enable-included-printf to force
	compilation of trio; otherwise trio is compiled if the system
	printf misses either C99 snprintf semantics of SUS positional 
	parameters.

	* glib/Makefile.am (SUBDIRS): Conditionally compile trio.
	(libglib_2_0_la_SOURCES): Add gprintf.c and gprintfint.h.
	(glibsubinclude_HEADERS): Add gprintf.h.

	* glib/gprintfint.h: New private wrapping either system printf
	or trio printf variants in _g_printf wrappers for use inside glib.

	* glib/gprintf.h: New public header declaring g_printf variants.
	* glib/gprintf.c: Corresponding implementations.

	* glib/trio/*: New directory, containing the trio-1.9 sources. 

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

	* glib/gmessages.h (g_return_if_fail): 
	(g_return_val_if_fail): Use G_LIKELY.  (#69022)

	* glib/gmacros.h (G_LIKELY): 
	(G_UNLIKELY): New macros for hinting the compiler about the
	expected result of expressions. For gcc 3.x, define these
	using __builtin_expect.  (#69022)

Tue Nov 19 14:38:18 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_ascii_strtoull): Fix 
	strtull/strtoull type in docs (#99012, Morten
	Welinder.) Add copyright information for code
	taken from GNU libc.

2002-11-18  Tor Lillqvist  <tml@iki.fi>

	* glib/gspawn-win32.c (do_spawn_with_pipes): Do handle
	G_SPAWN_DO_NOT_REAP_CHILD after all, similarily as on Unix. If the
	flag is not set, don't call DuplicateHandle() on the handle
	returned by the helper process, and set the "child pid" returned
	to the called to zero. Close the handle to the helper process in
	all cases.

	* glib/gspawn.c (g_spawn_async_with_pipes): Document Windows
	behaviour of G_SPAWN_DO_NOT_REAP_CHILD.

2002-11-18  Tor Lillqvist  <tml@iki.fi>

	[Win32] Fix the asynchronous g_spawn* to return the process handle
	of the started program properly. (Note: not the process id. The
	spawn*() functions in the C runtime return the created process's
	handle. There doesn't seem to be any way to get the process id of
	a child process if you have the handle. But then, the process
	handle usually is more useful anyway.)

	* glib/gspawn-win32-helper.c (WinMain): If the spawning of the
	child process succeeded, and if asynchronous spawn (P_NOWAIT),
	write the result handle up to the parent process, waiting to read
	it in do_spawn_with_pipes().

	* glib/gspawn-win32.c (do_spawn): Use return value from spawning
	the helper. If it is -1 the helper wasn't found or couldn't be run
	for some reason. Otherwise it is the helper's process handle.

	(g_spawn_async_with_pipes): Pass the child_pid parameter on to
	do_spawn_with_pipes().

	(do_spawn_with_pipes): Take also a child_pid parameter. If
	do_spawn() returned -1, fail immediately. Otherwise make the
	handle passed to us by the helper process into a handle valid in
	this process by calling DuplicateHandle().

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

	* glib/gspawn-win32.c (g_spawn_async_with_pipes): Ignore the
	G_SPAWN_DO_NOT_REAP_CHILD flag, can't be meaninfully implemented
	on Windows, at least not now. Always pass dont_wait as TRUE to
	do_spawn_with_pipes(). The semantics of the dont_wait parameter is
	very different from the semantics of the intermediate_child
	parameter to fork_exec_with_pipes() in the Unix version. This
	fixes a serious bug, g_spawn_async() in fact behaved
	synchronously.

	(do_spawn_with_pipes, do_spawn): Rename from
	fork_exec_with_pipes() and do_exec(), those names were from the
	Unix bersion, and misleading.

	(close_and_invalidate): Don't try to close invalid fds.

	* glib/gspawn.c (g_spawn_async_with_pipes): Add warning about
	Windows behaviour. There is no fork(), so the child_setup()
	function is in fact called in the parent.
	
	* glib/gspawn-win32-helper.c (WinMain): Insert spaces in argv
	debugging output.

	* tests/spawn-test-win32-gui.c: New file. Test program to be
	linked as a GUI application. Behaves differently depending on how
	invoked (by spawn-test).

	* tests/spawn-test.c (run_tests): On Win32, run the
	spawn-test-win32-gui program, too, in several ways, synchronously
	and asynchronously.

	* tests/Makefile.am: Corresponding change.

Fri Nov  8 19:44:20 2002  Soeren Sandmann  <sandmann@daimi.au.dk>

	* docs/reference/glib/tmpl/arrays.sgml:
	* docs/reference/glib/tmpl/arrays_byte.sgml:
	* docs/reference/glib/tmpl/arrays_pointer.sgml:
	* docs/reference/glib/tmpl/date.sgml:
	* docs/reference/glib/tmpl/linked_lists_double.sgml:
	* docs/reference/glib/tmpl/linked_lists_single.sgml:
	* docs/reference/glib/tmpl/main.sgml:
	* docs/reference/glib/tmpl/queue.sgml:
	* docs/reference/glib/tmpl/random_numbers.sgml:
	* docs/reference/glib/tmpl/relations.sgml:
	* docs/reference/glib/tmpl/scanner.sgml:
	* docs/reference/gobject/tmpl/gtype.sgml:
	* docs/reference/gobject/tmpl/value_arrays.sgml glib/garray.h:
	* glib/gdate.h glib/giochannel.h glib/glist.h glib/gmain.c:
	* glib/gmain.h glib/gqueue.c glib/gqueue.h glib/grand.c glib/grand.h:
	* glib/grel.h glib/gslist.h glib/gtimer.h gobject/gvaluearray.h:

	Trivial s/foo/foo_/ fixes to make <glib.h> includable with
	-Wshadow without warnings (#91680)

Thu Nov  7 19:32:26 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gutils.[ch] (g_set/get_application_name): 
	Patch from Havoc Pennington to add functions for 
	setting and getting a human readable application
	name.

	* configure.in: Up to version 2.1.3, since we'll
	need to depend on last addition for GTK+.

2002-11-06  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add g_main_thread_init.

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

	* glib/gstrfuncs.c (g_str_has_suffix): 
	(g_str_has_prefix): Minor doc markup fix.

Mon Nov  4 10:45:48 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Add -DG_DISABLE_CAST_CHECKS for 
	everything but --enable-debug.

	* configure.in: Require pkg-config 0.14. (#97553)

Mon Nov  4 14:41:48 2002  Owen Taylor  <otaylor@redhat.com>
 
 	* glib/gbsearcharray.c: Include config.h
 	so DISABLE_MEMPOOLS actually has an effect.
 	(#96437, Morten Welinder)
 
 	* tests/uri-test.c: Include <config.h>

2002-11-03  Dmitry G. Mastrukov  <dmitry@taurussoft.org>

	* configure.in: Added Belarusian to ALL_LINGUAS

2002-11-02  Daniel Elstner  <daniel.elstner@gmx.net>

	* glib/giochannel.c (g_io_channel_write_chars): Fix left_len
	calculation in the from UTF-8 to UTF-8 case: left_len should
	be the number of bytes left in the input buffer rather than
	channel->write_buf. (#96373)

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

	* configure.in (G_MODULE_LDFLAGS): Don't set on Win32, only causes
	trouble.
	
	* glib/gmain.c (g_poll): Fix for bug reported by Herman Bloggs
	(http://mail.gnome.org/archives/gtk-devel-list/2002-October/msg00101.html)
	and others. We waited for events only for GPollFDs whose events
	field had G_IO_IN set. We need to wait also for events for
	GPollFDs that have just G_IO_OUT set. Non-blocking sockets in the
	process of being connect()ed are one such case. Also silence a
	couple of gcc warnings.

Fri Oct 18 13:41:30 2002  Manish Singh  <yosh@gimp.org>

	* glib/giochannel.c (g_io_channel_read_line_backend): avoid
	creating negative values out of unsigned values using MAX,
	check to see if the result would be positive before doing
	the calculation.

Tue Oct 15 15:28:47 2002  Manish Singh  <yosh@gimp.org>

	* tests/iochannel-test.c: use gsize instead of int where appropriate
        (64-bit cleanliness fix). Removed leftover line_term cruft.

Tue Oct 15 15:07:45 2002  Manish Singh  <yosh@gimp.org>

	* gmodule/Makefile.am gobject/Makefile.am gthread/Makefile.am:
	add -DG_DISABLED_DEPRECATED

	* tests/gio-test.c tests/mainloop-test.c tests/string-test.c
	tests/testglib.c test/tree-test.c tests/unicode-collate.c
	tests/unicode-normalize.c: Deprecation cleanup

Mon Oct 14 15:51:05 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gdate.c (g_date_fill_parse_tokens): Fix a memory
	leak. (#94550, Sebastian Rittau)

Mon Oct 14 15:36:11 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gcompletion.[ch] (g_completion_complete): Make
	prefix argument const. (#91662, Gustavo Carneiro) 

Mon Oct 14 15:32:14 2002  Owen Taylor  <otaylor@redhat.com>
 
 	* tests/mainloop-test.c (adder_response): Fix a minor memory
 	leak.
 
Sat Oct 12 21:30:41 2002  Tim Janik  <timj@gtk.org>

	* merged up from glib-2-0:

        * glib/gstrfuncs.c (g_ascii_strtod): fix comment.
        (g_ascii_strtoull): new function, acting like strtoull(3) in the C
        locale.

        * glib/gscanner.[hc]: fix 32bit issues with integer parsing and
        support storing 64bit values in GTokenValue by
        using g_ascii_strtoull().

Sat Oct 12 12:34:22 2002  Soeren Sandmann  <sandmann@daimi.au.dk>

	* glib/gtree.c (g_tree_search), glib/gspawn.c
	(g_spawn_async_with_pipes): 

	Documentation fixes: #71778, Owen Taylor; #85095, Bill Janssen,
	Owen Taylor. 

Thu Oct 10 23:27:02 2002  Tim Janik  <timj@gtk.org>

        * glib/gscanner.c (g_scanner_msg_handler): if input_name is NULL,
        print out "<memory>" instead of completely skipping input specification
        and thusly loosing error line information.

Sun Sep 29 12:15:44 2002  Manish Singh  <yosh@gimp.org>

	* tests/mainloop-test.c: use gsize instead of int where appropriate
	(64-bit cleanliness fix)

2002-09-29  Tor Lillqvist  <tml@iki.fi>

	* configure.in: Instead of forcing -fnative-struct into CFLAGS
	when using gcc for Win32, check for gcc version 3.x which uses
	-mms-bitfields instead. Also check if either of these switches is
	actually available at all, and warn if not. Thanks to Soren
	Andersen for the inspiration.

	* HACKING: Say we require autoconf 2.52 as that is what
	configure.in does.

2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
	* glib/gspawn.c (fork_exec_with_pipes) : when the child fails
	we need to reap it to avoid a zombie. This would
	happen in case of g_spawn_sync. Fixes #92658

2002-09-20  Matthias Clasen  <maclas@gmx.de>

	* glib/gscanner.c (g_scanner_msg_handler): Don't print
	scanner->input_name when it is NULL.  (#93752)

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

	* autogen.sh: automake 1.4

2002-09-01  Soeren Sandmann  <sandmann@daimi.au.dk>

	* docs/reference/glib/tmpl/datalist.sgml, glib/gmain.c:

	Documentation fixes: (#75255, Martin Schulze; #76104, Daryll Strauss)

2002-08-26  Tor Lillqvist  <tml@iki.fi>

	* configure.in (G_LIBS_EXTRA): Don't link with -lwsock32 on
	Cygwin (#91696, Masahiro Sakai).

Tue Aug 20 16:01:03 2002  HideToshi Tajima  <hidetoshi.tajima@sun.com>

	* glib/gconvert.c (strdup_len): validate 'len' argument properly
	for the case that input string is not null-terminated. (#91222)

2002-08-10  Gustavo Noronha Silva  <kov@debian.org>

	* configure.in: added pt_BR to ALL_LINGUAS

2002-08-07  Matthias Clasen  <maclas@gmx.de>

	* glib/gmarkup.c (g_markup_parse_context_get_element): 
	Use g_return_val_if_fail, no g_return_if_fail.

2002-08-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthread.c: Set the normal PID surrogate priority according
	to getpid() to avoid errors for niced processes. (#86116)

	* gthread/gthread-impl.c, gthread/gthread-posix.c,
	gthread/gthread-solaris.c: Do the same for the posix/dce
	implementation. Solaris still needs to set priority of the main
	thread, because all unbound threads will schedule according to
	that value and it defaults to 0 (the minimal value). 

	* glib/gmain.c: Factor out g_main_context_init_pipe from
	g_main_context_new to initialize the wakeup pipe of a
	context. Call that function from g_main_context_new if threads are
	initialized and for all contexts when threads are initialized
	in g_main_thread_init. (#86872) 

	* gthread/gthread-impl.c: Call g_main_thread_init. (#86872) 

Thu Jul 25 14:23:15 2002  Owen Taylor  <otaylor@redhat.com>

 	* glib/gfileutils.c: Clarify the behavior of g_build_path()
 	for empty elements and for leading and trailing copies
 	of the separator in the docs.
 
 	* glib/gfileutils.c: Fix problems with leading elements
 	consisting only of "/" characters. (#85928, Guillaume Chazarain)
 
 	* tests/strfunc-test.c (main): Add more test cases
 	for g_build_filename().
 
2002-07-26  Matthias Clasen  <maclas@gmx.de>

	* glib/gunicode.h: 
	* glib/gutf8.c (g_utf8_strreverse): New function to revert
	a utf8 string.
	* glib/gpattern.c (g_utf8_reverse): Gone, replaced by 
	g_utf8_strreverse.  (#87725)

Thu Jul 25 20:57:20 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_channel_read_line): Fix 
	docs for @str_return to conform to the main docs
	and the implementation as to whether the terminator
	is included. (#87964, Jacob Berkman)

Thu Jul 25 19:52:41 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/guniprop.c (real_tolower): Handle the 
	end of the string properly when max_len is set.
	(#88545, Morten Welinder.) Rename the next_t
	variable to next_type to make cc-mode happy.

	* glib/gconvert.c (g_iconv_open): Fix missing
	label from previous commit.

Thu Jul 25 19:41:03 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_channel_get_flags): Fix 
	incorrect return value in g_return_val_if_fail 
	(#85545, David L. Cooper II)

Thu Jul 25 19:12:43 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_channel_set_encoding): Clarify
	that only one of the conditions listed in the docs
	need to be true, not all of them. (#87176,
	Sebastian Rittau)

	* glib/giochannel.c (g_io_channel_read_line): Fix 
	description of the return value. (#87754, Manuel Clos)

Thu Jul 25 19:02:53 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c (g_timeout_add): Remove reference
	in the docs to @notify parameter. (#87768,
	Manuel Clos)

Thu Jul 25 17:57:07 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gconvert.c (g_iconv_open): Document the
	(GIConv)-1 return value on failure. (#87559, 
	Jarek Dukat)

	* glib/gconvert.c (g_iconv_open): Fix potential
	problems with the assumption that (GIConv)(iconv_t)-1
	is the same as (GIConv)-1.
	
2002-07-15  Matthias Clasen  <maclas@gmx.de>

	* glib/gmarkup.h: 
	* glib/gmarkup.c (g_markup_parse_context_get_element): New
	function to get the currently open element.  (#70448)

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

	* tests/*.c: Added #undef G_DISABLE_ASSERT and #undef G_LOG_DOMAIN
	throughout the files, which didn't already have them. (#87312)

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

        * configure.in: Made the thread flags determination tests first
	check for the canonical form -pthread[s], then for other
	possibilities. Also recognize some more platforms. Modeled after
	patch from Miroslaw Dobrzanski-Neumann <mne@mosaic-ag.com>
	(#77981).
	
	* configure.in: Fixed bugs in posix thread priority
	resolution. Also added AIX priorities. Fix from
	Laurent Vivier <Laurent.Vivier@bull.net>. (#82599)
	
	* gthread/gthread-solaris.c: Use thr_min_stack() instead of
	sysconf (_SC_THREAD_STACK_MIN). if stack_size is 0 on entry to
	g_thread_create_solaris_impl, also pass 0 to thr_create. Otherwise
	the stack might be to small for any nontrivial thread. Discovered
	on intel-solaris by Rajkumar Sivasamy <rajkumar.siva@wipro.com>.

2002-07-03  Anders Carlsson  <andersca@gnu.org>

	* configure.in: Add a forgotten trailing ` in the 
	GLIB_BINARY_AGE expression. Also fixup LT_CURRENT.

2002-07-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Set binary age to 0 to make it compile.

	* configure.in: Improve checks for dce/posix threads to also do
	the right thing, if the thread functions are not declared in
	pthread.h. Idea from Miroslaw Dobrzanski-Neumann
	<mne@mosaic-ag.com> in #77981.

2002-07-01  Anders Carlsson  <andersca@gnu.org>

	* configure.in: Up version to 2.1.0.

2002-07-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/garray.h: Add parenthesis to protect macro
	argument. Spotted by Sam Couter <sam@topic.com.au>. (#86826)

2002-06-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gmessages.h (g_assert, g_assert_not_reached,
	g_return_if_fail, g_return_val_if_fail): In case of
	G_DISABLE_ASSERT replace "G_STMT_START{ }G_STMT_END" with
	"G_STMT_START{ (void)0; }G_STMT_END", because the former chokes
	gcc prior to 3.0. (#86664)

2002-06-26  Yanko Kaneti <yaneti@declera.com>

	* configure.in: (ALL_LINGUAS) Added Bulgarian (bg).

Thu Jun 13 16:12:04 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c (struct _GTimeoutSource): Make 
	interval unsigned to match g_timeout_source_new().
	(#82624, Tim Janik.)

	* glib/gmain.c (g_timeout_prepare): Add some
	extra gymnastics to avoid signed/unisgned integer
	overflows.

Thu Jun 13 15:57:46 2002  Owen Taylor  <otaylor@redhat.com>

	* INSTALL.in: Add a note about the deficiency
	of Tru64 iconv. (#81699, Manuel Op de Coul)

Tue Jun 11 17:03:39 2002  Owen Taylor  <otaylor@redhat.com>

	* tests/patterntest.c (test_compilation)
	* glib/gmem.c (profiler_try_realloc): A couple
	of 64-bit printf format fix from George Lebl.
	(#82817)

	* glib/gconvert.c (open_converter): Fix gsize/gint
	mixup for g_iconv() arguments. (#83270,
	David L. Cooper II)

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

	* glib/gwin32.c (g_win32_get_package_installation_directory):
	Replace homegrown "hash" entity by standard ISO entity "num".

2002-05-26  Matthias Clasen  <maclas@gmx.de>

	* glib/gmain.c: Remove references to nonexisting functions 
	g_source_set_callback_closure(), g_source_poll(), g_source_add()
	from docs.

	* glib/gdir.c (g_dir_open): Typo fix in docs.

	* glib/gasyncqueue.c (g_async_queue_lock):
	(g_async_queue_unref_and_unlock): Fix markup to avoid erroneous 
	<link>s in docs.

	* glib/gwin32.c: Escape #'s leading to erroneous <link>s in docs.

	* glib/gtree.c: Replace some occurances of Gtree by GTree in docs.

	* glib/gstring.c (g_string_insert_unichar): Typo fix in docs.

2002-05-23  Havoc Pennington  <hp@redhat.com>

	* glib/gspawn.c (fork_exec_with_pipes): on success, close the
	pipes from the child. Fix from Tim.

2002-05-22  jacob berkman  <jacob@ximian.com>

	* m4macros/glib-gettext.m4 (AM_GLIB_WITH_NLS): fix tyop

Wed May 22 15:40:47 2002  Owen Taylor  <otaylor@redhat.com>

	* README.in: Remove notes about now-fixed-bugs.

	* m4macros/glib-gettext.m4 acinclude.m4: Get rid
	of AC_MSG_NOTICE() usage, since some broken systems
	(Hi Debian!) might not be using autoconf-2.5x for
	downstream packages even though we require it for
	glib itself.

	* INSTALL.in: Add a note about installing extra
	converters for Solaris.

	* glib/gutils.h (g_bit_nth_msf): Fix termination
	condition. (#82582, Paolo Molaro)
 
Tue May 21 15:51:17 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: $with_libiconv, not $with_iconv.

Mon May 20 18:02:46 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Move iconv tests before gettext
	checks. (#81999)

	* m4macros/glib-gettext.m4 acinclude.m4: If we can't
	link to gettext, try adding in -liconv. (#80076,
	Boyd Lynn Gerber)

	* m4macros/glib-gettext.m4 acinclude.m4: Suppress
	warnings about xgettext not being GNU gettext when
	libintl wasn't found at all. 
	(#79016, Andrew P. Lentvorski, Jr.)
	 
2002-05-21  Matthias Clasen  <maclas@gmx.de>

	* glib/gmarkup.c (g_markup_parse_context_parse): Added
	proper support for CDATA sections.

2002-05-20  jacob berkman  <jacob@ximian.com>

	* glib/gdir.c: include sys/types.h before dirent.h to build on
	darwin (fixes #72859)

Mon May 20 15:35:59 2002  Owen Taylor  <otaylor@redhat.com>
 
 	* glib/gfileutils.c (get_contents_regfile): Fix double
 	close of file descriptor on error. (#82139, Wayne Schuller)
 
 	* glib/gspawn.c (close_and_invalidate): Don't close
 	fd's that have already been closed. (Fix from Michael
 	Meeks, #81959)
 
 	* glib/giochannel.c (g_io_channel_close): If not flushing,
 	dump the contents of the write buffers, so we won't try
 	to write them to an invalid fd later. (Patch from Ron Steinke,
 	fixing #78290, Andreas Persenius.)
 
2002-05-18  Matthias Clasen  <maclas@gmx.de>

	* tests/markups/fail-36.gmarkup: 
	* tests/markups/fail-35.gmarkup: 
	* tests/markups/valid-8.gmarkup: 
	* tests/markups/valid-7.gmarkup: 
	* tests/markups/valid-6.gmarkup: 
	* tests/markups/valid-5.gmarkup: New testcases.

	* tests/markup-test.c (passthrough_handler): 
	(text_handler): Don't ignore the text_len parameter.

	* glib/gmarkup.c (find_current_text_end): Don't hang on embedded
	nuls.  (#81977)
	(g_markup_parse_context_parse): Fix passthrough handling to
	correctly skip processing instructions, comments, doctype
	declarations and CDATA marked sections.  (#81977)

Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>

	[merged from stable]

        * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for
        expected_token.

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

	* config.h.win32.in: Match new additions in a configure-produced
	config.h.

	* glibconfig.h.win32.in: gssize and gsize as in a
	configure-produced glibconfig.h.

	* glib/glib.def: Add new functions.

Thu May 16 12:24:00 2002  Owen Taylor  <otaylor@redhat.com>
 
 	* acinclude.m4 m4macros/glib-gettext.m4: Incorporate 
 	AM_LC_MESSAGES, AM_PATH_PROG_WITH_TEST as AM_GLIB_* to avoid 
 	dependencies on gettext m4 files. (#81885, Hidetoshi Tajima.)
	
2002-05-14  Alex Larsson <alexl@redhat.com>
	
	* glib/gstrfuncs.c: 
	* glib/gstrfuncs.h:
	New functions g_str_has_suffix and g_str_has_prefix.
	
	* tests/string-test.c: (main):
	Test the new functions.

Mon May 13 23:20:00 2002  Owen Taylor  <otaylor@redhat.com>

	* autogen.sh (have_gettext): Add a check for GNU gettext.
	(Pointed out by Dan Winship in #59386.)

Mon May 13 11:55:33 2002  Owen Taylor  <otaylor@redhat.com>

	* configure.in acglib.m4: If sizeof(int) == sizeof(long)
	run compilation tests to determine which way gsize should
	be defined. (#74413, reported by Miroslaw Dobrzanski-Neumann)

Mon May 13 11:42:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        * glib/libcharset/*: Update from libcharset CVS.
 	Includes additional encodings for Solaris (#80396,
	Qingjiang Yuan)
 
 	* configure.in: Add getc_unlocked to CHECK_FUNCS().
 
 	* glib/gmessages.c (strdup_convert): If
 	g_convert_with_fallback() fails, print the error
 	message to stderr the first time, then return
 	the original string. (#78197)
 
2002-05-10  Naba Kumar  <kh_naba@users.sourceforge.net>

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

2002-05-08  Michael Natterer  <mitch@gimp.org>

	* configure.in: fixed yesterdays fix for cross compiling: simply
	check the variable "cross_compiling" which gets set by autoconf.

2002-05-07  Matthias Clasen  <maclas@gmx.de>

	* glib/gmarkup.c (unescape_text): Report unfinished entity
	references as errors rather than running into an assert.  (#80441)

2002-05-07  Michael Natterer  <mitch@gimp.org>

	* configure.in: added a new conditional CROSS_COMPILING which
	indicates ($build != $host). If it is set, look for
	glib-genmarshal in PATH. Error out if it was not found.

Tue May  7 11:24:22 2002  Owen Taylor  <otaylor@redhat.com>

	Fixes for #79347, Ron Arts.

	* glib/gqsort.c (g_qsort_with_data): Handle 0 elements,
	don't g_return_if_fail().

	* tests/qsort-test.c (main): Add a 0 element test.

	* glib/garray.c (g_[ptr_]array_sort_with[_data]): 
	Remove invalid assertions that array->pdata != NULL ..
	it's NULL for 0 elements which is a valid case.

Mon May  6 16:00:41 2002  Owen Taylor  <otaylor@redhat.com>

	* glib/gbacktrace.h: Exclude OSF from alpha definition
	of G_BREAKPOINT(), since the assembler apparently
	doesn't support bpt. (#77852, Gareth Pierce) [from stable]

Mon May  6 11:48:08 2002  Owen Taylor  <otaylor@redhat.com>

	[ merged from stable ]
 
 	* Makefile.am (EXTRA_DIST): Add ChangeLog.pre-2-0 (#78641)
 
 	* m4macros/glib-2.0.m4: save CFLAGS/LIBS properly when
 	compiling "what went wrong" test case. (#79330)
 
 	* m4macros/glib-2.0.m4: Remove reference to editing
 	pkg-config script. (From Jim Gettys)
 
 	* configure.in: (Look for dyld interfaces before dlopen()
 	since OS X can have both. Patch from Jacob Berkman, 
 	#80438)
	
2002-05-01  jacob berkman  <jacob@ximian.com>

	* configure.in: fix typo on 64-bit printf formatting string
	configure message (fixes #80389)

2002-04-29  Pablo Saratxaga  <pablo@mandrakesoft.com>

	* configure.in: Added Vietnamese (vi) to ALL_LINGUAS

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

	* glib/gspawn.c (g_spawn_command_line_sync): Add Windows-specific
	note to the gtk-doc comment.

	* glib/gspawn-win32.c: Remove the copy-pasted gtk-doc comment
	blocks. It's enough to have them in gspawn.c.

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

	* gthread/gthread-impl.c (g_thread_init): Fixed typo. (#78985)

2002-04-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthreadpool.c (g_thread_pool_thread_proxy): Unlock the pool
	for all threads leaving it. (#78348)

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

	* tests/patterntest.c: Remove manual UTF-8 -> Latin1 conversion for
	stuff fed to g_print.

2002-04-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* tests/gio-test.c, tests/markup-test.c: Use gsize instead of
	gint. From Miroslaw Dobrzanski-Neumann
	<mne@mosaic-ag.com>. (#77982)
	
2002-04-08  Stanislav Brabec  <utx@penguin.cz> 

        * cs.po: Added Czech (cs) to ALL_LINGUAS.

2002-03-31  Hasbullah Bin Pit <sebol@ikhlas.com>

	* configure.in: Added Malay (ms)to ALL_LINGUAS.

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

	* glib/glib.def: Add g_convert_init.

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.

