2004-12-16  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Bump version

	* === Released 2.6.0 ===
	
2004-12-15  Alexander Larsson  <alexl@redhat.com>

	* glib/gconvert.c: (g_filename_display_basename):
	Fix spelling
	Add g_return_val_if_fail.
	
	* glib/glib.symbols:
	Add g_filename_display_basename

2004-12-15  Alexander Larsson  <alexl@redhat.com>

	* glib/gconvert.[ch]:
	Add g_filename_display_basename.

2004-12-14  Matthias Clasen  <mclasen@redhat.com>

	* README.in: Updates

	* NEWS: Updates.

	* configure.in: Set version to 2.6.0

2004-12-13  Tor Lillqvist  <tml@iki.fi>

	* NEWS: Update.

	* glib/glib.symbols
	* glib/gstdio.[ch]: Add g_rmdir().

2004-12-13  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: Updates

2004-12-12  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.symbols
	* glib/gconvert.[ch]: Implement Windows DLL ABI stability also for
	g_filename_{to,from}_uri().

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

	* glib/gstdio.c (g_rename, g_unlink, g_remove): Add doc comments
	about Windows restrictions on renaming and removing.

	(g_remove): Mimic POSIX remove() on Windows: Try also to rmdir if
	removal as a file fails. Document this.

	* glib/gstdio.h: Clarify comment about file name encoding on
	Windows.

	* glib/gspawn-win32.c: Fix #157255. Also some refactoring of this
	still very ugly source file.

