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.

