Thu Jan 22 15:16:11 2004  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.3.2 ===

Thu Jan 22 13:55:44 2004  Owen Taylor  <otaylor@redhat.com>

	* glib/gtimer.c: Add g_timer_continue().
	(#98536, Tim-Philipp Müller)

	* configure.in: Version 2.3.2, interface age 0.

	* NEWS: tweak, finish.

Thu Jan 22 20:50:55 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gutils.c (g_get_any_init): Protect against
	pw->pw_gecos being NULL.

Thu Jan 22 00:41:34 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gutils.c (g_get_any_init): Don't treat the Win32
	user name like a gecos field, and when extracting a real
	name from a gecos field, replace '&' by the capitalized
	user name (a traditional passwd feature).  
	(#118973, reported by Soeren Boll Overgaard)

Tue Jan 20 22:31:22 2004  Matthias Clasen  <maclas@gmx.de>

	* NEWS: Start of 2.3.2 section.

Fri Jan 16 21:45:56 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gstring.c (g_string_ascii_up): Forgot to fix this one.

Thu Jan 15 22:35:04 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gstring.c (g_string_up): 
	* glib/gstring.c (g_string_down): 
	* glib/gstring.c (g_string_ascii_down): Move initialization of
	variables after g_return_val_if_fail.  (#131564, Olivier Poncet)

Sun Jan 11 16:13:20 2004  Manish Singh  <yosh@gimp.org>

	* configure.in: Add G_MAXSIZE, define in terms of G_MAXUfoo.

	* tests/type-test.c: Add test for G_MAXSIZE.

	* glibconfig.h.win32.in: Cleanup, add some missing bits.

Sun Jan 11 16:05:35 2004  Manish Singh  <yosh@gimp.org>

	* glib/giounix.c: #define _POSIX_SOURCE for SSIZE_MAX. Fixes #128853.

Sat Jan 10 00:11:12 2004  Manish Singh  <yosh@gimp.org>

	* glib/gutils.h (g_bit_nth_lsf,g_bit_nth_msf): 64-bit cleanliness
	fixes.

	* docs/reference/glib/tmpl/misc_utils.sgml: update to reflect the
	above take gulongs now. My docs suck, someone should revisit it.

Fri Dec 19 11:49:21 2003  George Lebl <jirka@5z.com>

        * glib/grand.c
          glib/grand.h (g_rand_new) (g_rand_new_with_seed)
          (g_rand_new_with_seed_array) (g_rand_set_seed_array):  Add
          the init_by_array functionality from the reference implementation
          of the mersenne twister (mt19937ar.c) and change the naming
          to fit with the rest of the grand API.  New functions are
          g_rand_new_with_seed_array, g_rand_set_seed_array.  This is only
          reliable/tested for the 2.2 version of the seeding as that's what
          the reference implementation uses.  Also modify g_rand_new to
          get 4 longs from /dev/urandom since that will always be available
          anyway and we get more entropy and if /dev/urandom is unavailable
          use also 4 longs for seeding using secs, usecs, getpid and getppid.
          For version 2.0 use only a simple seed again but be more careful
          about seeding with secs/usecs in this case.

        * glib/grand.c
          glib/grand.h (g_rand_copy):  Add g_rand_copy function to copy the
          current state of the random number generator.

        * glib/grand.c (g_rand_new):  Add testing for EINTR when reading
          from /dev/urandom

        * tests/rand-test.c: add testing of the array seeding stuff against
          the reference implementation, plus add statistical sanity check
          to see that the values outputted are truly kind of random.  And
          check that g_rand_copy truly copies the state by checking a few
          terms.

Tue Jan  6 15:38:30 2004  Owen Taylor  <otaylor@redhat.com>
 
 	* glib/gutils.h: Check defined (__OPTIMIZE__) not
 	__OPTIMIZE__. (Zack Rusin)
 
2003-12-30  Murray Cumming  <murrayc@usa.net>
  
  	* gobject/glib-mkenums.in: Added a lowercase_name option, to be used
  	next to the enum declaration, where the flag option is already used,
  	when it is not possible to guess where to put the underscores in the
  	_get_type() function name, for instance for GNOMEVFSURIHide.

Fri Dec 26 02:03:58 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/garray.[hc] (g_ptr_array_foreach): New function to
	call a function for each element of a GPtrArray.  (#114790)

	* tests/array-test.c (main): Add a test for g_ptr_array_foreach().

Sun Dec 21 22:57:58 2003  Matthias Clasen  <maclas@gmx.de>

	* m4macros/glib-gettext.m4: Quote macro names to support 
	reading the file multiple times.  (#125537)

Sun Dec 21 22:42:42 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/gmem.c (g_mem_chunk_destroy): Fix the locking of the
	mem_chunks list.  (#127096, Balazs Scheidler)

2003-12-14  Hans Breuer  <hans@breuer.org>

	* glib/gfileutils.c : make g_file_test(,G_FILE_TEST_IS_EXECUTABLE)
	return something useful on win32, too. 

2003-12-13  Hans Breuer  <hans@breuer.org>

	* glib/gconvert.c : get_filename_charset() needs to
	return false for filenames not encoded in utf-8, 
	which is always true on win32

	* glibconfig.h.win32.in : (u)int64 modifier isn't the
	gcc 'll' but always the msvcrt one 'I64'

	* glib/glib.def : updated

Thu Dec 11 10:31:21 2003  Manish Singh  <yosh@gimp.org>

	* glib/gmacros.h: change #elif with no expression to #else in
	G_STRFUNC definition. Thanks to Damien Carbery, fixes #129101.

Mon Dec  8 12:02:40 2003  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.3.1 ===

	* NEWS: Further updates for 2.3.1.

Fri Dec  5 12:09:13 2003  Manish Singh  <yosh@gimp.org>

	* glib/gunidecomp.c (_g_utf8_normalize_wc): fix gint/gsize confusion.

2003-12-04  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gunidecomp.c: Add hangul composition and decomposition to
	unicode normalization. (#100456)

	* tests/unicode-normalize.c: Test hangul.

Tue Dec  2 02:29:41 2003  Matthias Clasen  <maclas@gmx.de>

	Fix for #103710, Mark Jones:
	
	* glib/gtypes.h (G_MAXINT64): Define G_{MIN,MAX,MAXU}INT{8,16,32,64}.
	* configure.in: Don't put G_{MIN,MAX,MAXU}INT64 in glibconfig.h.

Thu Nov 27 17:04:08 2003  Tim Janik  <timj@gtk.org>

	* glib/gstrfuncs.c (g_strconcat): handle NULL arguments
	gracefully.

	* glib/gmacros.h: defined G_STRFUNC, which (pretty) prints the
	current function (since G_STRLOC and G_GNUC_*FUNCTION became
	unusable with gcc-3.0).

Wed Nov 26 16:45:16 2003  Roozbeh Pournader  <roozbeh@sharif.edu>

	* glib/gstrfuncs.c: Fixed a bad pointer comparison in
	g_ascii_strtod that came up in fa_IR locale (#126640, Behdad
	Esfahbod).

	* tests/strtod-test.c: Fixed the tests to catch the above.

Sat Nov 22 14:16:51.15 2003  Andrew Lanoix  <alanoix@umich.edu>

	* glib/giowin32.c: Bind inter-thread comminication 
		sockets to INADDR_LOOPBACK instead of INADDR_ANY.

Thu Nov 20 15:09:40 2003  Manish Singh  <yosh@gimp.org>

	* configure.in: Added G_GSIZE_FORMAT and friends

	* tests/printf-test.c
	* tests/testglib.c
	* tests/type-test.c: Add tests for the above.

Mon Nov 17 17:28:10 2003  Manish Singh  <yosh@gimp.org>

	* tests/thread-test.c (test_g_thread_once): Use GUINT_TO_POINTER
	for g_thread_create data.

Sat Nov 15 23:00:57 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/guniprop.c (g_utf8_casefold): Add a NULL check
	to be consistent with the other g_utf8_ functions.  (#121618,
	Tim-Philipp Müller)

2003-11-15  Tor Lillqvist  <tml@iki.fi>

	* tests/makefile.msc.in: Fix for MSVC build: Skip strtod-test, use
	correct glib libraries, with 2.0 in the names. (#126906, John
	Ehresman)

Sat Nov 15 00:46:14 2003  Matthias Clasen  <maclas@gmx.de>

	* configure.in: Don't blindly set glib_cv_long_long_format to
	"ll" when using the included printf. As long as the native 
	printf supports 64bit printing, use the native format.  
	(#119525, Tor Lillquist)

Fri Nov 14 00:28:46 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/gi18n.h:
	* glib/gi18n-lib.h: Also define bind_textdomain_codeset() in
	the #ifndef ENABLE_NLS case.

Wed Nov 12 15:06:27 2003  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Version 2.3.1, interface age 0.

	* NEWS: Update for 2.3.1.

2003-11-07  Mark McLoughlin  <mark@skynet.ie>

	* glib/gconvert.c: (get_filename_charset): re-work to
	retain a copy of the cached charset rather than the
	actual return value from g_get_charset (which may
	change). Also, re-initialize the cache if it does
	change.	See bug #126454.

Thu Nov  6 00:04:46 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/gconvert.c (get_filename_charset): Replacement for
	have_broken_filenames() which consults the environment variable
	G_FILENAME_ENCODINGS in addition to G_BROKEN_FILENAMES.
	* glib/gconvert.c (g_filename_from_utf8): 
	* glib/gconvert.c (g_filename_to_utf8): 
	* glib/gconvert.c (_g_convert_thread_init): Use
	get_filename_charset() instead of have_broken_filenames().

Wed Nov  5 22:05:19 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/gi18n-lib.h: 
	* glib/gi18n.h: New headers defining common gettext-support
	macros.

	* glib/Makefile.am (glibsubinclude_HEADERS): Add gi18n.h
	and gi18n-lib.h.

	* glib/gstrfuncs.h: 
	* glib/gstrfuncs.c (g_strip_context): Auxiliary function for
	the implementation of Q_().

2003-11-05  Morten Welinder  <terra@gnome.org>

	* glib/garray.c (g_ptr_array_remove_range): Make it compile.
	(#119337, self.)

	* glib/gstring.c (g_string_insert_len): Handle the case where the
	to-be-inserted string is a substring of the target string.
	(g_string_assign): Handle "s = s;".
	(#114260, self.)

Sun Nov  2 01:47:31 2003  Matthias Clasen  <maclas@gmx.de>

	Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
	
	* configure.in (HAVE_INT64_AND_I64): Define for MSVC to 
	include support for printing __int64 with format %I64 in 
	the gnulib printf wrappers. 
	* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64 
	and TYPE_UINT64.
	* glib/gnulib/printf-args.h (struct argument): Add a_int64 and 
	a_uint64 members.
	* glib/gnulib/printf-args.c (printf_fetchargs): Support
	TYPE_INT64 and TYPE_UINT64.
	* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
	modifier and map formats to TYPE_INT64.
	* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
	format modifier I64.
	* glib/gnulib/README: Document the __int64 support.
	
Sat Nov  1 08:45:38 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c (g_main_context_iterate): Set the
	return value from the result of g_main_context_check()
	(after we poll) rather than g_main_context_prepare.
	(#121675, Padraig O'Briain)

Fri Oct 31 00:13:53 2003  Matthias Clasen  <maclas@gmx.de>

	* configure.in: Remove the semicolon from the definition of
	g_once(), so that GPOINTER_TO_INT (g_once (...)) works.

Tue Oct 28 23:38:30 2003  Matthias Clasen  <maclas@gmx.de>

	* tests/printf-test.c: Change the %e tests to not check for
	actual string equality, but rather equality under g_ascii_strtod(),
	since the number of leading digits in the exponent seems to 
	be not exactly prescribed by SUS.

Fri Oct 24 17:09:04 2003  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.3.0 ===

	* NEWS: Small update.

2003-10-24  Tor Lillqvist  <tml@iki.fi>

	* configure.in: Force shared library (DLL) only on Windows.
	(I don't think that is controversial?) Remove unnecessary
	AC_LIBTOOL_WIN32_DLL. Don't use -D_REENTRANT on
	Win32, it is not used by mingw or MSVC headers.

	* config.h.win32.in
	* glibconfig.h.win32.in: Match what configure produces.
	
	* glib/gconvert.c
	* glib/gutils.c: Mark a couple of functions and variables that
	aren't public as static.

	* glib/gnulib/g-gnulib.h: Undef HAVE_SNPRINTF before (re)defining
	it potentially differently, to silence compiler.

	* glib/glib.def: Add some missing entries.
	
	* tests/gobject/Makefile.am (LDADD): Reorder, put libgobject after
	libtestgobject.

	* tests/gobject/ifaceproperties.c (main): NULL-terminate arg list
	to g_object_set() and _get().

Thu Oct 23 12:38:24 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/Makefile.am (dist-hook): Remove 
	and extra backslash.

	* tests/gobject/Makefile.am (EXTRA_DIST): Add 
	testmarshal.list.

	* glib/Makefile.am (libglib_2_0_la_SOURCES): Add
	missing gunicode-private.h.

	* tests/testglib.c (main): Fix a warning.

	* tests/gobject/ifaceinherit.c: Remove check that
	wasn't supposed to work (adding an interface already
	added to the derived class to the base class), 
	fix a bug.

Wed Oct 22 23:41:03 2003  Matthias Clasen  <maclas@gmx.de>

	* NEWS: Update for 2.3.0.

Tue Oct 14 17:44:38 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/ifaceproperties.c: Test for interface
	properties and GParamSpecOverride.

Wed Oct  8 23:40:26 2003  Matthias Clasen  <maclas@gmx.de>

	* glib/gmarkup.c (g_markup_printf_escaped): 
	(g_markup_vprintf_escaped): Document as 2.4 additions.
	(unescape_text): Implement newline and whitespace normalization
	according to the XML specification.  (#123919)
	(g_markup_escape_text): Document whitespace (non)handling.

2003-10-05  Matthias Clasen  <maclas@gmx.de>

	* configure.in: Make the various printf feature test macros
	reflect the system printf, even when using the included printf.
	In particular, don't force HAVE_C99_SNPRINTF, since g-gnulib.h 
	needs that test result.  (#122973)

	* glib/gprintf.c (g_vasprintf): Don't rely on HAVE_VASPRINTF,
	directly check for _g_vasprintf.

	* glib/gprintfint.h (_g_vasprintf): Only define _g_vasprintf()
	if vasprintf() is available.

	* glib/gnulib/printf.c (_g_gnulib_vfprintf): Don't write
	trailing nul to the file. (#122973)

	* acinclude.m4 (AC_FUNC_VSNPRINTF_C99): Make the test 
	detect non-C99-compliance of AIX 5.1 and Solaris 
	vsnprintf().  (#122496)

Thu Oct  2 01:15:46 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/ifacecheck.c: Test case for
	g_type_add_interface_check().

	* tests/gobject/ifaceinit.c: Add #undef G_DISABLE_ASSERT.

Thu Oct  2 01:11:39 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/ifaceinherit.c: Remove some tests that
	were testing things that weren't supposed to work; add
	a test for adding an interface first to the child class,
	then to the parent class.

Thu Oct  2 00:02:55 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/Makefile.am test/gobject/ifaceinherit.c:
	Tests of interface inheritance and overriding.

2003-09-30  Tor Lillqvist  <tml@iki.fi>

	* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
	do_spawn() instead of in do_spawn_with_pipes() so that we can use
	the original argv[0] as the program file name parameter to
	spawnv() in the shortcut (doing without helper process)
	code. Fixes problem if GIMP 1.3 was installed in a path with
	spaces in the name.

Tue Sep 30 15:31:16 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

	* glib/guniprop.c (has_more_above): make the argument const to
	get rid of warning

	* glib/garray.c (g_byte_array_remove_range): insert cast to get
	rid of warning

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

	* tests/testglib.c (main): Use hardcoded name for DLL, as there is
	no reliable way to determine it at compile or run time anyway. 

2003-09-29  Matthias Clasen  <maclas@gmx.de>

	* glib/guniprop.c (g_unichar_get_mirror_char): Add "Since: 2.4" 
	to docs.

Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am:
	Dummy dynamic type module for testing type plugin code
	and dynamic types.

	* test/gobject/defaultiface.c: Test of 
	g_type_default_interface_ref() and friends.

2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt>

    * configure.in: Added lt to ALL_LINGUAS.

2003-09-25  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Remove g_bsearch_array_* entries that don't exist
	any longer. (ABI change?)

Thu Sep 25 15:01:37 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/Makefile.am (SUBDIRS): Add gobject/.

Fri Sep 12 16:26:21 2003  Owen Taylor  <otaylor@redhat.com>

	* tests/gobject/ configure.in: New directory, framework 
	for automated GObject tests.

	* tests/gobject/override.c: Move testoverride.c
	here, automate.

	* tests/gobject/ifaceinit.c: Move testifaceinit.c here.

	* tests/gobject/accumulator.c: Test signal accumulators,
	including g_signal_accumulator_true_handled.

2003-09-12  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gen-unicode-tables.pl: Take a directory where to look for the
	unicode files on the command line instead of 7 individual files.

2003-09-12  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gen-unicode-tables.pl:
	* glib/gunichartables.h:
	* glib/gunicode.h:
	* glib/guniprop.c: Add g_unichar_get_mirror_char. (#114749)

Thu Sep 11 20:11:05 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmarkup.c: Add g_markup_printf_escaped(), 
	g_markup_vprintf_escaped().

	* tests/markup-escape-test.c (main): Test for
	g_markup_escape_text(), g_markup_printf_escaped().

2003-09-10  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gunicodeprivate.h:
	* glib/gunicollate.c:
	* glib/gunidecomp.c:
	* glib/guniprop.c:
	* tests/casemap.txt:
	* tests/gen-casemap-txt.pl: Unicode 4.0 special casing. (#114681)

	* glib/gunicodeprivate.h: Use a private header instead of extern
	function declarations (_g_utf8_normalize_wc,
	_g_unichar_combining_class).

Mon Sep  8 00:31:10 2003  Stefan Westerfeld  <stefan@space.twc.de>

        * glib/gbsearcharray.h: inserted casts for C++.

2003-08-28  Matthias Clasen  <maclas@gmx.de>

	* tests/patterntest.c (verbose): Fix a C99ism.  (#120821, Thomas 
	Klausner)

2003-08-25  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c (read_thread): Avoid UNLOCKing the critical
	section twice, which might cause a hang. (#120653)

	* glib/giowin32.c (g_io_channel_unix_new): Warn if fd is both a
	valid file descriptor and socket.

Mon Aug 25 12:34:36 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmessages.c: Escape control characters in g_logv() output.
	(#108287, Christian Biere)

Mon Aug 25 12:17:20 2003  Owen Taylor  <otaylor@redhat.com>

 	* glib/gmain.c (g_main_context_unref_and_unlock): 
 	When DISABLE_MEM_POOLS is set, loop through and free
 	the poll records explicitely, since g_mem_chunk_destroy()
 	won't do it. (#118121, Morten Welinder)
 
2003-08-22  Samúel Jón Gunnarsson  <sammi@techattack.nu>

	* is.po: Added "is" to ALL_LINGUAS.
	
2003-08-19  Tor Lillqvist  <tml@iki.fi>

	* glib/gmessages.c (g_logv): [Win32] Make the fatal error message
	box easier to notice with MB_SETFOREGROUND. Also use MB_ICONERROR
	to get a nice stop-sign icon.

Tue Aug 19 09:42:06 2003  Owen Taylor  <otaylor@redhat.com>
 
 	* m4macros/glib-gettext.m4: Add $INTLLIBS to $LIBS
 	temporarily, not -lintl. (Problem with fix for 
 	#119171, pointed out by James Henstridge)
 
Tue Aug 19 03:55:29 2003  Tim Janik  <timj@gtk.org>

	* glib/gbsearcharray.h: license change, no restrictions are made
	in the new license at all, the implmentation is simply provided
	"as is" to allow copy-pasting the code into any third-party app.
	naturally, the implementation is self-contained within the header
	file to allow this.
	default to non-shrinking behaviour, allow users to request shrinking
	via G_BSEARCH_ARRAY_AUTO_SHRINK.
	creation, deletion functions are now named g_bsearch_array_create()
	and g_bsearch_array_free(). 
	fixed const in prototypes, removed cruft.
	(g_bsearch_array_insert): take only three arguments, do nothing if the
	node to insert is already there.
	(g_bsearch_array_replace): insert or replace if the node is already
	there.
	(g_bsearch_array_remove): remove nodes by index, the index of a node
	can be found via g_bsearch_array_get_index().
	removed other g_bsearch_array_remove*() variants.
	(g_bsearch_array_lookup): minor optimizations.
	(g_bsearch_array_lookup_sibling): return nodes on mismatches.

	* glib/gbsearcharray.c: removed.

2003-08-16  Tor Lillqvist  <tml@iki.fi>

	Fix #117925 (Dov Grobgeld):

	* glib/gutils.c (g_find_program_in_path, g_basename,
	g_path_get_basename, g_path_is_absolute, g_path_skip_root,
	g_path_get_dirname, g_get_any_init): On Win32, look also for
	slashes ('/') as pathname separators.

	* glib/gfileutils.c (g_file_open_tmp): Ditto. If the template
	contains a pathname separator, include the actual one in the error
	message, instead of always the canonical one.

	(g_build_filename): Separate implementation on Win32 that looks
	for either slash or backslash. Document Unix/Windows differences.

	* tests/testglib.c
	* tests/strfunc-test.c: Test above functionality on Win32.

2003-08-15  Tor Lillqvist  <tml@iki.fi>

	* glib/gmain.c (g_poll): [Win32] Don't exceed handle array
	bounds. Warn if there would be too many handles to wait
	for. (WaitForMultipleObjects() has a relatively low limit of 64
	handles. The Win32 IO channel code should be fixed not to need to
	wait for one handle per file or socket being watched. Later.)

2003-08-13  Tor Lillqvist  <tml@iki.fi>

	* glib/Makefile.am
	* gmodule/Makefile.am
	* gobject/Makefile.am
	* gthread/Makefile.am: Use srcdir also in references to the .def
	files. (#118885, Jeff Bonggren)

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

	* glib/gconvert.c (g_locale_from_utf8): Drop the Win32-specific
	implementation. It used WideCharToMultiByte(), which is broken as
	it stores unconvertable characters as fallback characters
	(question marks) in the destination string without being able to
	tell how much of the conversion succeeded. Using g_convert() like
	on Unix is better and simpler. (#117872)

	(g_locale_to_utf8): No need for the Win32-specific implementation
	here, either.

	(have_broken_filenames): Define as TRUE on Win32.

	(g_filename_to_utf8, g_filename_from_utf8): Drop Win32 ifdefs. As
	have_broken_filenames() now is defined TRUE on Win32, works as
	before.
	
2003-08-11  Matthias Clasen  <maclas@gmx.de>

	* acinclude.m4: Copy newer versions of JH_CHECK_XML_CATALOG and
	JH_PATH_XML_CATALOG from gtk-doc to enable configuring without
	xmlcatalog in PATH.  (#119115) 

2003-08-10  Tor Lillqvist  <tml@iki.fi>

	* glib/gutils.c (g_getenv): Don't use a cache of variable name to
	value mappings on Win32, as that breaks g_setenv() and
	g_unsetenv(). Only call ExpandEnvironmentStrings() if necessary,
	and in that case return a quarkified string. It is still
	questionable how necessary expanding embedded environment variable
	references is. Possibly the whole Win32-specific g_getenv()
	implementation could be removed. (#119520)

2003-08-08  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add g_once_impl.

	* glib/gutils.c (g_setenv): Fix syntax error in the !HAVE_SETENV
	case.

2003-08-08  Matthias Clasen  <maclas@gmx.de>

	* tests/env-test.c (main): Remove a test for getenv() behaviour
	which isn't specified by SUS and doesn't work on Solaris.

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

	* tests/env-test.c: Add tests for '=' in names and values.

	* glib/gutils.c (g_setenv, g_unsetenv): Check that the variable
	name doesn't contain '='. Add a declaration for environ.  (#119338)

	* acinclude.m4: Tighten the snprintf() test to check behaviour on
	zero-size buffers.  (#106091) 

	* tests/patterntest.c: Specify test strings in UTF-8, remove all
	charset conversion. Replace the NOISY define by a cmdline arg
	--noisy.   (#115757) 

Thu Aug  7 15:01:09 2003  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: Set $LIBS to include
	-lintl when checking for dcgettext and 
	_nl_msg_cat_cntr. (Tim Mooney, #119171)

Thu Aug  7 14:15:44 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c (g_idle_source_new): Make the default priority
	for idle sources G_PRIORITY_DEFAULT_IDLE as anybody would
	expect and document that. (#114461, reported by Andy Wingo)

2003-08-06  Noah Levitt  <nlevitt@columbia.edu>

	* tests/casemap.txt:
	* tests/gen-casemap-txt.pl: Add test for special case not at inital
	position in the string, the bug just fixed. (#118957)

2003-08-05  Noah Levitt  <nlevitt@columbia.edu>

	* glib/guniprop.c: Get rid of "len" parameter to output_special_case
	and output_marks, and make them work more like g_unichar_to_utf8,
	fixing a bug in the process. (#118957)

2003-08-05  Hans Breuer  <hans@breuer.org>

	* glib/gnulib/makefile.msc : (new file) for msvc build

	* glib/gnulib/vasnprintf.c : use glib/galloc.h

	* glib/gnulib/printf.h : #include <stdio.h> for FILE*

	* glib/makefile.msc.in : replace trio with gnulib

	* glib/glib.def : updated externals

	* glib/guniprop.c : fix for guniprop.c(582) : error C2082: 
	redefinition of formal parameter 'len'

2003-08-04  Noah Levitt  <nlevitt@columbia.edu>

	* tests/unicode-normalize.c: We do handle > BMP now, so test it.

2003-07-31  Noah Levitt  <nlevitt@columbia.edu>

	* tests/file-test.c: s/g_read_link/g_file_read_link/ (#118727)

2003-07-31  Noah Levitt  <nlevitt@columbia.edu>

	* tests/unicode-encoding.c: Return nonzero exit status if the test
	fails. (#118729) 

2003-07-31  Noah Levitt  <nlevitt@columbia.edu>

	* tests/utf8.txt: Change instances of U+10ffff to U+10fffd, since that
	is the last valid unicode character. Add check that U+10ffff is
	NOTUNICODE. (#118730)

2003-07-30  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gen-unicode-tables.pl:
	* glib/gunibreak.c:
	* glib/gunibreak.h:
	* glib/gunichartables.h:
	* glib/gunicode.h:
	* glib/gunicomp.h:
	* glib/gunidecomp.c:
	* glib/gunidecomp.h:
	* glib/guniprop.c:
	* tests/casefold.txt:
	* tests/casemap.txt:
	* tests/gen-casefold-txt.pl:
	* tests/gen-casemap-txt.pl: Update Unicode data to 4.0. (#107974)

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

	* glib/gspawn-win32.c: When possible, manage without the helper
	process. (Part of the enhancements outlined in #98737.) Speeds up
	GIMP 1.3's first-time-run plug-in query phase a lot.

	Plug a file descriptor (and thus Win32 handle) leak: close the
	read end of the child error report pipe after use.

2003-07-30  Matthias Clasen  <maclas@gmx.de>

	* glib/gutils.c (g_unsetenv): Use same argument name as in header,
	to pacify gtk-doc. 
	(g_getenv): Move docs inline, add comment about lifespan of return
	value. 

	* glib-2.0.pc.in (Libs): Remove forgotten @TRIO_LIBS@.  (#118616,
	Noah Levitt) 

	* glib/gfileutils.[hc]: Rename g_read_link() to g_file_read_link()
	to better match the remaining file utilities in the g_file_
	namespace and to better separate it from readlink(). This is
	hopefully no problem as the function is just 2 days old.

2003-07-29  Matthias Clasen  <maclas@gmx.de>

	* glib/gqsort.[hc] (g_qsort_with_data): 
	* glib/gconvert.[hc] (g_filename_to_uri, g_filename_from_uri): 
	* glib/gfileutils.[hc] (g_mkstemp, g_file_open_tmp): Use gchar,
	gint, gsize instead of char, int, size_t in the interface for
	consistency.  (#118567) 

	Replace trio printf() by gnulib vasnprintf():  (#101874)
	
	* configure.in: Define HAVE_LONG_LONG_FORMAT if system printf
	understands %llu; rename enable_trio to enable_included_printf;
	add misc. tests needed for gnulib vasnprintf(); define
	G_GINT{16,32,64}_MODIFIER in glibconfig.h.

	* acinclude.m4: Misc tests needed for gnulib vasnprintf():
	AC_FUNC_SNPRINTF_C99, bh_C_SIGNED, jm_AC_TYPE_LONG_LONG, 
	gt_TYPE_LONGDOUBLE, gt_TYPE_WCHAR_T, gt_TYPE_WINT_T,
	gt_AC_TYPE_INTMAX_T, jm_AC_HEADER_STDINT_H,  
	jm_AC_HEADER_INTTYPES_H. 

	* glib/Makefile.am: Replace TRIO_SUBDIR by PRINTF_SUBDIR and
	trio_libtrio_la by printf_la.  

	* glib/gprintfint.h: Include gnulib/printf.h and use _g_gnulib_
	functions instead of _g_trio_ functions. 

	* glib/trio/*: Removed

	* glib/gnulib/*: vasnprintf() implementation from gnulib, patched
	to live in the _g_gnulib namespace, use g_malloc instead of
	malloc, and support long long printing even if system printf
	doesn't. For more details, see glib/gnulib/README.
	
	* tests/printf-test.c: Add tests for 64 bit printing.

2003-07-28  Matthias Clasen  <maclas@gmx.de>

	* glib/gfileutils.h: 
	* glib/gfileutils.c: New function g_read_link(). (#72545)

	* configure.in: Check for setenv, unsetenv, readlink and symlink.

	* tests/file-test.c (test_readlink): Test for g_read_link() (only
	on systems supporting symbolic links).

	* tests/env-test.c: New test for g_{get,set,unset}env().

	* tests/Makefile.am (test_programs): Add env-test.

	* glib/gutils.h: 
	* glib/gutils.c: New functions g_setenv() and g_unsetenv().  (#100763)

2003-07-26  Matthias Clasen  <maclas@gmx.de>

	* tests/printf-test.c: New test, tests printf behaviour. This was
	already mentioned in Makefile.am by accident.

	* tests/file-test.c: New test, currently contains mkstemp tests
	copied from testglib.c. 

	* tests/Makefile.am (test_programs): Add file-test.

	* glib/gprintf.c: Fix all g_return_val_if_fail () checks to return
	-1 on error to match the behaviour of the stdio printf() family.

	* glib/garray.h: 
	* glib/garray.c (g_{,byte,pointer}_remove_range): New functions to
	remove a range of elements from an array.  (#94879, Nalin Dahyabhai)

	* glib/gmessages.c (g_logv): Remove the 1024 char limit in the
	common (non-recursive) case.

2003-07-25  Matthias Clasen  <maclas@gmx.de>

	* glib/gwin32.c: 
	* glib/gutf8.c: 
	* glib/gunicollate.c: 
	* glib/gtree.c: 
	* glib/gspawn.c: 
	* glib/gmain.c: 
	* glib/giochannel.c: 
	* glib/gfileutils.c: 
	* glib/gerror.c: 
	* glib/gconvert.c: 
	* glib/gasyncqueue.c: 
	* glib/gmem.c: Remove some explicit Docbook markup which is no
	longer necessary since gtk-doc does the right thing.

	* glib/gutf8.c (g_utf8_get_char_validated): Work around gtk-doc stupidity.

2003-07-20  Hans Breuer  <hans@breuer.org>

	* glib/trio/makefile.msc : (new file) for msvc build

	* glib/glib.def : removed some duplicated entries

	* glib/gscanner.c : add same workaround for MSVC(5.0)
	which does not allow to cast an uint64 to float.
	Same as in gvaluetransform.c
	Also move #include <io.h> behind inclusion of "glib.h"
	which defines the needed G_OS_WIN32

	* glib/makefile.msc.in : added gprintf.obj, trio\trio.lib
	as well as shell32.lib

	* tests/spawn-test.c : include <io.h> on win32

2003-07-12  Matthias Clasen  <maclas@gmx.de>

	* glib/gprintf.c: Doc additions.

2003-07-10  Joel Brich <joel.brich@laposte.net>

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

Wed Jul  9 16:27:26 2003  Manish Singh  <yosh@gimp.org>

	* glib/gmain.c (g_main_context_unref_and_unlock): check if
	context->poll_chunk is set before trying to destroy it. For example,
	this can happen if no sources are added to a context before it is
	freed.

2003-07-09  Morten Welinder  <terra@gnome.org>

	* glib/gprintf.c (g_vasprintf): Avoid var declaration after
	statement.

2003-07-09  Matthias Clasen  <maclas@gmx.de>

	Support for one-time initialization functions.  (#69668, Sebastian
	Wilhelmi) 

	* configure.in: Check whether double checked locking is safe,
	define g_once() in glibconfig.h accordingly.
	* glib/gthread.h: Add GOnce, GOnceStatus, G_ONCE_INIT and g_once_impl.
	* glib/gthread.c (g_once_impl): Fallback implementation using a
	mutex if double checked locking is unsafe.
	* tests/thread-test.c: Add tests for g_once().

2003-07-02  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strfreev): Move docs inline, document behavior 
	for NULL. (#116439, Steve Chaplin)

2003-06-25  Abigail Brady  <morwen@evilmagic.org>
 
 	* glib/gconvert.c (g_convert_with_fallback): Use C99 style \uxxxx
 	and \Uxxxxyyyy escapes instead for fallback instead of perl-style
 	\X{xxxx} ones, fixing bug #114284.

2003-06-25  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c (g_io_channel_unix_new): Pass real &optval and
	&optlen to getsockopt() instead of NULL. Don't remember why I
	thought that NULL could be used (as we don't actually use the
	returned value for anything), the Platform SDK documentation
	doesn't imply so.

2003-06-19  Matthias Clasen  <maclas@gmx.de>

	* glib/gutils.c (g_path_get_basename): Move the documentation
	inline and add details.  (#108505)

2003-06-18  Matthias Clasen  <maclas@gmx.de>

	* acinclude.m4 (JH_PATH_XML_CATALOG, JH_CHECK_XML_CATALOG): New
	macros to check for XML catalog contents and path, borrowed from
	gtk-doc. 

	* configure.in: New option --enable-man to enable regeneration of
	man pages from Docbook, if the necessary tools are found.

2003-06-17  Matthias Clasen  <maclas@gmx.de>

	* acinclude.m4 (JH_PATH_XML_CATALOG, JH_CHECK_XML_CATALOG): New
	macros to check for XML catalog contents and path, borrowed from
	gtk-doc. 
	
	* configure.in: New option --enable-man to enable regeneration of
	man pages from Docbook, if the necessary tools are found.

2003-06-15  Tor Lillqvist  <tml@iki.fi>

	* glib-zip.in (DLLDIR): Test where the DLLs actually are.

	* README.win32: Point to FSF's binary Win32 distributions of
	libiconv and gettext-runtime.

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

	* glib-zip.in (DEVZIP): libtool 1.5 installs DLLs in the bin
	subdirectory, so get them from there.

	* glib/gwin32.c (g_win32_getlocale): Use "sr@Latn" and "sr" in the
	same way as the po files for Serbian in Latin and Cyrillic script.

2003-06-11  Sebastian Wilhelmi  <seppi@seppi.de>

	* configure.in: Remove false &. Spotted by Albert Chin
	<gtk-devel-list@thewrittenword.com>.

2003-06-08  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c: Fix indentation and spacing. Use
	INADDR_LOOPBACK instead of inet_addr("127.0.0.1") and
	gethostbyaddr().

Sat Jun  6 16:18:10 2003  Andrew Lanoix  <alanoix@umich.edu>

	* glib/giowin32.c: Resolved thread deadlocks in socket 
	ichannel code to support Add-Cancel-Add watch functionality 
	on windows. Also cleaned up socket error handling to not 
	segfault and do the right thing.
	
Fri Jun  6 10:24:23 2003  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>

	* m4macros/glib-gettext.m4: Test for Solaris native gettext 
	in libc, seeing if it supports GNU catalog format (#85217).
	
Thu Jun  5 23:40:31 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c: When dispatching a source that is
	!CAN_RECURSE, temporarily remove any file descriptors
	that that source has registered from the main loop, to keep
	recursive main loops from busy-waiting if input
	becomes available on one of those file descriptors.
	(#112222, Christian Krause)

	* glib/gmain.c (g_source_set_priority): Properly
	remove the source from the context's source list
	and reinsert it sorted, rather than simply setting
	source->next/prev to NULL! (#114274)

2003-06-06  Matthias Clasen  <maclas@gmx.de>

	* glib/gstring.c (g_string_append_printf_internal): Use
	g_vasprintf() and g_string_append_len(), thus enabling embedded
	nuls in the result of g_string_printf().  (#92492, Owen Taylor)

	* tests/string-test.c: Add a test for embedded nuls in the
	result of g_string_printf().

	* glib/gprintf.[ch]: Synchronize argument names with headers and docs.
	(g_vasprintf): An implementation of vasprintf(), code was lifted
	from g_strdup_vprintf().  (#112365)

	* glib/gstrfuncs.c (g_strdup_vprintf): Just use g_vasprintf().

2003-06-05  Tor Lillqvist  <tml@iki.fi>

	* glib/giochannel.h
	* glib/gmain.h: Remove bogus (Win32-only) declaration of
	g_main_poll_win32_msg_add(). No such function exists.

	* glib/gmain.c (g_poll) [Win32]: Use g_win32_error_message() for
	better warning messages.

2003-06-04  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gunidecomp.h (combine): Fix typo (#114375). Also, make the
	function static.

2003-06-03  Sebastian Wilhelmi  <seppi@seppi.de>

	* configure.in: Test for pthread_setschedparam. If not existant,
	disable priorities. (#104718)

Mon Jun  2 14:18:21 2003  Owen Taylor  <otaylor@redhat.com>

	Patch from Jeffrey Stedfast <fejj@ximian.com> (#104825)
 
 	* glib/gspawn.c (read_data): Don't read() into '&buf', while this
 	is technically okay - it is clearer as just 'buf'.
 	(write_all): New helper function that handles write() interrupts.
 	(write_err_and_exit): Use write_all() instead of write().
 	(fork_exec_with_pipes): Same here.
	
Sun Jun  1 09:42:36 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_error_get_from_g_error): Put 
	the g_return_val_if_fail() in the right place.

Fri May 31 1:17:45 2003  Ray Strode  <halfline@hawaii.rr.com>

	* glib/giochannel.c (g_io_channel_error_from_errno):
	Fix typo: should be G_IO_ERROR_UNKNOWN not
	G_ERROR_ERROR_UNKNOWN

Fri May 30 19:23:47 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_ascii_strncasecmp)
	* glib/gstrfuncs.c (g_ascii_strcasecmp): Use TOLOWER()
	macro instead of g_ascii_tolower() (#107138)

Fri May 30 19:09:25 2003  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: Backport better handling
	of ALL_LINGUAS from gettext.m4. (#103808, Andras Salamon)

Fri May 30 18:46:05 2003  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: expand $exec_prefix as
	well as $prefix. (#107290, reported by Morten Welinder,
	patch from Raja Harinath)

Fri May 30 17:24:23 2003  Owen Taylor  <otaylor@redhat.com>

	* glib-gettextize.in: Quote $srcdir to handle $srcdir
	with spaces (#107850, Evan Martin)

Fri May 30 16:48:26 2003  Owen Taylor  <otaylor@redhat.com>
 
 	* glib/giochannel.c (g_io_channel_error_from_errno):
 	Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
 	since close() can return EINTR. (#11842, Balazs Scheidler)
 
Fri May 30 15:51:43 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_error_get_from_g_error): 
	Do a g_return_val_if_fail() on err == NULL to be a
	bit more robuts on buggy IO channel implementations.
	(#113396, Dan Winship)

Tue May 27 19:56:35 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmacros.h: __PRETTY_FUNCTION__ was made a non-token
	before gcc-3.0.0 for C++. (Fix from Martin Kretzschmar,
	#113797)

2003-05-28  Matthias Clasen  <maclas@gmx.de>

	* tests/patterntest.c: Remain silent when sucessful. 

	* tests/Makefile.am: Add patterntest to make check.  (113143)

2003-05-27  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strdup): Use memcpy instead of
	strcpy. (#106988, Christian Biere)

2003-05-27  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strdup): Use memcpy instead of
	strcpy. (#106988, Christian Biere)

2003-05-23  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gutf8.c: Fix typo in UNICODE_VALID (related to #107427).

2003-05-23  Noah Levitt  <nlevitt@columbia.edu>

	* glib/guniprop.c: Remove stale comment.

2003-05-22  Noah Levitt  <nlevitt@columbia.edu>

	* glib/guniprop.c: Update g_unichar_iswide to Unicode 4.0 (#113404).

2003-05-21  Noah Levitt  <nlevitt@columbia.edu>

	* glib/guniprop.c: Fix obscure typo in case conversion routine
	(#113469).

Tue May 20 14:14:55 2003  Manish Singh  <yosh@gimp.org>

	* configure.in: wrap 64-bit MIN/MAX limit constants in
	G_GINT64_CONSTANT. Fixes bug #108699.

2003-05-19  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gunibreak.c: Fix cut-and-pasto: g_unichar_break_type should
	return G_UNICODE_BREAK_UNKNOWN if the character is greater than
	G_UNICODE_LAST_CHAR.

2003-05-19  Noah Levitt  <nlevitt@columbia.edu>

	* glib/glist.c: Remove unused function g_list_sort2 (bug #113203).

2003-05-19  Noah Levitt  <nlevitt@columbia.edu>

	* glib/gunidecomp.c: Fix off-by-one error in
	g_unicode_canonical_ordering (bug #113260).

2003-05-19 Arafat Medini <lumina@silverpen.de>

	* ar.po: Added ar to ALL_LINGUAS

2003-05-17  Telsa Gwynne  <hobbit@aloss.ukuu.org.uk>

	* configure.in: Added cy to ALL_LINGUAS

2003-05-05  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_ascii_dtostr): 
	(g_ascii_formatd): 
	(g_ascii_strtod): Some doc fixes.  (#111805)

2003-05-05  Christian Rose  <menthos@menthos.com>

	* configure.in: Added sr and sr@Latn to ALL_LINGUAS.

Thu Apr 24 19:12:05 2003  Owen Taylor  <otaylor@redhat.com>

	* autogen.sh (have_libtool): Accept libtool-1.5. (#111483)

2003-04-09  Matthias Clasen  <maclas@gmx.de>

	* INSTALL: 
	* INSTALL.in: Remove list of configuration flags, since these 
	are already documented in docs/reference/glib/building.sgml.

2003-04-08  Matthias Clasen  <maclas@gmx.de>

	* INSTALL: Move Cross-compliation information to reference manual.

Mon Apr  7 13:40:28 2003  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c (g_main_loop_run): When waiting for
	the main loop to be freed up, wait on either
	!loop->is_running or got_ownership, not both.
	(Caused gtk_dialog_run() not to work in other
	threads, reported by Jean-Yves Lefort)

2003-04-07  Matthias Clasen  <maclas@gmx.de>

	* glib/gutf8.c (g_utf8_strlen): Warn if p == NULL && max != 0.
	(#110087) 

2003-04-01  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add g_string_chunk_insert_len.

2003-04-01  Matthias Clasen  <maclas@gmx.de>

	* glib/gstring.[hc] (g_string_chunk_insert_len): New function, to
	insert possible non-nul-terminated byte sequences into a string
	chunk.  (#96279)
	(g_string_chunk_insert): Implement in terms of
	g_string_chunk_insert_len() now.

2003-03-30  Matthias Clasen  <maclas@gmx.de>

	* glib/gstring.c (g_string_new): Optimize the common cases 
	(init == NULL or init == "") a bit.
	* glib/gmarkup.c, glib/gmessages.c, glib/gscanner.c,
	glib/gshell.c, glib/gspawn-win32-helper.c, glib/gspawn-win32.c,
	glib/gspawn.c, gobject/gvaluetransform.c: replace uses of 
	g_string_new ("") by g_string_new (NULL).  (#106973, Morten Welinder)

	* glib/gutf8.c (UNICODE_VALID): Update to Unicode 3.1 and optimize
	a bit.  (#107427, Noah Lewitt)

	* glib/libcharset/config.charset: Add cp1251 support for Solaris.
	(#104738, Hidetoshi Tajima)

	* glib/gconvert.c (UnsafeCharacterSet): Get rid of
	UNSAFE_DOS_PATH.
	(acceptable): Align with RFC2396.  (#59653)

	* tests/uri-test.c: Adjust to the changes above.

2003-03-26  Christian Rose  <menthos@menthos.com>

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

2003-03-19  Matthias Clasen  <maclas@gmx.de>

	* glib/giochannel.c (g_io_channel_read_to_end): Fix docs.

2003-03-19  Anders Carlsson  <andersca@codefactory.se>

	* configure.in: Bump version to 2.3.0

2003-03-14  Sebastian Wilhelmi  <seppi@seppi.de>

	* glib/gthread.c: Do not define function g_thread_init_glib, if
	not G_THREADS_ENABLED. It's not called bu g_thread_init() then,
	but calls other, in that case undefined functions.

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

	* glib/gmain.c (g_main_context_find_source_by_id): 
	(g_main_context_find_source_by_funcs_user_data): Fix FALSE/NULL
	confusion.  (#107646, Morten Welinder)

2003-03-01  James Henstridge  <james@daa.com.au>

	* autogen.sh: require automake 1.7.  Add calls to libtoolize and
	gtkdocize.  Clean up some of the error messages.

	* configure.in: move version declaration to the top of the file
	(before AC_INIT), using M4 macros.
	GLIB_AC_DIVERT_BEFORE_HELP() calls no longer necessary, due to use
	of M4 macro expansion in help messages instead.
	Convert AC_ARG_WITH/AC_ARG_ENABLE calls to use AC_HELP_STRING to
	format help strings.  Use quadrigraphs to get square brackets to
	show correctly.
	Replace gtk-doc checks with a call to GTK_DOC_CHECK() macro.
	Use AC_CONFIG_COMMANDS([glibconfig.h], ...) to output
	glibconfig.h, so that "./config.status glibconfig.h" works.
	Add an extra AC_CONFIG_FILES call listing other files we want
	generated by config.status protected by an "if false" block.  This
	way automake generates the rules needed to rebuild the files for
	us.
	Add quotes in various places.

	* docs/reference/*/Makefile.am: convert to use the common
	gtk-doc.make file.  This localises the complexity to a single
	makefile fragment maintained with gtk-doc itself.

	* */Makefile.am: remove unneeded rules to build win32 files with
	config.status.  Automake now does this for us.
	Replace instances of @FOO@ with $(FOO) where appropriate -- this
	allows automake to do a better job checking the makefile.
	Add some files to DISTCLEANFILES where appropriate

	* Makefile.am: use the DISTCHECK_CONFIGURE_FLAGS variable to
	ensure that --enable-gtk-doc is passed to configure during a
	distcheck.  Remove the custom distcheck, since the standard one
	will now do.

	* gobject/Makefile.am: switch to BUILT_SOURCES, since that now
	works.

2003-02-26  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strdup_vprintf): Use g_strndup, not
	g_strdup, since we know the length in advance.

	* glib/gunidecomp.c (g_unicode_canonical_decomposition): Use
	g_malloc instead of directly using malloc.

2003-02-25  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add a couple of missing entries, thanks to Cedric
	Gustin. Thread initialization function changes according to
	Sebastian Wilhelmi's changes below (2003-02-14).

2003-02-24  Matthias Clasen  <maclas@gmx.de>

	* glib/gdir.c (g_dir_read_name): Clarify documentation.

2003-02-18  Sebastian Wilhelmi  <seppi@seppi.de>

	* configure.in: Make glib_thread_test not unnecessarily convert
	between int and void*. (#106278). Let main return int.

	* configure.in: Add an argument to specify the default thread
	attribute to glib_thread_test. Disappeared somewhere between 2.0
	and 2.2.

2003-02-14  Sebastian Wilhelmi  <seppi@seppi.de>

	Fixes for #101264 and #99372:

	* glib/gconvert.h, glib/gmain.c, glib/gmem.c, glib/gmessages.c,
	glib/grand.c: Include gthreadinit.h and rename the thread
	initialization functions a bit and let them start with _, so that
	later we can stop exporting them.
	
	* glib/gmem.c, glib/gmessages.c: Move the g_private_new() calls to
	new functions. They have to be called after setting
	g_threads_got_initialized to TRUE (see #101264).

	* glib/gthread.c: Include gthreadinit.h. Renamed g_mutex_init() to
	g_thread_init_glib(). Call the thread initialization functions
	(which are not allowed to call g_private_new), then set
	g_threads_got_initialized to TRUE, then call the other thread
	initialization functions (which must not call anything but
	g_private_new()).
	
	* glib/gthreadinit.h: New private header to cleanly declare all
	thread initialization functions.

	* gthread/gthread-impl.c: Include gthreadinit.h. In
	g_thread_init() just call g_thread_init_glib(), which in turn calls the
	other functions (see #99372).
 	
	* glib/Makefile.am: Added gthreadinit.h.

2003-02-12  Sebastian Wilhelmi  <seppi@seppi.de>

	* configure.in: Make GLib recognize Tru64Unix thread system. (#103020)

2003-02-11  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (EXTRA_DIST): Include ChangeLog.pre-2-2.

	* glib-zip.in: Include also the gtk-doc/html documentation in the
	developer package.

	* README.win32: Updates.

2003-02-11  Sebastian Wilhelmi  <seppi@seppi.de>

	* AUTHORS: Changed my e-mail address.
	* glib/grand.c: Removed my e-mail address.

2003-02-10  Mohammad DAMT  <mdamt@bisnisweb.com>

	* po/id.po: Added Indonesian translation
	* configure.in: Added "id" to ALL_LINGUAS

2003-02-06  Matthias Clasen  <maclas@gmx.de>

	* glib/gmessages.h: 
	* glib/gmem.h: 
	* glib/ghash.h: 
	* glib/gasyncqueue.h: 
	* glib/garray.h: 
	* glib/ghook.h: 
	* glib/gtypes.h: Fix a bunch of typos in header comments.
	(#102422, Morten Welinder)

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

	* glib/giowin32.c (g_io_channel_unix_new): Fix typo: Should be
	SOCKET_ERROR, not SO_ERROR. Noticed by Daniel Kaufmann.
	
	Merge from stable branch: 

	Fix for bug #104014, reported by Alex Shaduri:
	
	* glib/gspawn-win32.c (protect_argv): New function. Add
	double-quotes around argv elements that need it, and escape
	embedded double-quotes with backslash.
	(do_spawn_with_pipes) Call protect_argv().

	* glib/gspawn-win32-helper.c (WinMain): Call protect_argv().

	* glib/gspawn.c (g_spawn_async_with_pipes): Document argument
	vector vs. command line details on Win32.
	(g_spawn_command_line_sync): Improve documentation about
	backslashes in the command line on Windows.

Thu Jan 30 16:45:13 2003  Owen Taylor  <otaylor@redhat.com>

        * Makefile.am: Remove references to glib.spec.
        (#102231)

        * configure.in: Don't generate glib.spec.

Tue Jan 28 16:08:56 2003  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4: If msgfmt isn't found,
	unset gt_cv_have_gettext. (#102552, Tim Mooney)

Tue Jan 28 15:18:24 2003  Owen Taylor  <otaylor@redhat.com>

	* autogen.sh (have_automake): Fix version in complaint
	message about automake. (#104366, Rich Burridge)

2003-01-22  Pablo Saratxaga  <pablo@mandrakesoft.com>

	* configure.in: Added Bengali (bn) to ALL_LINGUAS

2003-01-21  Christian Rose  <menthos@menthos.com>

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

2003-01-20  Pablo Saratxaga  <pablo@mandrakesoft.com>

	* configure.in: Added Farsi (fa), Italian (it), Latvian (lv),
	Macedonian (mk) to ALL_LINGUAS

2003-01-16  Daniel Yacob <locales@geez.org>

	* configure.in: added am to ALL_LINGUAS
	
2003-01-12  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add some missing entries. Thanks to Kenichi SUTO.

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

	* README.win32: Updates.

	* configure.in: Don't use -lm in TRIO_LIBS on Windows, with no
	libm. (Mingw has a dummy libm.a, but the .pc file should be
	useable by MSVC users, too.)

2003-01-25  Ron Steinke  <rsteinke@w-link.net>

	(Ancient, binary compatible fixes found sitting in my tree)

	* Added early checks for count == 0 and buf == NULL in g_io_channel_read()

	* Better error message for EFAULT in  g_io_channel_error_from_errno()

2003-01-04  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (BUILT_EXTRA_DIST): Don't distribute glib-zip.

	* {glib,gmodule,gobject,gthread}/Makefile.am:
	[Win32] Install also the .def files, to help users generate
	import libraries for other compilers. Uninstall, too.

	* glib-zip.in: Include .def files from above.

	* glib/giowin32.c (g_io_win32_fd_get_flags_internal): Don't claim
	broken pipes are unreadable. (Well, they are, but read() handles
	it, and treats it like EOF.)

Thu Jan  2 16:19:15 2003  Manish Singh  <yosh@gimp.org>

	* configure.in: use AC_COMPILE_IFELSE instead of AC_TRY_COMPILE for
	tests for inline keywords. Fixes #101976.

2003-01-02  Tor Lillqvist  <tml@iki.fi>

	* glib/gwin32.h: Correct the comment telling what headers have
	the declarations of some POSIXish functions.

	* glib/giowin32.c (g_io_win32_fd_get_flags_internal): Fix braino:
	The checks for readability/writeability were backwards.

2003-01-01  Tor Lillqvist  <tml@iki.fi>

	* glib/gmessages.c (ensure_stderr_valid): New function, parallel
	to ensure_stdout_valid(). #defined as empty on Unix. Move the
	alloc_console_called static flag inside these two functions.
	(ensure_stdout_valid, ensure_stderr_valid): Check the C stdout and
	stderr streams for validity, instead of what GetStdHandle() returns.
	(mklevel_prefix): Do use either stderr or stdout on Windows,
	too. Otherwise g_warning() messages (that are just warnings, by
	definition) will get mixed with proper stdout output. Noticed in
	GIMP's gimpconfig-dump.
	(strdup_convert, mklevel_prefix, g_printerr): Call
	ensure_stderr_valid() before trying to use stderr.
	(g_logv): [Win32] Convert message to current codepage before
	display with MessageBox().

2002-12-28  Tõivo Leedjärv  <toivo@linux.ee>

	* configure.in: Added et to ALL_LINGUAS.