2004-12-09  Matthias Clasen  <mclasen@redhat.com>

	* glib/goption.c (print_help): Don't print help options
	if the options of a specific group have been 
	requested.  (#160645, Glynn Foster)

2004-12-07  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.c (g_get_language_names): Update the returned
	value after locale changes.  (#160271, Christian Persch)
	(_g_utils_thread_init): Initialize the language name cache
	before going threaded.

	* glib/gthread.c (g_thread_init_glib): Call _g_utils_thread_init().

	* glib/gthreadinit.h: Add _g_utils_thread_init().

2004-12-06  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c (g_io_win32_finalize): Fix a write to freed
	memory: Unlock the channel's mutex before unrefing the channel.

2004-12-06  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Remove a no longer needed hack for 
	libtool < 1.5.2.  (#100697, Owen Taylor, Sebastian Wilhelmi)

2004-12-05  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.symbols
	* glib/gwin32.[hc]: Implement DLL ABI stability also for
	g_win32_get_package_installation_directory()) and
	g_win32_get_package_installation_subdirectory().

	* glib/Makefile.am (install-libtool-import-lib): Remove the DLL
	binary compatibilty entries from the import library. They aren't
	used by newly compiled code, so no need to have them in the import
	library. (The "PRIVATE" keyword in the .def file is supposed to do
	this, but not implemented in the GNU linker yet.)

2004-12-04  Matthias Clasen  <mclasen@redhat.com>

	* glib/gqueue.c (g_queue_link_index): Return -1 if queue is 
	NULL.  (#159530, Philippe Blain)

2004-12-02  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Bump version.

	* === Released 2.5.7 ===
	
2004-12-02  Matthias Clasen  <mclasen@redhat.com>

	* glib/glib.symbols: Protect the the various push/pop allocator
	functions by #ifndef DISABLE_MEM_POOLS.  (#160215, Frederic Crozat)

	* glib/makegalias.pl: Support #ifndef'ed sections.

	* glib/gutils.c (g_get_system_config_dirs): Don't forget to 
	initialize g_system_config_dirs.  (#160213, Frederic Crozat)

Wed Dec  1 17:04:37 2004  Manish Singh  <yosh@gimp.org>

	* glib/gstring.h (g_string_append_c_inline): actually enable (and
	fix up the length test).

2004-11-30  Tor Lillqvist  <tml@iki.fi>

	* glib/Makefile.am (glib.def): gcc -E complains "linker input file
	unused because linking not done" if told to preprocess the
	glib.symbols file. Use '-' and redirection to pass it as standard
	input instead.

2004-11-30  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: Updates

2004-11-30  Tor Lillqvist  <tml@iki.fi>

	* glib/gspawn-win32-helper.c (WinMain): Also check errno to detect
	true errors from spawn*(). (#157258, reported by Bruce Hochstetler)

2004-11-29  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmacros.h (G_GNUC_MALLOC): Define empty for gcc 2.95.

	* glib/gmarkup.c (unescape_text_state_after_charref_hash): 
	Avoid a strndup() here, noticed by Morten Welinder.

2004-11-29  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmarkup.c: Remove leftover noinline attributes.
	(is_name_start_char, is_name_char): Avoid possible reads
	beyond the end of g_ascii_table.

	* glib/Makefile.am: Use the perl found by configure.  (#149826,
	Morten Welinder)

Sun Nov 28 13:13:56 2004  Manish Singh  <yosh@gimp.org>

	* glib/abicheck.sh: filter G_GNUC before PRIVATE so $ is still true.

	* tests/utf8-validate.c: cast pointer math to gint for error print
	message.

Sun Nov 28 12:07:29 2004  Manish Singh  <yosh@gimp.org>

	* tests/utf8-validate.c: minor comment fix.

2004-11-28  Matthias Clasen  <mclasen@redhat.com>

	* glib/gconvert.h:
	* glib/gkeyfile.h:
	* glib/gmem.h: 
	* glib/gstrfuncs.h:
	* glib/gunicode.h:
	* glib/gutils.h: Mark functions with G_GNUC_MALLOC when appropriate.

	* glib/glib.symbols: Add G_GNUC_MALLOC annotations.

	* glib/gmacros.h (G_GNUC_MALLOC): Add a macro for 
	__attribute__((__malloc__)).  (#61780)

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

	* glib/gutils.[hc]
	* glib/glib.symbols: [Win32] Make also g_get_user_name() and
	g_get_real() name return UTF-8. As for the similar changes to fix
	#101792, for DLL ABI stability we use preprocessor defines to get
	the new UTF-8 versions, and keep the old names for versions
	returning strings in the system codepage.

	Fix g_get_tmp_dir() and g_get_home_dir() to actually return UTF-8
	as was intended in the fix for bug #101792. (#159664, noticed by
	Robert Ögren)

2004-11-28  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmarkup.c: Optimizations; don't scan the entire text
	in find_current_text_end(), split unescape_text() into multiple
	functions.  (#159001, Havoc Pennington)

2004-11-27  Matthias Clasen  <mclasen@redhat.com>

	* glib/gspawn.c (g_spawn_async_with_pipes): Update the @flags
	documentation with references to GChildWatch and 
	g_spawn_close_pid().  (#136255, noted by Owen Taylor)

2004-11-26  Matthias Clasen  <mclasen@redhat.com>

	* glib/gkeyfile.c (g_key_file_parse_value_as_string): 
	Don't access invalid memory address if p wasn't 
	increased.  (#159557, Frederic Crozat)

2004-11-25  Matthias Clasen  <mclasen@redhat.com>

	* tests/strtod-test.c (main): Add a testcase for the previous fix.

	* glib/gstrfuncs.c (g_ascii_strtod): Make it work again for floats
	starting with a decimal point, like .75  (#156421, Hans Breuer)

Thu Nov 25 14:02:43 2004  Manish Singh  <yosh@gimp.org>

	* glib/abicheck.sh: filter out G_GNUC stuff when doing the compare.

	* glib/gmessages.c (g_assert_warning): call abort() at the end, so
	gcc doesn't warn.

2004-11-25  Kjartan Maraas  <kmaraas@gnome.org>

	* configure.in: Add «nb» to ALL_LINGUAS.

2004-11-24  Tor Lillqvist  <tml@iki.fi>

	* glib/gwin32.c (g_win32_error_message,
	get_package_directory_from_module,
	g_win32_get_package_installation_directory,
	g_win32_get_package_installation_subdirectory): Use wide character
	API when available. Document that string parameters and return
	values are in UTF-8.

2004-11-24  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutf8.c: Replace g_utf8_validate() with an
	optimized version, and clarify the docs a bit.  (#159131,
	Owen Taylor)

	* tests/Makefile.am (test_programs): Add utf8-validate.

	* tests/utf8-validate.c: Unit tests for g_utf8_validate().

2004-11-23  Matthias Clasen  <mclasen@redhat.com>

	* glib/goption.h: Don't mark g_option_error_quark() as const,
	to be consistent with all the other error_quark functions. 
	(technically they are const, but since these are called only
	in error paths, giving the compiler better optimization 
	opportunities doesn't matter much)

2004-11-23  Matthias Clasen  <mclasen@redhat.com>

	Fix a problem with the PLT reduction changes which caused the
	internal aliases to lose all attributes.
	
	* glib/glib.symbols: Add attribute annotations.
	* glib/makegalias.pl: Keep attribute annotations, but strip PRIVATE.
	* glib/Makefile.am (glib.def): Strip attribute annotations, but keep 
	PRIVATE.

2004-11-21  Hans Breuer  <hans@breuer.org>

	* **/makefile.msc : updated

2004-11-16  Matthias Clasen  <mclasen@redhat.com>

	* m4macros/glib-2.0.m4 (AM_PATH_GLIB_2_0): Support gmodule-no-export.

	* Makefile.am (EXTRA_DIST): 
	* configure.in (AC_CONFIG_FILES): Add gmodule-no-export-2.0.pc.in 

	* gmodule-no-export-2.0.pc.in: Add a variants of gmodule-2.0.pc.in
	which doesn't add -Wl,--export-dynamic, since Pango or GTK+ don't
	need it.  (#125627, Owen Taylor)

2004-11-17  Matthias Clasen  <mclasen@redhat.com>

	* glib/gkeyfile.c: Define S_ISREG() on windows, since it
	is not present there.  (#158469, Kazuki IWAMOTO)

2004-11-15  Matthias Clasen  <mclasen@redhat.com>

	* glib/gkeyfile.c (g_key_file_load_from_fd): Use S_ISREG(), since
	S_IFMT and S_IFREG are apprarently missing on some systems (they 
	are SUS, but not Posix).  (#158263)

2004-11-12  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Bump version.

	* === Released 2.5.6 ===
	
2004-11-11  J. Ali Harlow  <ali@juiblex.co.uk>

	* gobject/Makefile.am:
	* glib/Makefile.am (gtk.def): Use embedded tab rather than '\t'
	escape sequence. (#157951)

2004-11-10  Tor Lillqvist  <tml@iki.fi>

	* glib/gconvert.c (g_get_filename_charsets): Fix typo in doc
	comment.

2004-11-10  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: Updates

Mon Nov  8 10:45:50 2004  Manish Singh  <yosh@gimp.org>

	* glib/gasyncqueue.c
	* glib/ghook.c
	* glib/giochannel.c: g_return_if_fail -> g_return_val_if_fail

	* glib/gmain.c: Ditto, plus also make g_main_context_ref() actually
	return the passed in pointer.

2004-11-08  Matthias Clasen  <mclasen@redhat.com>

	* glib/gnode.h (enum GTraverseFlags): Add G_TRAVERSE_LEAVES
	and G_TRAVERSE_NON_LEAVES as alternative names for 
	G_TRAVERSE_LEAFS and G_TRAVERSE_NON_LEAFS, which are
	grammatically brutal.  (#138853, Morten Welinder)
	
	* glib/gasyncqueue.[hc]:
	* glib/ghook.[hc]: 
	* glib/gmain.[hc]:
	* glib/giochannel.[hc]: Make g_io_channel_ref(), 
	g_main_context_ref(), g_hook_ref(), g_async_queue_ref()
	return the passed in pointer. (#151663, Manish Singh)

	* glib/gmain.c: Initialize child_watch_count to 1, so 
	that we don't miss the very first child if it exits 
	before we set up the child watch. In that case we had 
	previously source->count == child_watch_count == 0, 
	causing g_child_watch_check() to skip the waitpid() 
	call.  (#154827, Gustavo Carneiro)

	* glib/gmain.c (g_child_watch_source_init_single) 
	(g_child_watch_source_init_multi_threaded): Use sigaction()
	instead of signal().  (#136867, Jonas Jonsson, patch by
	Archana Shah)

2004-11-07  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.c (g_get_any_init): Work around an bug
	in Mac OS < 10.3.  (#156446, Dave MacLachlan)

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

	* glibconfig.h.win32.in: Cosmetics: move the G_GNUC_INTERNAL
	define to the same place where it is in a configure-generated
	glibconfig.h

2004-11-05  Matthias Clasen  <mclasen@redhat.com>

	* tests/strtod-test.c: Portability fixes and extra sanity
	checks.  (#157453, Morten Welinder)

2004-11-04  Matthias Clasen  <mclasen@redhat.com>

	* glib/gstrfuncs.c (g_ascii_strtod): Handle numbers like
	1e1, nan, -infinity. Also try harder to preserve errno.  
	(#156421, Morten Welinder)

	* tests/strtod-test.c: Add testcases.

2004-11-04  Tor Lillqvist  <tml@iki.fi>

	* glib/goption.h (enum GOptionFlags): Add G_OPTION_FLAG_REVERSE,
	to reverse the sense of a G_OPTION_ARG_NONE (boolean) option.

	* glib/goption.c (parse_arg): Obey the above flag.

	* glib/gconvert.c (g_filename_display_name): Document that the
	result is guaranteed to be non-NULL.

	* glib/gfileutils.c (get_contents_stdio, get_contents_regfile,
	get_contents_posix, get_contents_win32, g_file_open_tmp,
	g_file_read_link): Use g_filename_display_name() for error
	messages.
	(g_mkstemp): Document that the template should be in the GLib file
	name encoding.
	(g_file_open_tmp): Ditto. Also document that the actual name
	returned is also in the GLib file name encoding.

2004-11-02  Matthias Clasen  <mclasen@redhat.com>

	* glib/gconvert.c (g_filename_display_name): New function 
	to convert a filename to a UTF-8 string for display 
	purposes.  (requested by Alex Larsson)
	
	* glib/gconvert.c (g_get_filename_charsets): New function 
	to return the encodings which are tried when converting a 
	filename to UTF-8. (#151465, François Gagné)

2004-11-02  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Bump version

	* === Released 2.5.5 ===

	* NEWS: Updates

2004-11-02  Matthias Clasen  <mclasen@redhat.com>

	* glib/glib.symbols: Add new functions.

	* glib/gconvert.c: Fix doc comment for 
	g_get_filename_charsets().

	* glib/gconvert.c (g_filename_display_name): New function to
	convert a filename to a UTF-8 string for display purposes.
	(g_get_filename_charsets): New function to return the 
	encodings which are tried when converting a filename to 
	UTF-8.

	* glib/goption.c (g_option_context_parse): Document that
	this function may not return.

2004-11-01  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.h: Make gtkdoc-scan happy by removing spaces
	between gchar and *.

2004-11-01  Tor Lillqvist  <tml@iki.fi>

	* glib/gstdio.c (g_lstat): Implement correctly also on Unix
	systems without lstat(). (#157038, Morten Welinder)

2004-11-01  Ray Strode <rstrode@redhat.com>

	* glib/gkeyfile.c:
	(g_key_file_get_locale_string): don't return an
	error if we come across a value with invalid utf8 or
	if we don't find a translated string. Just fallback
	to the untranslated string (Mark McLoughlin, bug
	#156790).
	
	* glib/gkeyfile.c:
	(g_key_file_init), (g_key_file_clear): track the
	actual start GKeyFileGroup rather than just its name
	(g_key_file_parse_group): allow add_group() to
	update the start group.
	(g_key_file_remove_group_node): update the start
	group if it gets removed (Mark McLoughlin, bug
	#156790).

	* glib/gkeyfile.c:
	(g_key_file_parse_string_as_value): Don't escape
	tabs and spaces in the middle of key values.

2004-11-01  Matthias Clasen  <mclasen@redhat.com>

	* glib/gconvert.c:
	* glib/gdebug.h
	* glib/gutils.c
	* gobject/gtype.c
	* gthread/gthread-posix.c
	* tests/timeloop-closure.c
	* tests/timeloop.c: Fix sparse warnings.  (#157014, Kjartan Maraas)

2004-11-01  Matthias Clasen  <mclasen@redhat.com>

	* glib/goption.c: Documentation updates.

	Handle conflicts between options in different groups. (#156808)
	
	* glib/goption.c (g_option_context_parse): When a long option does not
	match exactly, try to parse it as --group-option.
	(g_option_context_add_group): Warn if a group name conflict occurs.

	* glib/goption.c (print_help): Print out the effective options, ie 
	don't print shadowed short options, and for long options print
	--group-option instead of --option if appropriate.

2004-10-31  Matthias Clasen  <mclasen@redhat.com>

	* glib/gwin32.c: Add bits of markup to g_win32_get_windows_version()
	docs.

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

	* glib/gwin32.c: Document g_win32_get_windows_version().

	* glib/gstdio.[ch]: Add g_lstat().

2004-10-29  Matthias Clasen  <mclasen@redhat.com>

	* glib/goption.c: Doc additions.

	* glib/goption.c (parse_arg): Convert filenames to UTF-8 on
	Windows.

2004-10-29  Hans Breuer  <hans@breuer.org>

	* glibconfig.h */makefile.msc.in : updated [and finally fixed my
	script to produce ready to go de-in(ed) files, w/o autotools]

	* */*.rc.in : updated copyrights to 2004

	* glib/gutils.c : some CSIDL_* defines lacking from older SDK;
	use the same fallback mecahnism as on *NIX where ever applicable

2004-10-29  Matthias Clasen  <mclasen@redhat.com>

	* tests/option-test.c: Add tests for the handling of
	non-option arguments, "--" and G_OPTION_REMAINING.

	* glib/goption.[hc]: #define G_OPTION_REMAINING, which is
	a special long option name, which can be used for an option
	in the main group which collects the non-option arguments.
	It must be of type G_OPTION_ARG_STRING_ARRAY or 
	G_OPTION_ARG_FILENAME_ARRAY. If the main group doesn't contain
	an option whose name is G_OPTION_REMAINING, the non-option
	arguments are left behind in argv as before.

	* glib/goption.c: Add documentation.

2004-10-28  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmessages.h: Mark g_assert_warning as G_GNUC_NORETURN,
	to avoid compiler warnings.  (#156767, Owen Taylor)

2004-10-29  Tor Lillqvist  <tml@iki.fi>

	* glib/gstdio.c: Include also <direct.h> for mkdir() prototype
	with MSVC. [156727, Kazuki IWAMOTO]

	* glib/giochannel.h (g_io_channel_new_file): Redefine also
	g_io_channel_new_file to the UTF-8 version on Win32. [156725,
	Kazuki IWAMOTO)

2004-10-28  Ray Strode  <rstrode@redhat.com>

	* glib/gkeyfile.c
	(find_file_in_data_dirs): clean up a leak (#156652,
	Morten Welinder)
	(g_key_file_load_from_fd): propagate fstat() error
	conditions and retry read on EAGAIN (#156647, Morten
	Welinder).  Return error if file is NOT regular, not if
	it is regular (bug introduced from last commited bug
	fix). 
	(g_key_file_load_from_data_dirs): allocate enough space
	for the terminating NULL.

2004-10-28  Ray Strode  <rstrode@redhat.com>

	* glib/gkeyfile.c: Don't use S_ISREG macro (#156728,
	Kazuki IWAMOTO)

2004-10-28  Matthias Clasen  <mclasen@redhat.com>

	* glib/gstdio.c: Include galias.h before glib.h (#156697,
	Christophe Fergeau)

	* glib/gkeyfile.c: Add a missing "Since: 2.6" comment.

2004-10-28  Tor Lillqvist  <tml@iki.fi>

	* glib/gstdio.c: Include glib.h early to get G_OS_WIN32. Include
	errno.h for errno.

	* glib/gkeyfile.c: Include gstdio.h and use g_open().

2004-10-27  Ray Strode  <rstrode@redhat.com>

	* glib/gkeyfile.c:
	 (g_key_file_load_from_fd), 
	 (g_key_file_load_from_file): 
	 Move file is regular check to load_from_file to use
	 fstat() instead of race prone g_file_test().  Don't
	 clear/init until needed. Change error messages to be
	 more consistent.
	 (g_key_file_load_from_data),
	 (g_key_file_load_from_data_dirs),
	 (g_key_file_parse_data),
	 (g_key_file_get_value),
	 (g_key_file_get_string),
	 (g_key_file_set_string),
	 (g_key_file_get_string_list),
	 (g_key_file_set_string_list),
	 (g_key_file_set_locale_string),
	 (g_key_file_get_locale_string),
	 (g_key_file_set_locale_string_list),
	 (g_key_file_get_boolean),
	 (g_key_file_set_boolean),
	 (g_key_file_get_boolean_list),
	 (g_key_file_set_boolean_list),
	 (g_key_file_get_integer),
	 (g_key_file_get_integer_list),
	 (g_key_file_set_integer_list),
	 (g_key_file_remove_key):
	 Add more g_return_*if_fail checks for public functions.

2004-10-27  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Bump version.

	* === Released 2.5.4 ===

2004-10-27  Matthias Clasen  <mclasen@redhat.com>

	* glib/abicheck.sh: Strip Win32 specific defs file syntax.

	* NEWS: Updates. 

2004-10-27  Matthias Clasen  <mclasen@redhat.com>

	Introduce the idea of a filename encoding, which is 
	*literally* the filename encoding on Unix. On Windows, 
	use the Unicode name converted to UTF-8. (#101792,
	Tor Lillqvist, Owen Taylor)
	
	* glib/gdir.[hc]: 
	* glib/gconvert.[hc]: 
	* glib/gfileutils.[hc]: 
	* glib/gutils.[hc]: 
	* glib/giowin32.c: On Windows, keep old ABI versions 
	of GLib pathname api for DLL ABI stability. Use different 
	names for the new-style UTF-8 versions. Hide this through 
	a #define.

	* glib/gstdio.[hc]: New files containing wrappers for
	POSIX pathname api.

	* glib/glib.symbols: Add new symbols.

	* glib/makegalias.pl: Drop Win32 specific .def syntax,
	include gstdio.h

2004-10-27  Matthias Clasen  <mclasen@redhat.com>

	* glib/gkeyfile.c: Fix includes. (#156500, #156499, 
	Kazuki IWAMOTO)

	* glib/Makefile.am (galias.h): Fix srcdir != builddir 
	builds.  (#156447, Thomas Fitzsimmons)

2004-10-26  Gora Mohanty  <gmohanty@cvs.gnome.org>

	* configure.in: Added 'or' to ALL_LINGUAS.

2004-10-26  Matthias Clasen  <mclasen@redhat.com>

	* glib/gkeyfile.c: Include galias.h.
	
	* glib/gkeyfile.c (g_key_file_parse_value_as_comment): 
	Don't compare strings and chars.

	* glib/glib.symbols: Add new symbols.

	* glib/gkeyfile.c (g_key_file_new): Fix docs.

	* glib/gkeyfile.h: Use the same parameter names as in
	the implementation and the docs.

	* glib/gwin32.c (g_win32_get_windows_version): Make this
	function thread-safe in the GLib style.
	* glib/gthreadinit.h: 
	* glib/gwin32.c (_g_win32_thread_init): New function to
	initialize the version.
	* glib/gthread.c (g_thread_init_glib): Call 
	_g_win32_thread_init() from here.

2004-10-26  Ray Strode  <rstrode@redhat.com>

	* glib/gkeyfile.c: Add Matthias to "Written by" lines
	 (GKeyFileGroup): add field to hold comments about groups
	 (g_key_file_load_from_fd): return TRUE on success and
	 FALSE on failure.  Don't close fd's opened by other
	 parent function.  
	 (g_key_file_load_from_file): run FILE_IS_REGULAR test
	 before trying to open file, to save an fd from being
	 leaked (would probably be better to use fstat()). Close
	 fd when done with it. Return TRUE on success and FALSE
	 on failure.
	 (g_key_file_load_from_data): Return TRUE on success and
	 FALSE on failure.
	 (g_key_file_load_from_data_dirs): remove superfluous
	 const modifier.  Return TRUE on success and FALSE on
	 failure.  Stop trying to load files when one succeeds.
	 (g_key_file_parse_key_value_pair): don't validate input
	 for UTF-8 until users uses a getter that does
	 validation.  Don't leak copy of start_group_name.
	 (g_key_file_to_data): serialize new comment field for
	 groups.
	 (g_key_file_get_keys): Remove convenience code to let
	 NULL group mean start group.  Get rid of unneeded NULL
	 check before g_strdup.
	 (g_key_file_get_groups): Reverse groups list before
	 sending to user because it is maintained in backward
	 order internally. 
	 (g_key_file_get_value),
	 (g_key_file_set_value): add g_return checks at top of
	 public functions.
	 (g_key_file_get_string), 
	 (g_key_file_get_string_list): validate key value is UTF-8.
	 (g_key_file_[sg]et_*comment): new functions for
	 setting/getting comments
	 (g_key_file_remove_comment): new function to remove
	 comment block
	 (g_key_file_remove_key_value_pair_node): new function to
	 pull a key-value pair out of the list and free it.
	 (g_key_file_remove_group_node): call
	 g_key_file_remove_key_value_pair_node instead of 
	 freeing the list immediately to get better statistics
	 for approximate_size.
	 (g_key_file_remove_group): use lookup_group_node instead
	 of lookup_group to prevent a g_list_find call.
	 (g_key_file_add_key): report group also when unable to
	 find key.
	 (g_key_file_lookup_group_node): new function to make
	 getting the group node from a group name easier.
	 (g_key_file_lookup_group): use lookup_group_node under
	 the hood.
	 (g_key_file_lookup_key_value_pair_node): new function to
	 make getting the key-value pair from a group and key
	 name eaiser.
	 (g_key_file_parse_comment_as_value): new function to add '#' to the
	 beginning of every line.
	 (g_key_file_parse_value_as_comment): new function that
	 attempts to be the inverse of comment as value.

2004-10-26  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.c: 
	* glib/gkeyfile.c: Don't include ctype.h needlessly.  (#156424,
	Morten Welinder)

	* tests/strtod-test.c (test_string): Improve error reporting.

Mon Oct 25 15:05:18 2004  Manish Singh  <yosh@gimp.org>

	* autogen.sh: rm autom4te.cache, since it might interfere with
	differing autoconf versions.

	* tests/child-test.c: use GINT_TO_POINTER for g_child_watch_add
	user data.

	* glib/gfileutils.c: G_IS_DIR_SEPARATOR is defined in gutils.h now,
	don't redefine it here.

2004-10-24  Matthias Clasen  <mclasen@redhat.com>

	* glib/gkeyfile.c (g_key_file_remove_group_node): Don't
	destroy the lookup map if it is NULL.

2004-10-23  Matthias Clasen  <mclasen@redhat.com>

	* glib/gasyncqueue.c, glib/gatomic.c, glib/gdate.c, 
	glib/giochannel.c, glib/gmain.c, glib/gspawn.c, 
	glib/libcharset/localcharset.c: Apply a patch to fix
	sparse warnings. (#154696, Kjartan Maraas)

	* glib/gnulib/g-gnulib.h: Undef libc functions before defining
	them, since they may also be macros.  (#155177, Andrea Campi)

	* glib/gkeyfile.h: 
	* glib/gkeyfile.c: Add a parser for desktop entries and
	similar files with a .ini-like syntax.  (#139974, Ray Strode)

	* glib/glib.h: Include gkeyfile.h

	* glib/Makefile.am (libglib_2_0_la_SOURCES): Add gkeyfile.c
	(glibsubinclude_HEADERS): Add gkeyfile.h

	* glib/gutils.c (_g_compute_locale_variants): Make this 
	non-static and use it in gkeyfile.c

2004-10-22  Matthias Clasen  <mclasen@redhat.com>

	* tests/uri-test.c (run_uri_list_tests): Add some
	uri list tests.c.

	* glib/gconvert.h:
	* glib/gconvert.c (g_uri_list_extract_uris): New function to
	split a text/uri-list data into individual uris and strip comments.

2004-10-20  Matthias Clasen  <mclasen@redhat.com>

	* glib/goption.c (get_change): Don't return the wrong 
	change.  (#155856, Lucas Rocha)

2004-10-17  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.h (G_IS_DIR_SEPARATOR): 
	* glib/gutils.c: Make public.  (#155589, Tim-Philipp Müller) 

2004-10-08  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (g_child_watch_add_full): 
	* glib/gmain.c (g_child_watch_add): Document that GLib supports only
	a single callback per pid. (#154828, Gustavo Carneiro)

2004-10-06  Matthias Clasen  <mclasen@redhat.com>

	* glib/gfileutils.c: Fix some C99isms.  (#154676, Kjartan Maraas)

2004-10-05  Anders Carlsson  <andersca@gnome.org>

	* glib/goption.c: (g_option_context_parse):
	Add check for if argc is 0.
	
	* tests/option-test.c: (empty_test3), (main):
	Add test case.
	
2004-10-05  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: Update

2004-10-04  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmem.c (g_mem_set_vtable): Only set vtable_set if the
	vtable is set.  (#154352, Philippe Blain)

2004-10-03  Anders Carlsson  <andersca@gnome.org>

	* glib/goption.c: (parse_arg):
	Set arg_data on filenames. (Discovered by Mats-Ola Persson).
	
	* tests/option-test.c: (arg_test3), (ignore_test3), (main):
	Add test for filename args.
	
2004-10-01  Tor Lillqvist  <tml@iki.fi>

	* glib/goption.c (g_option_context_parse): Use
	g_path_get_basename() instead of strrchr(), so that either slash
	is accepted on Windows.

2004-09-30  Matthias Clasen  <mclasen@redhat.com>

	* glib/gfileutils.c: Convert filenames to UTF-8 before 
	putting them in GErrors.  (#154078, Morten Welinder)

2004-09-29  Matthias Clasen  <mclasen@redhat.com>

	* glib/glib.symbols: Add g_assert_warning.

	* glib/gmessages.h:
	* glib/gmessages.c (g_assert_warning): Treat g_assert 
	in the same way as g_return_if_fail and move the string 
	constants into a helper function, which also takes 
	care of removing the "IA__" prefix from internal aliases.

	* glib/gmessages.h: Move the declaration of 
	g_return_if_fail_warning() out of the ifdefs, so that
	building with G_DISABLE_ASSERT works.

2004-09-27  Murray Cumming  <murrayc@murrayc.com>

	* glib/goptions.[h|c], glib/glib.symbols: Rename 
	g_context_option_error_quark() to g_option_error_quark(), because that 
	is consistent with normal naming conventions, and what bindings expect.

.2004-09-26  Matthias Clasen  <mclasen@redhat.com>

	Fix #153649, Hidetaka Iwai:
	
	* glib/goption.c (parse_long_option): Don't forget to set parsed
	to TRUE when parsing a long ARG_NONE option. 
	(free_changes_list): Fix the memory management for string
	and filename arrays.

2004-09-22  Tor Lillqvist  <tml@iki.fi>

	* glib/gmessages.c: [Win32] Don't ever open a console
	window. (Which we used to do if standard output or standard error
	are invalid, as they are for GUI applications.) These console
	windows that open up unexpectedly have caused endless amounts of
	confusion among end-users. (#141102, #151175)

	Don't output the process id on Windows. Only output the program
	name. If not set with g_set_prgname(), fetch the application
	executable's name and use that.

Mon Sep 20 00:35:14 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gutf8.c (g_utf16_to_utf8): Add a note explaining how to
	convert UTF-16 byte stream of ambiguous endianness.  (#152954,
	Linus Walleij)

Mon Sep 20 00:17:37 2004  Matthias Clasen  <maclas@gmx.de>

	* tests/option-test.c (error_test3_post_parse): 
	* tests/option-test.c (error_test2_post_parse): 
	* tests/option-test.c (error_test1_post_parse): Don't call 
	g_set_error () with a NULL format.  (#153103, Robert Ögren) 

Mon Sep 20 00:13:48 2004  Matthias Clasen  <maclas@gmx.de>

	Make GOption remove long options completely. (#153113, Robert Ögren)

	* glib/goption.c (parse_long_option): Fix a wrong index.

	* tests/option-test.c (ignore_test3): Test handling of unknown
	options some more.

Sun Sep 19 23:56:15 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/goption.c (g_option_context_parse): Call error_func
	on error, not post_parse_func again.  (#153107, Robert Ögren)

Sun Sep 19 23:52:35 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmessages.c (mklevel_prefix): 
	* glib/gmessages.c (g_logv): Fix the types of some variables
	to be GLogLevelFlags instead of guint.  (#153042, Philippe Blain)

2004-09-18  Matthias Clasen  <mclasen@redhat.com>

	* Version bump

	* === Released 2.5.3 ===

2004-09-17  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: More updates.

Thu Sep 16 18:42:46 2004  Manish Singh  <yosh@gimp.org>

	* glib/abicheck.sh: don't hardcode lengths for cut, instead split on
	the third field.

Thu Sep 16 18:15:32 2004  Manish Singh  <yosh@gimp.org>

	* glib/gstrfuncs.c (g_strncasecmp): Make it take a guint for number
	of characters, instead of a gsize. Technically this is incorrect,
	but this makes it match the prototype, and this is a deprecated
	function anyway.

2004-09-16  Matthias Clasen  <mclasen@redhat.com>

	* glib/Makefile.am (EXTRA_DIST): Add abicheck.sh

Thu Sep 16 02:03:15 2004  Matthias Clasen  <maclas@gmx.de>

	Implement the same PLT reduction technique used in GTK+:
	
	* glib/glib.symbols: Master list of symbols

	* glib/makegalias.pl: Perl script which creates galias.h

	* glib/abicheck.sh: Compares actual exports against glib.symbols 

	* glib/glib.def: Removed. This file is now generated from
	glib.symbols
	
	* glib/Makefile.am: Add rules to generate galias.h and glib.def,
	and add abicheck.sh to TESTS. Don't export _-prefixed symbols.
	
	* configure.in: Add --disable-visibility to suppress the 
	use of ELF visibility attributes.

	* glib/*.c: Include galias.h

2004-09-15  Tor Lillqvist  <tml@iki.fi>

	* glib/gwin32.c (g_win32_error_message): Convert message to
	UTF-8. Technically this breaks API, but the actual use cases in
	gdk/win32 have assumed it is UTF-8 anyway. Fix
	documentation. (#152618, Kazuki Iwamoto)

	* glib/gwin32.h: Don't define ftruncate as a macro. Was never a
	good idea, and it clashes with newest mingw headers, which have a
	ftruncate implementation as an inline function. Thanks to Dominik R.

	* glib/gwin32.c (g_win32_ftruncate): Simplify implementation, just
	call _chsize() in the C library.

2004-09-15  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: Update.

2004-09-09  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmessages.c (g_return_if_fail_warning): Strip the
	prefix "IA__" from function names, since that is what
	GTK+ uses for the PLT-reduction aliases. 

Thu Sep  9 13:52:26 2004  Owen Taylor  <otaylor@redhat.com>

	* glib/gmessages.c (g_return_if_fail_warning): 
	Include implementation of g_return_if_fail_internal().

Thu Sep  9 10:37:41 2004  Owen Taylor  <otaylor@redhat.com>

	* glib/gmessages.h (g_return_[val_]if_fail): Use
	a helper function to reduce code size; omit FILE/LINE
	when we have __PRETTY_FUNCTION__.

2004-09-09  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.c (g_get_home_dir): Remove a misleading comment.

Thu Sep  9 00:10:40 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.h: 
	* glib/gstrfuncs.c (g_strv_length): Add a function to 
	calculate the length of a NULL-terminated string 
	array.  (#150455, Tim-Philipp Müller)

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

2004-09-08  Tor Lillqvist  <tml@iki.fi>

	* glib/gutils.c (guess_category_value): On Win32, as last resort
	call g_win32_getlocale() to get the current thread locale. There
	usually aren't any POSIXish LANG or LC_* environment variables
	present on Windows machines.

	* glib/glib.def: Add g_get_language_names.

2004-09-07  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.h: 
	* glib/gutils.c (g_get_language_names): Add a function to
	return a list of applicable locale names.  (#95587, 
	Hidetoshi Tajima)
	(guess_category_value, compute_locale_variants):
	(explode_locale, unalias_lang, read_aliases): Helper 
	functions for g_get_language_names()

	* tests/testglib.c (main): Show the results of 
	g_get_language_names()

Sun Sep  5 01:46:11 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/glib.def: 
	* glib/gmessages.h: 
	* glib/gmessages.c (g_log_set_default_handler): New
	function to install an alternate default log 
	handler.  (#66387, Darin Adler)

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

	* glib/glib.def: Update.

Wed Sep  1 20:22:39 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gdate.h:
	* glib/gdate.c (g_date_get_iso8601_week_of_year): Add
	a function to calculate the ISO 8601 week number of 
	a date.  (#92579, Niklas Lundell)

2004-09-01  Anders Carlsson  <andersca@gnome.org>

	* glib/goption.c: (g_option_context_parse):
	Set program name before calling the pre-parse hooks.
	
2004-09-01  Anders Carlsson  <andersca@gnome.org>

	* glib/goption.c: (g_option_context_free), (print_help),
	(g_option_context_parse):
	Handle option contexts without a main group.
	
	* tests/option-test.c: (empty_test2), (main):
	Add test case for that.
	
2004-08-30  Anders Carlsson  <andersca@gnome.org>

	* glib/goption.c: (g_option_context_parse):
	Set prgname to <unknown> if argc and argv are NULL.
	
	* tests/option-test.c: (empty_test1), (main):
	Add test case for that.
	
Sun Aug 29 23:58:38 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/ghash.c (g_hash_table_lookup): Point to 
	g_hash_table_lookup_extended() for differentiation between
	not-found and value-is-NULL.  (#150960, Morten Welinder)

2004-08-27  Matthias Clasen  <mclasen@redhat.com>

	Fix #151193, Stepan Kasal:
	
	* glib/gfileutils.c (g_file_error_from_errno): 
	* glib/gfileutils.h (enum GFileError): Add G_FILE_ERROR_NOSYS.

Fri Aug 27 00:45:41 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/goption.c (g_option_context_parse): Set the program name
	from argv[0], noticed by Masatake YAMATO.

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

	* tests/testglib.c (main): Test the new XDG basedir functions.

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

	* glib/gwin32.c (g_win32_get_windows_version): New
	function. Returns the Windows version code like GetVersion(),
	except that one can pretend to be running on Win9x by setting the
	G_WIN32_PRETEND_WIN9X environment variable. This is mainly for
	debugging purposed.

	* glib/gwin32.h: Declare it. Define macros G_WIN32_WINDOWS_IS_NT_BASED 
	and G_WIN32_HAVE_WIDECHAR_API to test Windows features at run-time.

2004-08-25  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Post-release version bump.

	* === Released 2.5.2 ===

Wed Aug 25 00:25:08 2004  Matthias Clasen  <maclas@gmx.de>

	* NEWS: Update for 2.5.2

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

	Win32 equivalences of the XDG folders
	
	* glib/gutils.c (get_special_folder): New function, calls
	SHGetSpecialFolderLocation() to get path to places like the My
	Documents folder.
	(g_get_any_init): Use CSIDL_PROFILE as HOME if not
	overridden by env vars.
	(g_get_user_data_dir): Use CSIDL_PERSONAL.
	(g_get_user_config_dir): Use CSIDL_APPDATA.
	(g_get_user_cache_dir): Use CSIDL_INTERNET_CACHE. Debatable...
	(g_get_system_data_dirs): Use CSIDL_COMMON_APPDATA and
	CSIDL_COMMON_DOCUMENTS.
	(g_get_system_config_dirs): Use CSIDL_COMMON_APPDATA.

	* configure.in: Add -lole32 to G_LIBS_EXTRA for mingw.

	* glib/glib.def: Add the new functions.

Mon Aug 23 16:16:35 2004  Manish Singh  <yosh@gimp.org>

	* glib/goption.c (g_option_group_add_entries): remove unused
	variable.

Mon Aug 23 01:35:18 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gutils.c (g_get_user_cache_dir): 
	* glib/gutils.c (g_get_user_config_dir): 
	* glib/gutils.c (g_get_user_data_dir): Don't call g_get_home_dir()
	while holding the g_utils_global lock, simply use g_home_dir. 
	(#150695, Jody Goldberg)

2004-08-21  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c (g_io_win32_finalize): Tell select_thread to
	break out of its loop. Prevents a thread leak. (#147392, Peter
	Zelezny)

	* glib/gunicollate.c (g_utf8_collate_key): Guard against bogus
	return value from strxfrm(). For instance Microsoft's strxfrm()
	returns INT_MAX on errors. (#141124)

2004-08-19  Tor Lillqvist  <tml@iki.fi>

	* glib/gunicollate.c (g_utf8_collate, g_utf8_collate_key): Correct
	source and destination charset parameter order in g_convert()
	call. (#150394, possibly also #141124)

2004-08-20  Jon K Hellan  <hellan@acm.org>

	* glib/goption.h: Remove trailing commas.

2004-08-17  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Check for all four values of the
	visibility attribute; gcc 2.96 seems to miss 
	"default".  (#150379, Vincent Noel)

2004-08-16  Christian Rose  <menthos@menthos.com>

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

2004-08-11  Ray Strode  <rstrode@redhat.com>

	* docs/reference/glib/glib-sections.txt: 
	* glib/gutils.[ch] (g_get_user_data_dir),
	(g_get_user_config_dir), (g_get_user_cache_dir),
	(g_get_system_data_dirs), (g_get_system_config_dirs): 
	Add new XDG basedir API (bug 139973).

2004-08-10  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmacros.h: Remove G_GNUC_INTERNAL from here.
	* configure.in: Check whether the visibility attribute
	works and define G_HAVE_GNUC_VISIBILITY and 
	G_GNUC_INTERNAL in glibconfig.h correspondingly.

Mon Aug  9 17:37:56 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmacros.h (G_GNUC_INTERNAL): Define empty if gcc is too old.

2004-08-06  Hans Breuer  <hans@breuer.org>

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

	* glib/gutils.c : avoid 'inconsitent dll linkage' by not
	defining extern char** environ with msvc

2004-08-06  Matthias Clasen  <mclasen@redhat.com>

	* m4macros/glib-gettext.m4: Require ngettext.  (#123847,
	Danilo Segan)

Thu Aug  5 20:53:00 2004  Ray Strode  <rstrode@redhat.com>

	* glib/gutils.h (g_get_codeset): strdup result so caller
	doesn't free internally managed memory.

2004-08-04  Tor Lillqvist  <tml@iki.fi>

	* glib/glib.def: Add glib_check_version.

	* config.h.win32.in: Update to match what configure produces. Add
	the G_ATOMIC_*. Define G_ATOMIC_I486 when compiling with gcc. Move
	HAVE_INT64_AND_I64 to where the configure script puts it. Add
	HAVE_INTTYPES_H_WITH_UINTMAX. Define intmax_t as __int64 for MSVC.

Tue Aug  3 16:19:44 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/goption.c: Mark user visible strings for translation.

Tue Aug  3 15:50:55 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/goption.[hc]: Pedantically use g types throughout.

Tue Aug  3 14:58:20 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gutils.h: 
	* glib/gutils.c (glib_check_version): New function to
	check the version of GLib at runtime.  (#149175, Michael Natterer)

2004-08-03  Anders Carlsson  <andersca@gnome.org>

	* glib/goption.h:
	* glib/gtypes.h:
	Move GTranslateFunc to gtypes.h
	
2004-08-02  Anders Carlsson  <andersca@gnome.org>

	* glib/Makefile.am:
	* glib/glib.h:
	* glib/goption.c:
	* glib/goption.h:
	* tests/.cvsignore:
	* tests/Makefile.am:
	* tests/option-test.c: 
	Add GOption.

2004-08-02  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmacros.h: Add a G_GNUC_INTERNAL macro to mark function
	declarations as internal and avoid PLT indirections for 
	them.  (#145465, Arjan van de Ven)

	* glib/gunicodeprivate.h: 
	* glib/gthreadinit.h: 
	* glib/gmessages.h: 
	* glib/gdebug.h: 
	* glib/gconvert.c: Use G_GNUC_INTERNAL for _g_charset_get_aliases(),
	_g_debug_init(), _g_log_fallback_handler(), _g_mem_thread_init(),
	_g_messages_thread_init(), _g_convert_thread_init(), 
	_g_rand_thread_init(), _g_main_thread_init(), _g_atomic_thread_init(),
	_g_mem_thread_private_init(), _g_messages_thread_private_init(),
	_g_utf8_normalize_wc() and _g_unichar_combining_class().

	* glib/gatomic.c: Include gthreadinit.h here to see the declaration
	for _g_atomic_thread_init().

Sun Aug  1 13:19:18 2004  Manish Singh  <yosh@gimp.org>

	* tests/uri-test.c: move newline printing from run_from_uri_tests()
	to run_roundtrip_tests().

2004-08-01 Matthias Clasen  <mclasen@redhat.com>

	* Post-release version bump

        * === Released 2.5.1 ===

Sat Jul 31 23:17:05 2004  Matthias Clasen  <maclas@gmx.de>

	* NEWS: Updates.

Sat Jul 31 20:33:07 2004  Matthias Clasen  <maclas@gmx.de>

	* tests/shell-test.c: Include a test involving consecutive
	backslashes followed by a non-escaped doublequote.
	
	* glib/gshell.c (tokenize_command_line): Count consecutive
	backslashes mod 2 to detect escaped doubleqotes.  (#127306)

2004-07-30  Matthias Clasen  <mclasen@redhat.com>

	* glib/gconvert.c (g_unescape_uri_string): Don't validate
	for UTF-8 here.  (#148420, Robert Ögren)

	* tests/uri-test.c (run_roundtrip_tests): Add tests for 
	roundtrip compatibility. Going from filename to uri and 
	back should always give you the same filename back. 

2004-07-28  Matthias Clasen  <mclasen@redhat.com>

	* tests/markups/valid-{9,10,11}.gmarkup: 
	* tests/markups/fail-{37,38,39}.gmarkup: Tests for handling
	of whitespace inside tags.

	* glib/gmarkup.c (enum GMarkupParseState): Add 
	STATE_AFTER_ATTRIBUTE_NAME and STATE_AFTER_CLOSE_TAG_NAME.
	(g_markup_parse_context_parse): Accept whitespace between
	attribute names, '=' and attribute values and between
	close tag name and '>'. (#148646, Hiroyuki Ikezoe)

Tue Jul 27 02:01:31 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gstrfuncs.c (g_strsplit_set): s/g_strsplit/g_strsplit_set/
	as well.

Sat Jul 24 17:50:07 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	* glib/gstrfuncs.c (g_strsplit_set):
	s/g_strtokenize/g_strsplit_set/ in docs.

Fri Jul 23 10:37:50 2004  Matthias Clasen  <maclas@gmx.de>

	* tests/type-test.c (main): Actually test G_MAXSIZE with
	a gsize variable.

2004-07-21  Matthias Clasen  <mclasen@redhat.com>

	Fix #132858, Sven Neumann, patch by James Henstridge:
	
	* glib-gettextize.in: modify so that mkinstalldirs will 
	get installed into auxdir.

	* Makefile.am (gettext_SCRIPTS): install mkinstalldirs.

2004-07-21  Matthias Clasen  <mclasen@redhat.com>

	Fix #147651, reported by Oliver Guntermann:

	* glib/gprintfint.h (_g_vasprintf): Don't wrap vasprintf(),
	_g_gnulib_vasprintf() in a macro, since they behave 
	differently wrt. to memory allocation.

	* glib/gprintf.c (g_vasprintf): Instead, differentiate 
	here between the three cases: system vasprintf(), 
	_g_gnulib_vasprintf(), no vasprintf().  

2004-07-20  Crispin Flowerday  <gnome@flowerday.cx>

	* NEWS: Fix a typo in my name

Tue Jul 20 04:31:40 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	* configure.in: Bump version number

Sun Jul 18 19:40:30 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	* === Released 2.5.0 ===

	* Makefile.am (BUILT_EXTRA_DIST): move gtk-doc.make here.

Sun Jul 18 01:40:28 2004  Matthias Clasen  <maclas@gmx.de>

	* NEWS: Updates for 2.5.0

Mon Jul 12 00:02:40 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gi18n-lib.h: Remove the ENABLE_NLS check here as well.

2004-07-09  Matthias Clasen  <mclasen@redhat.com>

	* glib/gdir.c (g_dir_open): Convert filename to UTF-8 
	before using it in the error message.  (#146054, Federico
	Mena Quintero)

Thu Jul  8 00:54:32 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gi18n.h: Remove the ENABLE_NLS check, since GLib can't
	be built without anyway.  (#135899, Murray Cumming)

Mon Jul  5 18:50:27 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmessages.h (g_debug): Complete the g_log() 
	family.  (#135730, Sven Herzberg)

Mon Jul  5 18:42:30 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gnulib/Makefile.am (INCLUDES): Add top_srcdir to 
	make srcdir != . work.  (#145166, Kaz Sasayama)

Sun Jul  4 01:52:18 2004  Matthias Clasen  <maclas@gmx.de>

	* configure.in: Use a small test library instead of
	libpthread.so for testing RTLD_GLOBAL brokenness.  (#139567,
	Julio M. Merino Vidal)
	
2004-07-02  Sebastian Wilhelmi  <seppi@seppi.de>

	* glib/gatomic.c: Rename __asm to __asm__ and __volatile to
	__volatile__ to make the file consistent. Spotted by Benoit
	Carpentier <gtkool_2kx@yahoo.fr>.

2004-07-01  John Ehresman  <jpe@wingide.com>

	* glib/giowin32.c (g_io_channel_win32_init, g_io_win32_free)
	Initialize reset_send & reset_recv fields and don't close
	sockets unless they were created.  (#145153)

Fri Jun 11 22:56:46 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gscanner.c (g_scanner_get_token_ll): Ignore a 
	missing newline at EOF for single line comments.  
	(#83674, Sven Neumann)

Thu Jun 10 23:38:02 2004  Matthias Clasen  <maclas@gmx.de>

	* tests/printf-test.c (TEST): Actually set any_failed on 
	failure.  (#143552, Philippe Blain)

2004-06-09  Federico Mena Quintero  <federico@ximian.com>

	* tests/uri-test.c (to_uri_tests): Fix expected results (ha ha)
	for URIs that *should* have been invalid, or viceversa.
	(from_uri_tests): Likewise.

2004-06-07  Federico Mena Quintero  <federico@ximian.com>

	Fixes #140532.

	* glib/gconvert.c (is_asciialphanum): Renamed from
	is_escalphanum(); ensures that this is an ASCII character.
	(is_asciiescalpha): Renamed from is_escalpha().
	(hostname_validate): Use the two functions above.
	(g_filename_to_uri): Don't convert the filename to UTF-8.
	(g_filename_from_uri): Don't convert the filename from UTF-8.

Mon Jun  7 22:25:24 2004  Matthias Clasen  <maclas@gmx.de>

	* tests/run-markup-tests.sh: Default to silence, but support
	a -v argument to get the old output back. 

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

	* glib/gutils.c (g_get_any_init): Check home for being
	NULL. (#143812, Ivan Wong)

Sun Jun  6 15:23:00 2004  Pawan Chitrakr  <pawan@nplinu.org>

	* configure.in: Added "ne" (Nepali) in ALL_LINGUAS

Fri Jun  4 19:26:47 2004  Manish Singh  <yosh@gimp.org>

        * glib/galloca.h: cpp #directives should always have the "#" in the
        first column of the the line. Do that for "#pragma alloca". Fixes
        bug #143744.

Wed Jun  2 00:57:16 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gtypes.h: Use higher precision for the mathematical
	constants.  (#141941, Morten Welinder)

Tue Jun  1 22:01:40 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmarkup.c (advance_char): Fix an off-by-one error 
	in g_markup_parse_context_parse().  (#142794, Morten Welinder)

Sun May 16 23:23:29 2004  Matthias Clasen  <maclas@gmx.de>

        Merged from 2.4:
	
	* glib/gcompletion.c (g_completion_add_items):
	(g_completion_remove_items): Remove unnecessary 
	checks.  (#142559, Morten Welinder)

2004-05-15  Tor Lillqvist  <tml@iki.fi>

	* glib/gutils.c (g_get_any_init): [Win32] Only believe HOME if it
	is an absolute path and exists. (#138618)

2004-05-14  Tor Lillqvist  <tml@iki.fi>

	* glib/gnulib/vasnprintf.c (vasnprintf): Handle empty digit string
	for precision correctly. (#142400)

	For backward compatibility with the Trio implementation, make "ll"
	format modifer work on Win32, too. Change into "I64" before
	passing to the system printf. (#142433)

	* tests/printf-test.c (main): Add tests for the above.

2004-05-10  Matthias Clasen  <mclasen@redhat.com>

	Merge from 2.4:
	
	* glib/gmain.c (block_source, unblock_source): Make these 
	static.  (#142230, Morten Welinder)

2004-05-10  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c (g_win32_print_gioflags): Remove two duplicated
	lines. Thanks to Benoît Carpentier.

Sun May  9 02:04:14 2004  Matthias Clasen  <maclas@gmx.de>

	Merge from 2.4:
	
	* glib/guniprop.c (g_utf8_casefold): Avoid an unnecessary
	memleak.  (#141998, Nikolai Weibull)

Sat May  8 23:02:26 2004  Matthias Clasen  <maclas@gmx.de>

	Merge from 2.4:
	
	* glib/gutils.h: Remove vestigial g_get_codeset().
	* glib/gutils.c (g_get_codeset): Call g_get_charset().
	(#137703, Owen Taylor)

2004-05-06  Matthias Clasen  <mclasen@redhat.com>

	* configure.in: Bump version number to 2.5.0.

Wed May  5 23:35:44 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gconvert.c (g_filename_from_uri): Quote the file
	scheme to mark it as untranslatable. String change.  
	(#133144, Danilo Segan)

2004-05-03  Pablo Saratxaga  <pablo@mandrakesoft.com>

	* configure.in: Added Walloon (wa) to ALL_LINGUAS

Sun May  2 03:51:59 2004  Manish Singh  <yosh@gimp.org>

	* glib/gtypes.h: check for __pentium4__ when deciding whether to
	use bswap for GUINT32_SWAP_LE_BE_IA32(). Fixes bug #141620.

2004-05-01  Hans Breuer  <hans@breuer.org>

	* glib/gnulib/Makefile.am : added makefile.msc to EXTRA_DIST
	fixes #141563, Steve Lhomme

2004-04-30  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.4.1 ===

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

	* NEWS: Updates
	
2004-04-25  Tor Lillqvist  <tml@iki.fi>

	* glib/gwin32.c (g_win32_get_package_installation_subdirectory):
	Plug memory leak. (#140770, John Ehresman)

2004-04-23  Matthias Clasen  <mclasen@redhat.com>

	* glib/libcharset/localcharset.c (_g_locale_get_charset_aliases): 
	Reinstate LIBCHARSET_ALIAS_DIR support which got lost at some
	point.  (#139134, Piotr Klaban)

	* glib/gconvert.c (open_converter): Don't call g_strerror() here, 
	since it can lead to infinite recursion.  (#139133, Piotr Klaban)

2004-04-22  Matthias Clasen  <mclasen@redhat.com>

	* tests/testglib.c (main): Trivial warning fix.  (#140345)

	* tests/queue-test.c (main): Add some tests for off-by-one errors.

	* glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
	error.  (#139703, Philippe Blain)

	* tests/testglib.c (main): Add testcases for g_message() involving
	non-printable and unsafe characters.

	* glib/gmessages.c (escape_string): Don't assume that
	string->str remains unchanged over g_string_insert() 
	calls.  (#139030, Christophe Saout)

	* glib/gstrfuncs.c (g_ascii_strtod): Fix problems when a 
	locale-specific decimal separator directly follows a 
	number.  (#138424, Nickolay V. Shmyrev)

	* tests/strtod-test.c (main): Add some more testcases.

	* glib/gmain.c (g_main_context_query): Only set time_is_current to 
	FALSE if context->timeout is not zero.  (#137795, Christian Krause)

2004-04-21  Matthias Clasen  <mclasen@redhat.com>

	* tests/printf-test.c (main): Comment out a nonessential testcase
	which fails on HP-UX.  (#136283, Jonas Jonsson)

2004-04-15  Matthias Clasen  <mclasen@redhat.com>

	* tests/patterntest.c (main): Add tests for the empty pattern.

	* glib/gpattern.c (g_pattern_spec_new): Don't read and write out 
	of bounds when the pattern is empty.  (#140032, Stanislav Brabec,
	Stefan Fent)

2004-04-10  Tor Lillqvist  <tml@iki.fi>

	* glib/gwin32.c (g_win32_getlocale): Add new language and
	sublanguage codes, from GNU gettext. (#137958)
	
	* glib/giowin32.c
	* glib/gmain.c
	* glib/gstrfuncs.c
	* glib/gthread.c: Decorating variable definitions with
	__declspec(dllexport) causes problems on Cygwin build, and isn't
	really needed for a native Win32 build with mingw or MSVC, so
	remove. (#138402, Roger Leigh)

	* glib/libcharset/localcharset.c: Use Win32-specific code also on
	Cygwin.
	* tests/uri-test.c: Don't assume that local filenames are in UTF-8
	on Cygwin, either. (#138412, Roger Leigh)

2004-04-08  Guntupalli Karunakar  <karunakar@freedomink.org>

        * configure.in: Added "gu" (Gujarati) to ALL_LINGUAS.

2004-04-03  Tor Lillqvist  <tml@iki.fi>

	* configure.in: Remove AC_CYGWIN, obsolete. Don't let pthreads be
	found on Cygwin, they don't work. (#138401, Roger Leigh)

2004-03-31  Tor Lillqvist  <tml@iki.fi>

	* tests/spawn-test-win32-gui.c: Minor Cygwin fix. (#138405, Roger
	Leigh)

	* tests/unicode-encoding.c (process): Use UTF-16LE explicitly also
	on Cygwin. (#138423, Roger Leigh)

2004-03-30  Adam Weinberger  <adamw@gnome.org>

	* configure.in: Added en_CA to ALL_LINGUAS.

2004-03-21  Tor Lillqvist  <tml@iki.fi>

	* glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
	cases where a drive letter is present. For 'a:' or 'a:foo', return
	'a:.'. This is mostly just for consistency with the behaviour
	without a drive letter. But very important is to for 'a:\foo' or
	'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
	instead of backslashes.) (#137316)

	* tests/dirname-test.c (main): More complete testing on Win32. If
	a test fails, include expected and actual result in error message.

Fri Mar 19 15:21:09 2004  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c: Fix the accidental revert of the
	fixes from #112222 that happened when the GChildWatch
	code was added. (Caught by Christian Persch)

Fri Mar 19 11:07:06 2004  Owen Taylor  <otaylor@redhat.com>

	* tests/atomic-test.c (main): Make computation
	of "biggest_pointer" vaguely more portable.
	(#137498, Jonas Jonsson)

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

	* configure.in: Define HAVE_INT64_AND_I64 also in the mingw (gcc
	on Win32) case, where the 64-bit type is called long long, but the
	system printf/scanf format modifier for 64-bit integers is still I64.

2004-03-16  Gareth Owen  <gowen72@yahoo.com>

	* configure.in: Added en_GB to ALL_LINGUAS

