Mon Sep  3 23:29:51 2001  Owen Taylor  <otaylor@redhat.com>

	* Version 1.3.7

	* Makefile.am (EXTRA_DIST): Distribute po/po2tbl.sed.in

	* Makefile.am: Remove references to glib.rc[.in]

	* NEWS: Various additions.

2001-09-04  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update. Don't mention pthreads.

	* build-dll: Remove, moved to the build module.

	* glibconfig.h.win32.in: Don't mention pthreds here, either.

	* glib/gstrfuncs.c: Mark the correct variable for export from DLL.

	* glib/giowin32.c (g_io_win32_msg_create_watch): Owen forgot to
	rename the win32_watch_funcs variable here, too.

	* */makefile.mingw.in: Don't use version number in import library
	name. Use whole version number in DLL name. Use build-dll from the
	build module.

Tue Sep  4 01:50:24 2001  Tim Janik  <timj@gtk.org>

	* NEWS: updates for 1.3.7 release.

Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.h: Add closure_marshal/closure_callback
	fields to GSourceFuncs for use by g_source_set_closure().

	* glib/gmain.c glib/giounix.c glib/giowin32.c 
	  glib/gmain.h: Export the SourceFuncs vtables so GObject
	can use them to figure out closure callbacks/marshallers
	for the default source types.

Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_strchomp): Replace some uses
	of isspace() with g_ascii_isspace().

	* glib/gutf8.c glib/gunicode.h glib/gstrfuncs.[ch]: Add
	extra indirections to g_utf8_skip and g_ascii_table to
	avoid great whopping copy relocs.

Sun Sep  2 11:10:42 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gen-unicode-tables.pl glib/gunicomp.h
	glib/gunichartables.h glib/giounix.c: Fix some variables that 
	should have been static.

2001-08-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthread.h, glib/gthread.c: Add 'want_to_read' to
	GStaticRWLock to avoid calling g_cond_broadcast, when no one is
	waiting.

	* glib/gmain.c (g_main_context_add_poll_unlocked): Don't free
	cached_poll_array, when adding new poll's. This is taken care for
	in g_main_context_iterate.

2001-08-30  Tor Lillqvist  <tml@iki.fi>

	After being away for about five months, I'm back working on
	this...  For now, still using same build setup for Win32. Probably
	will change to not including version numbers in the import library
	names, though. (But the DLL names would still include them,
	possibly even also the micro version number.) That would be more
	Unix-like. Also, will have to check out newest mingw tool versions
	to see if the build-dll script now can be retired.
	
	* makefile.mingw
	* makefile.msc: New files, no need to generate from .in as
	they don't contain references to automake variables.
	
	* makefile.mingw.in
	* makefile.msc.in: Removed.
	
	* glib.rc.in: Remove
	* glib/glib.rc.in: Moved here.
	
	* Makefile.am
	* glib/Makefile.am: Corresponding changes.

	* glib/glib.def: Fix typo, add new entries.

	* glib/gspawn-win32-helper.c: More debugging. Doesn't work
	currently (or then it never has on Win2k, which I now use?)

	* glib/gstrfuncs.c
	* glib/gstrfuncs.h: Mark g_ascii_table for export/import on Win32.

	* */makefile.mingw.in: Reflect new location of glib library.
	
2001-08-30  Michael Natterer  <mitch@gimp.org>

	* glib/giochannel.h: (struct GIOChannel): "gboolean foo : 1"
	results in TRUE being -1 once assigned, use "guint foo : 1"
	instead.

2001-08-27  Darin Adler  <darin@bentspoon.com>

	* glib/gconvert.h:
	* glib/gconvert.c: (g_filename_from_uri):
	Updated name of error from G_CONVERT_ERROR_NOT_LOCAL_FILE to
	G_CONVERT_ERROR_NOT_ABSOLUTE_FILE_URI.
	
	* tests/.cvsignore:
	* tests/uri-test.c:
	Added a lot more test for the new URI functions, including a
	number that seem to indicate some minor bugs.

2001-08-26  Alex Larsson  <alexl@redhat.com>

	* glib/gconvert.[ch] (g_filename_from_uri,
	g_filename_to_uri): New functions to convert
	between local pahtnames and file: uris.

	* tests/Makefile.am:
	* tests/uri-test.c:
	Tests for the new functions.

2001-08-25  Alexander Larsson  <alla@lysator.liu.se>

	* glib/gstrfuncs.[ch]:
	* docs/reference/glib/glib-overrides.txt:
	* docs/reference/glib/glib-sections.txt:
	* docs/reference/glib/tmpl/string_utils.sgml:
	Implement and document g_ascii_isxxx.

	* tests/strfunc-test.c:
	Add tests for g_ascii_isxxx
	
	* glib/guniprop.c (g_unichar_ispunct):
	include symbols, not just punctuation.
	(g_unichar_isspace): Vertical tab is not
	considered whitespace.
	
	* tests/shell-test.c:
	Output errors on stderr

2001-08-24  Alexander Larsson  <alla@lysator.liu.se>

	* glib/gconvert.[ch] (g_convert_with_iconv):
	New function, doing the same as g_convert but taking
	a GIConv argument. The old g_convert is just
	a call to this with a newly opened GIConv.

2001-08-24  Darin Adler  <darin@bentspoon.com>

	* tests/shell-test.c: (check_string_result): Fix bad indenting.
	I figured I should fix this since I just pointed Alex here to
	look at this as an example.

2001-08-24  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: Matthias Clasen's fix for
	the buffer corruption bug by setting outbuf _after_
	the call to g_string_set_size()

	* glib/giochannel.c: kept the buffers from perpetually
	growing by subtracting 1 from allocated_len in the calculation
	of available space to account for the null at the end of the
	buffer

	* glib/giochannel.c: fixed g_io_channel_write_chars()
	to not write more than space_in_buf bytes for the UTF-8 case

Fri Aug 24 11:15:46 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c docs/Changes-2.0.txt: Patch from Darin
	Adler to restore Glib-1.2 handling of empty strings,
	and to fix off-by-one with @max_tokens. (#57663).
	Doc improvements.

	* tests/strfunc-test.c: Change tests to correspond to
	new behavior of g_strsplit().

Thu Aug 23 11:09:58 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/ghash.c (g_hash_table_foreach_remove_or_steal): 
	Patch from Josh Pritikin to fix reversed key and value destroy 
	functions. (#59433)

	* glib/giochannel.h (struct _GIOChannel): Mark structure
	/*< private >*/

Thu Aug 23 16:14:17 2001  Tim Janik  <timj@gtk.org>

	* glib/gmacros.h (G_GNUC_NO_INSTRUMENT): new macro.

2001-08-21  Abel Cheung  <maddog@linux.org.hk>

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

2001-08-20  Sven Neumann  <sven@gimp.org>

	* Makefile.am: added po to SUBDIRS

Sun Aug 19 21:32:39 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/ghash.c: Eliminate use of floating point when 
	determining if the hash table needs to be resized,
	and also factor out the test from g_hash_table_resize()
	to save function calls for the common case.
	(#59124)

	* glib/gmain.c (g_main_context_query): Document the
	return value.

2001-08-19  Darin Adler  <darin@bentspoon.com>

	* glib/gshell.c: (g_shell_quote): Added missing \ character.

	* tests/shell-test.c: (check_string_result), (test_shell_unquote),
	(main): Added tests for g_shell_quote and g_shell_unquote.

2001-08-19  Fatih Demir <kabalak@gtranslator.org>

	* configure.in: Added "ta" to the languages list.

2001-08-19  Havoc Pennington  <hp@pobox.com>

	* glib/gshell.c (g_shell_unquote): add comment about shell quoting
	rules to the docs.

2001-08-16  Ron Steinke  <rsteinke@w-link.net>

	* glib/giounix.c: fixed an error in setting close_on_unref
	in g_io_channel_new_file ()

2001-08-16  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c glib/glib.def glib/giochannel.h: Added
	new functions g_io_channel_[set,get]_close_on_unref ()

	* glib/giochannel.c: glib/giochannel.h: Documentation fixes

	* glib/giochannel.c: Fixed g_io_channel_write_chars ()
	so that bytes_written is always set to an appropriate
	value when it returns

	* glib/giounix.c: changed g_io_channel_get_flags () to
	set the is_readable and is_writeable flags cached
	by the channel

Wed Aug 15 11:09:56 2001  Tim Janik  <timj@gtk.org>

	* Makefile.am: let the generated .pc files depend on config.status,
	so they get correctly remade.

Sun Aug 12 21:05:13 2001  Tim Janik  <timj@gtk.org>

	* glib/gmessages.h: fix g_return_if_fail, g_assert and friends to
	have a body for G_DISABLE_CHECKS and G_DISABLE_ASSERT.
	fixes #58873.

2001-08-12  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: safer handling of errno, fixed
	a bug in an assert

Sun Aug 12 10:09:00 2001  Owen Taylor  <otaylor@redhat.com>

	* tests/iochannel-test.c (main): Find test case for
	srcdir != builddir, miscellaneous cleanups.

	* tests/Makefile.am (EXTRA_DIST): Distribute casefold.txt,
	casemap.txt iochannel-test-infile.

	* glib-2.0-uninstalled.pc.in: Fix for move of glib files
	into subdir. (Pointed out by Steve Baker)

Sat Aug  4 01:04:08 2001  Tim Janik  <timj@gtk.org>

	* glib/gscanner.c (g_scanner_unexp_token): fix INT and FLOAT warnings
	for invalid token values.

2001-08-10  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: Fixed a "sense of comparison" bug,
	added an assert to check when g_io_channels_read_chars ()
	is looping endlessly due to encoded_read_buf being corrupted.

2001-08-06  Sven Neumann  <sven@gimp.org>

	* glib/gutils.[ch]: added new function g_nullify_pointer().
	
2001-08-05  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c glib/giochannel.c glib/glib.def
	docs/reference/glib/glib-sections.txt: Added new functions
	g_io_channel_[read,write]_unichar ()

	* glib/giochannel.h: Finally remembered to remove the
	old error message G_IO_CHANNEL_ERROR_PCHAR_FLUSH

	* glib/giochannel.c: Some fixes to g_io_channel_fill_buffer ()
	and g_io_channel_write_chars ()

2001-08-05  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: Replaced the local use_buf variable with a macro
	in most places. This allows us to check some things without worrying
	whether we have allocated the read buffers yet, and allows us to allocate
	the buffers later in some cases.

	* glib/giochannel.c: Introduced a MAX_CHAR_SIZE macro, which is
	supposed to be greater than or equal to the length in bytes
	of the longest character in any encoding. This is necessary
	to get the minimum buffer size for successful writing.

	* glib/giochannel.c: Fixed g_io_channel_set_encoding () so
	that it just prints a warning if partial_write_buf isn't
	empty instead of failing.

	* glib/giochannel.c: Fixed several functions so they can accept
	NULL parameters for pointers to return values.

	* glib/giochannel.c: Altered the error handling for
	g_io_channel_read_chars () to only return an error if
	it doesn't have any buffered data.

	* glib/giochannel.c: Rewrote g_io_channel_write_chars ()
	to fix the error handling and remove duplicate sections
	of code.

	* glib/giounix.c: Fixed g_io_channel_new_file () to
	call fstat () to set the is_seekable flag, in case someone
	uses it on a FIFO.

Sun Aug  5 08:25:30 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gmacros.h: Include stddef.h so that we use
	the system's definition of NULL. (#54730)

2001-08-04  Alexander Larsson   <alexl@redhat.com>
        
	* win32-fixup.pl: 
	Hacky script to fix up your .msc.in files on windows. 
	Dunno if this is a good solution yet.
	
	* build/win32/module.defs:
	Back down libiconv version to 1.3, since that is what tor distributes.
	
	* glib/glib.def:
	Update

	* gobject/makefile.msc.in:
	build gobject-query.exe and gmarshal.strings, add libiconv dependency to linklines.

	* gobject/marshal-genstrings.pl:
	New file. perl script to generate gmarshal.strings.
	
2001-08-03  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: Fixed g_io_channel_seek_position()
	so that G_SEEK_CUR can be used with UTF-8 encoding

	* glib/giochannel.c: Changed test to decide whether
	use_buf is encoded_read_buf or read_buf from
	"if (channel->do_encode)" to "if (channel->encoding)" to
	fix bug 58472

	* tests/iochannel-test.c: Fixed so it doesn't output
	double newlines

        * glib/giochannel.c: Fixed g_io_channel_fill_buffer()
	so that encoded_read_buf is created for UTF-8 encoding

2001-08-03  Darin Adler  <darin@bentspoon.com>

	* tests/strfunc-test.c: (strv_check), (main):
	Improve strfunc test to test the split function in a way that
	demonstrates its idiosyncrasies.
	* tests/.cvsignore:

2001-08-03  Sven Neumann  <sven@gimp.org>

	* configure.in: beautified configure help output.
	
	* glib/gtree.c: changed help for g_tree_insert(); it was misleading.

Fri Aug  3 10:20:10 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/guniprop.c (g_unichar_xdigit_value): Fix computation
	(Fix from Cesar Rincon)

2001-08-01  Christopher James Lahey  <clahey@ximian.com>

	* glib/gutf8.c (g_utf8_find_prev_char): Made g_utf8_find_prev_char
	able to return the first character of a string.

2001-07-31  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.h: Committed this file, which is where
	the changes in my previous changelog entry happened,
	not giochannel.c

2001-07-31  Sven Neumann  <sven@gimp.org>

	* glib/gmem.c: declare gboolean vtable_set static.

2001-07-30  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c docs/reference/glib/glib-sections.txt
	tests/iochannel-test.c: removed G_IO_CHANNEL_*_LINE_TERM macros

	* glib/giochannel.c put /*<public>*/ and /*<private>*/ tags in
	the GIOChannel structure


2001-07-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: #undef inline before testing whether it works to
	avoid false positives. Patch from Garry R. Osgood
	<grosgood@rcn.com>. Fixes bug #58272.

	* gmodule/gmodule.c (parse_libtool_archive): build the library
	name ourselfs ... so we can load the library specified and not
	mangle any name not beggining in 'lib'. Patch from Michael Meeks
	<michael@ximian.com>. Fixes bug #58226.

2001-07-29  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: Matthias Classen's patch to give
	g_io_channel_flush() the correct sense when testing
	whether the buffer is empty
	* glib/giounix.c: Matthias Classen's patch to set
	the mode of a file created with g_io_channel_new_file()

Sun Jul 29 16:08:17 2001  Tim Janik  <timj@gtk.org>

	* glib/gscanner.[hc]: removed deprecated g_scanner_stat_mode().

	* glib/gscanner.c (g_scanner_msg_handler): by default, print scanner
	errors and warnings to stderr.

2001-07-27  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gtypes.h: Use G_GNUC_EXTENSION instead of
	__extension__. Patch from Pavel Roskin <proski@gnu.org>.

2001-07-26  Darin Adler  <darin@bentspoon.com>

	* configure.in:
	* m4macros/glib-2.0.m4:
	Update location of pkgconfig from sourceforge.net to new
	location at freedeskop.org.

2001-07-26  Michael Natterer  <mitch@convergence.de>

	* gobject/glib-genmarshal.c: added a "release_check" to the
	OutArgument structure, which, if present, gets integrated in the
	marshaller code and protects us from stuff like
	g_object_unref(NULL) on marshaller return values.

2001-07-23  Padraig O'Briain  <Padraig.Obriain@sun.com>

	* gobject/gobjectnotifyqueue.c: fix unconditional check of
	first GParamSpec in g_object_notify_queue_thaw(); prevent
	property notification being lost

2001-07-23  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: fixed g_io_channel_seek_position() so that
	G_SEEK_CUR works for UTF-8 channel encoding, and unallocated
	converters are not flushed after the seek; fixed
	g_io_channel_get_buffer_condition() so that G_IO_IN is only
	set if the read buffer contains at least one full character

2001-07-23  Sven Neumann  <sven@gimp.org>

	* Makefile.am: removed glib.def from EXTRA_DIST ...
	* glib/Makefile.am: ... and added it here.

2001-07-22  Hans Breuer  <hans@breuer.org>

	* glib/giochannel.c (g_io_channel_get_buffer_condition) : make
	the code actually have an effect (Use |= to set bits). Not
	absolutely sure if is the right one.

	* glib/giowin32.c (g_io_win32_<check|prepare>) : don't modify
	watch->condition but restored the previous behaviour.
	Now gio-test as well as The Gimp work again ...
	
2001-07-21  Hans Breuer  <hans@breuer.org>

	* glib/giowin32.c (g_io_channel_new_file) : set the
	corresponding p(ermission)mode of the file when creating,
	otherwise a wronly file couldn't be overwritten (at least
	not on Win9x).

2001-07-21  Hans Breuer  <hans@breuer.org>

	* glib/giowin32.c : intial implementation of new API functions.
	Not sure if it behaves as intended ...

	* glib.def : removed, glib/glib.def is the file used since moved
	* glib/glib.def : updated

	* tests/makefile.msc : added iochannel-test

Fri Jul 20 19:19:10 (UTC) 2001  Ron Steinke  <rsteinke@w-link.net>

	* glib/giochannel.c: API changes, fixes to
	error handling, some internal restructuring
	* glib/giochannel.h: API changes, documentation for
	elements in GIOChannel structure
	* glib/giounix.c: Matched API changes, implemented
	backend to set is_readable, is_writeable, is_seekable
	flags, added a test to catch large values of count
	for which the behavior of write() is undefined
	* glib/giowin32.c: Changed to match new prototypes for
	io_close() and io_seek(), removed references to
	G_IO_STATUS_INTR, set is_seekable flag in channel
	creation functions
	* glib.def: Renamed g_channel_error_quark() and
	g_channel_error_from_errno() to g_io_channel_error_quark() and
	g_io_channel_error_from_errno(); added new functions
	g_io_channel_get_buffered() and g_io_channel_set_buffered()
	* docs/reference/glib/glib-sections.txt: Modified iochannel
	section to reflect new functions and API changes
	* tests/iochannel-test.c: Fixed to work with API changes
	* tests/iochannel-test-infile: New file; input file
	for iochannel-test
	* tests/unicode-collate.c tests/unicode-normalize.c:
	Changed G_IO_FILE_MODE_READ to "r" to match API change

Fri Jul 20 19:16:24 (UTC) 2001  Ron Steinke  <rsteinke@w-link.net>

	* gobject/glib-genmarshal.c: modified to create header files
	using G_[BEGIN,END]_DECLS instead of #ifdef __cplusplus ...

Fri Jul 20 14:11:29 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gutf8.c glib/gunidecomp.c: s/size_t/gsize/ to match
	prototypes.

Thu Jul 19 16:05:21 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gcompletion.c (g_completion_complete): Fix memory
	leak and dubious list manipulation. (Found by 
	Ron Koerner, #53408)

	* glib/gfileutils.c (get_contents_stdio): Call fclose()
	on FILE * on error. (#57057)

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

	* glib/glib/giowin32.c : make it compile again

	* glib/glib.def : updated exports

	* glib/makefile.msc.in :
	* glib/makefile.mingw.in : 
	* tests/makefile.msc.in : reflect glib move

	* tests/mainloop-test.c : #include <io.h> for _pipe()

	* tests/gio-test.c : casts for strict compiler settings

	* makefile.msc.in : new master makefile reflecting the glib
	move. The '.in' isn't really needed anymore, because there
	is no version number in it

2001-07-19  Darin Adler  <darin@bentspoon.com>

	* glib/gstrfuncs.c: (g_ascii_strdown), (g_ascii_strup): Add
	missing const.
	(g_strsplit): Add g_return_val_if_fail for case of empty
	delimiter, which can result in an infinite loop otherwise.
	* glib/gstrfuncs.h: Add missing const.
	* tests/.cvsignore: Ignore a generated file.
	
	* tests/array-test.c:
	* tests/dirname-test.c:
	* tests/hash-test.c:
	* tests/list-test.c:
	* tests/node-test.c:
	* tests/relation-test.c:
	* tests/shell-test.c:
	* tests/slist-test.c:
	* tests/spawn-test.c:
	* tests/strfunc-test.c:
	* tests/string-test.c:
	* tests/testglib.c:
	* tests/tree-test.c:
	* tests/type-test.c:
	Add an #undef G_DISABLE_ASSERT so all tests will assert even if
	asserts are disabled inside glib itself.

Fri Jul 13 19:20:06 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstring.c (g_string_insert/append/prepend_unichar):
	Add functions to insert a unichar as UTF-8, since this
	is reasonably common.

	* glib/gutf8.c glib/gunicode.h (g_utf8_get_char_validated):
	New function exposing iterating through possibly invalid/incomplete
	UTF-8 to unicode to the outside world.

	* glib/gutf8.c (g_utf8_get_char_extended): Fix max_len argument
	to be gssize, not gsize.

2001-07-17  Kjartan Maraas  <kmaraas@gnome.org>

	* configure.in: Added "nn" to ALL_LINGUAS.
	
2001-07-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gmain.c: Add some assertions. Simplify and fix
	g_main_context_release(). Fix some locking bugs in
	g_main_loop_run().

2001-07-12  Mark Murnane  <Mark.Murnane@sun.com>

	* glib/gmessages.c: Changed prototype of printf_string_upper_bound
	to return gsize.  Now matches the actual function body.

	* glib/gstrfuncs.c (g_strrstr_len): Changed type of parameter #2 
	from gint to gssize.  Now matches the prototype in gstrfuncs.h.
	
2001-07-11  Darin Adler  <darin@bentspoon.com>

	* .cvsignore: Add some generated files.

	* glib/gmain.c: (g_main_context_iterate): Comment out cruft
	after #endif to avoid gcc warning.
	* gmodule/gmodule.c: (g_module_set_error_unduped): Remove
	const from type to avoid gcc warning.
	* gobject/gsignal.c: (g_signal_emitv): ifdef variable used
	only if G_ENABLE_DEBUG to avoid gcc warning.
	* gobject/gtype.c: (type_iface_vtable_init_Wm),
	(type_iface_vtable_finalize_Wm): ifdef call needed only
	if !G_DISABLE_ASSERT to avoid gcc warning.
	* tests/testglib.c: (main): ifdef call needed only if
	!G_DISABLE_ASSERT to avoid gcc warning. Maybe later we
	should make the test to #undef G_DISABLE_ASSERT.
	* tests/unicode-collate.c: Add include of <string.h> to
	avoid gcc warning.

Wed Jul 11 11:13:50 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gunicomp.h
	(Reported by Sven Neumann).

	* glib/guniprop.c (g_utf8_str/updown) glib/gunicollate.c
	(g_utf8_collate_key): Fix shadowing problems reported by
	many (D. Adler, S. Neumann, M. Murmane, L. Peter)

Fri Jul  6 00:02:41 2001  Tim Janik  <timj@gtk.org>

	* glib/gmessages.c (printf_string_upper_bound): fix negative exponent
	handling (numbers<0).
	
	* glib/gutils.h (g_bit_storage): take a gulong as argument.
	same for g_bit_nth_lsf() and g_bit_nth_msf() as mask.

2001-07-08  Martin Baulig  <baulig@suse.de>

	* tests/unicode-normalize.c, tests/unicode-collate.c:
	Reflect latest g_io_channel_new_file() API changes, use
	G_IO_FILE_MODE_READ instead of "r".

Fri Jul  6 22:34:32 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gunicode.h glib/gunidecomp.c glib/guniprop.c 
	  glib/gunicollate.c: Add length arguments to
	g_utf8_{strup,strdown,casefold,collate_key}.

	* glib/gdate.c: Fix for above.

2001-07-06  Pablo Saratxaga <pablo@mandrakesoft.com>

	* configure.in: added Basque (eu) to ALL_LINGUAS

Mon Jul  2 19:48:52  2001 Andrew Lanoix <alanoix@umich.edu>

	*giowin32.c: g_source_remove()ing an socket iochannel closes
	the socket when it should not. Patch by Peter Zelezny 
	<zed@linux.com>

	*giowin32.c: Fix a few typos
	
Mon Jul  2 16:03:21 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_channel_get_buffer_condition): Fix.

	* glib/giunix.c: Fix prepare/check/dispatch for watches.

	* tests/unicode-normalize.c: #include <string.h>

Sat Jun 30 23:14:32 2001  Tim Janik  <timj@gtk.org>

	* glib/glist.[hc]: added g_list_insert_before().

	* glib/gslist.c (g_slist_insert_before): provide an implementation,
	prototype was already present...

Sun Jul  1 20:16:25 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/guniprop.c (g_unichar_totitle): Use G_N_ELEMENTS
	rather than a custom macro.

	* glib/gen-unicode-tables.pl: Adapt to changes in table
	formats for Unicode 3.1

	* glib/gunicode.h glib/guniprop.c glib/gunichartables.h
	  glib/gen-unicode-tables.pl: Add case conversion functions
        g_utf8_casefold, g_utf8_strup, g_utf8_strdown.

	* tests/unicode-caseconv.c tests/gen-casefold-txt.pl
	  tests/gen-casemap-txt.pl tests/casefold.txt 
	  tests/casemap.txt: Test cases for case conversion.

	* glib/gunicode.h glib/gunidecomp.[ch] glib/gunicomp.h
	  glib/gen-unicode-tables.pl: Add function to do Unicode
        normalization g_utf8_normalize().

	* tests/unicode-normalize.c: Test program for case conversion.

	* glib/gunicode.h glib/gunicollate.c: Add collation functions
	g_utf8_collate, g_utf8_collate_key.

	* test/unicode-collate.c: Test program for collation.

	* glib/gdate.c (g_date_fill_parse_tokens): Fix uninitialized
	variable.

	* glib/gdate.c (g_date_strftime) docs/Changes-2.0.txt:
	Make work with UTF-8 even if the locale isn't UTF-8 based.
	Still somewhat of broken, if the format string contains 
	characters not representable in the current locale, will warn
	and not work.
	
	* glib/gdate.c: Use UTF-8 normalization and casefolding.

Sat Jun 30 16:03:16 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/giowin32.c glib/giounix.c glib/gmain.[ch]:
	Rename GSourceFuncs::destroy to GSourceFuncs::finalize.
	(#56858)

Sat Jun 30 15:49:10 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.[ch]: (Mostly patch from Sebastian Wilhemi)
	Make some changes to the way that GMainContext works:

	 - a GMainContext is no longer associated with a single
	   thread, but any thread can acquire ownership 
	   of thread and iterate.

	 - There is a facility g_main_context_wait() for
	   non-owner-threads to wait either for ownership
	   or for a condition to be broadcast.

	 - For efficiency, GMainLoop just piggybacks of
	   of the loops mutex / condition instead of
	   having a separate mutex/condition for each
	   GMainLoop.

	* glib/gthread.[ch]: Remove hacks to store the thread's
	GMainContext in the GThread structures, since we
	no longer have the GMainContext <=> GThread correspondence.
	
        * glib/gmain.[ch]: Make g_main_context_wakeup() public
	so someone could completely duplicate GMainLoop 
	with the public API.

	* tests/mainloop-test: Fix up to the new API. Decidedly
	doesn't work at the moment, but that may be the IO
	channel changes, or preexisting locking problems.

Sat Jun 30 13:18:28 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c glib/gstring.h: Try compiling
	before committing, why don't you? Simple fixes
	for my stupid typos. 

Sat Jun 30 12:49:26 2001  Owen Taylor  <otaylor@redhat.com>

        Patch from Darin Adler (#54166)
	
	* glib/gstrfuncs.[ch]: Add ascii-only, locale-insensitive
	g_ascii_to[lower/upper], g_ascii_str[down/up],
	g_ascii_is[upper/lower] and deprecate the locale-affected
	versions which break for UTF-8, etc. Make
	g_ascii_strup/strdown duplicating,
	not in-place for consistency with UTF-8 functions.

	* glib/gstring.[ch]: Add ascii-only, locale-insensitive
	g_string_ascii_[down/up], and deprecate the locale-affected
	versions which break for UTF-8, etc.

	* glib/gutils.c glib/gwin32.c test/testglib.c: Use
	the g_ascii_* functions where appropriate.

Fri Jun 29 13:36:39 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstring.[ch] (g_string_set_size): Add function to 
	allow setting the length of a string greater than the 
	current length (for buffering usage)

	* glib/gstring.[ch]: Expose string->allocated_len, since
	that is	useful when using GString simply as a buffer. 
	(Renamed from string->alloc)

	* glib/giochannel.[ch] glib/giounix.c glib/giowin32.c:
	Major patch from Hidetoshi Tajima and Ron Steinke
	reworking GIOChannel to have:

	 - Buffering
	 - Sane and useful error reporting
	 - Streaming encoding conversion with iconv
	 - Convenience functions to read by lines or 
	   an entire file.

	Also fix remaining 64 bit cleanliness issues.

	* tests/iochannel-test.c tests/Makefile.am: Test case
	for IO channel streaming conversion. Still needs 
	some fixing up.

Thu Jun 28 16:57:44 2001  Tim Janik  <timj@gtk.org>

	* configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
	interface age 0, binary age 0.

2001-06-27  Kjartan Maraas  <kmaraas@gnome.org>

	* glib/gmarkup.c: Fix a typo.
	
2001-06-27  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am, configure.in: Removed glib-config-2.0, as we have
	pkg-config now.

	* glib/Makefile.am: Added -I$(top_srcdir) for builddir != srcdir.

	* Makefile.am: Removed gen-unicode-tables.pl from EXTRA_DIST.

Tue Jun 26 11:43:46 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in Makefile.am *.[ch] glib/*.[ch] glib/Makefile.am:
	Move glib library into a subdirectory, make all GLib include
	files include as <glib/glist.h>

	* tests/testglib.c tests/testgdate.c tests/testgdateparser.c
	  tests/timeloop.c tests/timeloop-basic.c: Move all tests into
	the tests/ subdirectory.

Sat Jun 23 17:34:38 2001  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_logv): use G_BREAKPOINT() instead of raise(5).

Wed Jun 20 12:00:54 2001  Owen Taylor  <otaylor@redhat.com>

        Changes for 64-bit cleanliness, loosely based on patch 
	from Mark Murnane.
	
	* gconvert.c (g_convert/g_convert_with_fallback): Remove
	workarounds for since-fixed GNU libc bugs. Minor
	doc fix.

	* gconvert.[ch]: Change gint to gsize/gssize as
	appropriate.

	* gconvert.c (g_locale/filename_to/from_utf8): Fix incorrect
	computation of bytes_read / bytes_written.

	* gfileutils.[ch] (g_file_get_contents): Make length
	out parameter 'gsize *len'.

	* ghook.c (g_hook_compare_ids): Don't compare a
	and b as 'a - b'.

	* gmacros.h (GSIZE_TO_POINTER): Add GPOINTER_TO_SIZE,
	GSIZE_TO_POINTER.

	* gmain.c (g_timeout_prepare): Rewrite to avoid
	overflows. (Fixes bug when system clock skews
	backwards more than 24 days.)

	* gmarkup.[ch]: Make lengths passed to callbacks
	gsize, length for g_markup_parse-context_parse(),
	g_markup_escape_text() gssize.

	* gmessages.[ch] (g_printf_string_upper_bound): Change
	return value to gsize.

	* gmessages.c (printf_string_upper_bound): Remove
	a ridiculous use of 'inline' on a 300 line function.

	* gstring.[ch]: Represent size of string as a gsize,
	not gint. Make parameters to functions take gsize,
	or gssize where -1 is allowed.

	* gstring.c (g_string_erase): Make
	g_string_erase (string, pos, -1) a synonym for
	g_string_truncate for consistency with other G*
	APIs.

	* gstrfuncs.[ch]: Make all functions taking a string
	length, take a gsize, or gssize if -1 is allowed.
	(g_strstr_len, g_strrstr_len). Also fix some boundary
	conditions in g_str[r]str[_len].

	* gutf8.c tests/unicode-encoding.c: Make parameters that 
	are byte lengths gsize, gssize as appropriate. Make 
	character offsets, other counts, glong.

	* gasyncqueue.c gcompletion.c
          timeloop.c timeloop-basic.c gutils.c gspawn.c.
	Small 64 bit cleanliness fixups.

	* glist.c (g_list_sort2, g_list_sort_real): Fix functions
	that should have been static.

	* gdate.c (g_date_fill_parse_tokens): Fix extra
	declaration that was shadowing another.

	* tests/module-test.c: Include string.h

Mon Jun 18 15:43:29 2001  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c (g_get_charset): Make argument
	G_CONST_RETURN char **.

2001-06-22  Andrew Lanoix <alanoix@umich.edu>
	
	*giowin32.c: Debug and partial rewrite of async socket code
	on windows, which fixes major MT issues. Some test code kindly 
	provided by wroberts1@home.com.
	
Thu Jun 14 14:09:46 2001  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c (g_strconcat): Fix a use of strcat that
	wasn't replaced with g_stpcpy in the original 
	stpcpy-for-efficiency patch.

2001-06-11  Havoc Pennington  <hp@redhat.com>

	* NEWS: updated

	* configure.in (GLIB_MICRO_VERSION): increment version to 1.3.6

2001-06-08  Alex Larsson  <alexl@redhat.com>

	* gstrfuncs.[ch]:
	Added new functions g_strstr_len, g_strrstr and g_strrstr_len
	
	* tests/strfunc-test.c:
	Add some tests for the new functions.
	
	* gunicode.h:
	* gutf8.c:
	Add length argument to g_utf8_strchr and g_utf8_strrchr.
	
2001-06-08  Havoc Pennington  <hp@redhat.com>

	* gspawn.c: support G_SPAWN_FILE_AND_ARGV_ZERO specifying that 
	the vector passed in to g_spawn_* contains a filename to 
	execute in argv[0] then the actual argv begins at argv + 1.
	Kind of a lame hack, but this isn't something you commonly want
	to do, and avoids adding more function arguments.

2001-06-08  Pablo Saratxaga <pablo@mandrakesoft.com>

	* configure.in: Added Azeri (az) to ALL_LINGUAS

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

	* docs/Makefile.am, configure.in: Remove docs/glib-config.1.in.

	* gthread-2.0-uninstalled.pc.in (Cflags): Add @G_THREAD_CFLAGS@.

2001-06-07  Havoc Pennington  <hp@redhat.com>

	* m4macros/glib-2.0.m4: subst GLIB_GENMARSHAL, GOBJECT_QUERY, 
	GLIB_MKENUMS variables

	* gmodule-2.0.pc.in: add gmodule_supported variable

	* glib-2.0.pc.in: add glib_genmarshal, gobject_query,
	glib_mkenums variables	

	* configure.in: put G_MODULE_SUPPORTED value into 
	.pc files

	* autogen.sh: support AUTOGEN_SUBDIR_MODE

	* Makefile.am: add -uninstalled.pc.in to EXTRA_DIST

2001-06-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Look for nanosleep function. 

	* gtimer.c: Use nanosleep for g_usleep, when found.

	* gtimer.c, gtimer.h: Add g_time_val_add function. Closes #54271.

	* gasyncqueue.c: Documentation updates.

	* gthreadpool.c: Use g_time_val_add now that we have it.

2001-06-01  Jon Trowbridge  <trow@gnu.org>

       * gdate.c (g_date_update_julian): Changed to take a const
       argument, and then to cast out const.
       (g_date_update_dmy): Changed to take a const argument, and then
       cast out const.
       (g_date_get_weekday): Changed argument to be const.
       (g_date_get_month): Changed argument to be const.
       (g_date_get_year): Changed argument to be const.
       (g_date_get_day): Changed argument to be const.
       (g_date_get_julian): Changed argument to be const.
       (g_date_get_day_of_year): Changed argument to be const.
       (g_date_get_monday_week_of_year): Changed argument to be const.
       (g_date_get_sunday_week_of_year): Changed argument to be const.
       (g_date_compare): Changed arguments to be const.
       (g_date_to_struct_tm): Changed GDate argument to be const.
       (g_date_strftime): Changed GDate argument to be const.
       (g_date_clamp): Added.  The equivalent of the CLAMP macro for
       GDates.
       (g_date_order): Added.  Ensure that the first GDate argument
       preceeds the second, swapping them if necessary.
       (g_date_days_between): Added.  Computes the (signed) number of days
       between two dates.

Mon Jun  4 16:02:57 2001  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
	check if it is lower/upper before converting to upper/lower
	[ not required by ISO... ] (#55682, Jon Trowbridge)

Mon Jun  4 15:59:15 2001  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h: Make a bit more standalone by adding include
	of gerror.h. #54543.
	
	* gunicode.h: Change size_t to g_size. (Ugh)

2001-05-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.h (g_random_boolean, g_rand_boolean): Fix to stupid bug in
	g_random_boolean, also both functions now return 1 or 0 instead of
	1<<15 or 0.

	* tests/rand-test.c: Extended testcases.

	* configure.in: Remove G_HAVE_ISO_CXX_VARARGS and
	G_HAVE_ISO_C_VARARGS and define G_HAVE_ISO_VARARGS directly
	guarded by #if(n)def __cplusplus.

2001-05-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread-2.0.pc.in: Add @G_THREAD_CFLAGS@ to Cflags.

Tue May 29 18:17:11 2001  Owen Taylor  <otaylor@redhat.com>

	* autogen.sh (have_libtool): Fix GNU sedism

2001-05-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* tests/Makefile.am, tests/qsort-test.c: Add test case for the
	g_qsort_with_data func. It works. This fixes bug #52605.

	* tests/Makefile.am, tests/cxx-test.C: Now that we check for a C++
	compiler in configure.in anyway, I added a test, that the GLib
	headers can be inclued into a C++ program. This fixes bug #52605.

	* configure.in: Don't bail out, if no C++ compiler is
	found. Define G_HAVE_ISO_VARARGS only if appropriate.

	* gmessages.h: Thus we can revert the previous patch.

2001-05-29  James Henstridge  <james@daa.com.au>

	* gmessages.h: "#ifdef G_HAVE_ISO_VARARGS" will always succeed
	even when we don't have ISO vararg support.  Changed to
	"#if G_HAVE_ISO_VARARGS".

Mon May 28 11:40:34 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Check for __VARARGS__ separately for C and C++.

2001-05-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Fix typo.

Sun May 27 05:09:18 2001  Tim Janik  <timj@gtk.org>

	* gmain.c (g_main_context_prepare): unlock context when bailing
	out with a warning.
	(g_main_context_check): same here.

	* gmain.c (g_main_context_check): before returning due to
	changed pollfds, unlock context.
	
Thu May 24 21:24:16 CEST 2001 Paolo Molaro <lupus@ximian.com>

	* gmarkup.c: back out change by mitch@convergence.de and apply patch in
	bug id #52067 that fixes the same problem in a more complete manner.
	This fixes also a segfault for a malformed XML file and adds a new
	test case.

2001-05-24  Hans Breuer  <hans@breuer.org>

	* grel.c : reflect renaming of g_string_sprintfa to g_string_printfa

	* makefile.msc.in : create an additional static lib to be used from
	(at least) glib-genmarshal

2001-05-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* garray.c (g_array_remove_index_fast): Tiny speed improvement
	suggested by noon@users.sourceforge.net.

2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* config.h.win32.in: Removed POSIX_*. Defined G_THREAD_SOURCE to
	"gthread-win32.c".

	* glibconfig.h.win32.in: Define G_HAVE_ISO_VARARGS for gcc, don't
	know about MSC. Define G_THREADS_IMPL_WIN32 instead of
	G_THREADS_IMPL_POSIX and define the right static mutex macros and
	types.

	* glib.def: g_thread_create renamed to g_thread_create_full.

	* gthread.c: memcpy is not necessary here. We can simply use
	struct assignment.

	* gmessages.c: Fix compilation error on win32. Added
	GFileDescriptor, wich is gint on Unix and FILE* on win32.

2001-05-21  Andrew Lanoix <alanoix@umich.edu>

	*giowin32.c: G_IO_WIN32_WINDOWS_MESSAGES channels
	not handled correctly in g_io_win32_check()

Sun May 20 10:47:47 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Fix some problems in writing out varargs
	tests in configure.in

Fri May 18 10:52:23 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in gmessages.h: Use compile checks for ISO C99 and GNU
	extension varargs macros syntax and store result in glibconfig.h
	(G_HAVE_ISO_VARARGS, G_HAVE_GNUC_VARARGS) rather than relying
	on checking predefined macros.

2001-05-18  Michael Natterer  <mitch@convergence.de>

	* gmarkup.c: don't g_strdup()/g_free() all parsed attributes and
	their values twice but simply copy the string pointers from the
	GMarkupAttribute struct to the string arrays before passing them
	to start_element().

2001-05-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Renamed g_thread_create to
	g_thread_create_full and added macro g_thread_create, which omits
	'stack_size', 'bound' and 'priority' parameters. Also removed
	'bound' from GThread struct.

	* gthreadpool.h, gthreadpool.c: Adapted GThreadPool to the above
	changes. GThreadPool lost the 'priority' and 'bound'
	members. g_thread_pool_new the 'stack_size', 'bound' and
	'priority' parameters.

	* tests/mainloop-test.c, tests/thread-test.c,
	tests/threadpool-test.c: Adapted to the above changes.

	* gmem.c (g_mem_profile): Fixed mutex deadlock.

2001-05-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* makefile.mingw.in: Add gpattern.o to objects.

	* glib.def: Export g_thread_exit as well.

	* Makefile.am: Fix BUILT_EXTRA_DIST exporting.

Sun May 13 10:31:17 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/Makefile.am gobject/Makefile.am gmodule/Makefile.am:
	Add inter-library dependencies.

	* acinclude.m4: Remove libtool macros.

	* autogen.sh: Require libtool-1.4, automake-1.4p1.

2001-05-15  Havoc Pennington  <hp@redhat.com>

	* configure.in (AC_OUTPUT): m4macros/Makefile

	* m4macros/Makefile.am, m4macros/glib-2.0.m4,
	m4macros/glib-gettext.m4:
	m4 files moved here on server, Makefile.am added
	 
	This is so you can aclocal -I m4macros while avoiding acinclude.m4

	* Makefile.am: add m4macros subdir, remove references to glib-2.0.m4

2001-05-14  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_utf8_get_char): fix docs; they said we validated 
	the UTF-8, but we can't possibly detect partial chars since
	there's no length arg here, so trying to use this function 
	on invalid UTF-8 is a bad idea.

Thu May 10 23:21:30 2001  Owen Taylor  <otaylor@redhat.com>

	* gmessages.c (g_log_write_prefix): Avoid using stdio
	to be as robust as possible in out-of-memory.

	* gmessages.c (g_log_default_handler): Remove some dead
	code.

	* gutils.c (g_parse_debug_string): Fix to avoid mallocs.

Fri May 11 18:25:23 2001  Tim Janik  <timj@gtk.org>

	* gdataset.c:
	(g_dataset_foreach):
	(g_datalist_foreach): make these safe against removal of the
	current element.

2001-05-10  Havoc Pennington  <hp@pobox.com>

	* gmessages.c (g_log_write_prefix): change env variable to
	G_MESSAGES_PREFIXED, suggested by Tim

Thu May 10 15:19:01 2001  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_key_hash): use g_str_hash() algorithm
	to generate hashes.

	* gmem.c (standard_calloc): free() doesn't return a value
	(Mark Murnane).

2001-04-26  Havoc Pennington  <hp@redhat.com>

	* configure.in: Get rid of --enable-msg-prefix

	* gmessages.c: make whether to prefix the messages with
	appname/pid a runtime setting, not a compile-time setting.  Change
	default to include prefix for debug/warning/error type messages.

2001-05-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Renamed 'value' and 'arg' to 'data' and
	'thread_func' to 'func' to make it more consistent with the rest
	of GLib.

	* gthreadpool.c, gthreadpool.h: Moved 'stack_size' from the public
	members of GThreadPool to the private ones. Renamed 'thread_func'
	to 'func' as above. Moved up 'user_data' in g_thead_pool_new
	argument list and in GThreadPool struct.
	
Tue May  8 15:33:31 2001  Tim Janik  <timj@gtk.org>

	* gcompletion.h: removed #include <unistd.h> sneaked in by
	sopwith in november.

2001-05-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c, gthread.c, gthread.h: Moved func and arg members from
	GRealThread to GThread, such that they can be accessed by the
	user.

	* gthread.c, gthread.h: Due to popular demand (Tim being the
	populus here ;-) threads now have a 'return value', which is
	returned by g_thread_join and is either the return of the topmost
	thread function or the value given to g_thread_exit.
	
	* gthreadpool.c, tests/mainloop-test.c, tests/thread-test.c:
	Adapted to the above change.

2001-01-06  Hans Breuer  <hans@breuer.org>

	* glib.def : don't try to export g_strcpy, it is g_stpcpy;
	updated and added some tweaking for functions which got 
	renamed recently, to avoid the update hassle if it can 
	simply be done compatible. Should vanish if there is a 
	stable version for win32.

Fri May  4 11:49:18 2001  Owen Taylor  <otaylor@redhat.com>

	* Released 1.3.5

	* NEWS: Updated

	* configure.in (GLIB_MICRO_VERSION): Up version to 1.3.5,
	interface/binary age 0.

2001-05-04  Sven Neumann  <sven@convergence.de>

	* ghash.c: fixed a typo in a comment.

	* gtree.[ch]: added new functions g_tree_new_full(), g_tree_replace(), 
	g_tree_steal() and g_tree_foreach() to adapt GTree to the GHashTable
	API. Moved comments into the C file.

	* docs/reference/glib/glib-sections.txt
	* docs/reference/glib/tmpl/glib-unused.sgml
	* docs/reference/glib/tmpl/hash_tables.sgml
	* docs/reference/glib/tmpl/linked_lists_double.sgml
	* docs/reference/glib/tmpl/linked_lists_single.sgml
	* docs/reference/glib/tmpl/macros_misc.sgml
	* docs/reference/glib/tmpl/trees-binary.sgml: updated documentation
	
Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>

	* g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
	foreach() safe against removal of the _current_ element. While
	this could break some code, the new behavior is consistent with
	the rest of GLib/GTK+ and probably is what people expect in most
	cases. (Suggested by Paul Kuykendall, #50071)

Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
	(#50404, fix from Jonas Borgström)
	
Sun Apr 29 00:37:34 2001  Tim Janik  <timj@gtk.org>

	* ghook.[hc]: made hook ids a gulong.

2001-04-20  Dan Winship  <danw@ximian.com>

	* configure.in: Add a check for the Darwin dynamic linker. Use
	AC_TRY_LINK when checking for "nonposix getpwuid_r" so it notices
	"no getpwuid_r" correctly.

	* testglib.c (main): Make template[] bigger to prevent an overrun.
	Remove an unused variable. Initialize error to NULL.

	* tests/gio-test.c (main): Add a cast to prevent a warning when
	size_t is a long.

	* tests/type-test.c (main): Add an #ifdef to prevent a warning
	when G_HAVE_GINT64 is defined and G_GINT64_FORMAT isn't.

2001-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* ghash.c, ghash.h: Remove definition of g_hash_table_freeze and
	g_hash_table_thaw. Instead added G_DISABLE_DEPRECATED-guarded
	macros to ghash.h to go along the lines of the standard.

	* gscanner.c, gscanner.h: Dito for g_scanner_freeze_symbol_table
	and g_scanner_thaw_symbol_table.

	* gutils.c, gutils.h: Dito for g_dirname. g_basename is still
	defined in gutils.c, but declared ing gutils.h only
	G_DISABLE_DEPRECATED-guarded.
	
	* configure.in: Removed bashism in test for the pkg-config
	version.

	* configure.in: Rewrote test for multithread flag. Now uses
	localtime_r, which hopefully has a consistent prototype across
	different platforms. Also it uses a clever double EGREP trick
	instead of compiling, which could give false positives. Thanks to
	Dan Winship <danw@ximian.com> for the hint.

Wed Apr 18 17:35:38 2001  Owen Taylor  <otaylor@redhat.com>

	* gutils.c (_glib_gettext): Add missing static pointed
	out by Michael Meeks.

Wed Apr 18 09:37:07 2001  Owen Taylor  <otaylor@redhat.com>

	* MAINTAINERS: Removed. Keeping README, README.cvs-commits
	HACKING, and AUTHORS up to date is plenty without extra
	random files that someone thought a module should have.
	(Actually, I believe this was used for debbugs in the past.)

Tue Apr 17 11:47:07 2001  Owen Taylor  <otaylor@redhat.com>

	* Released 1.3.4

	* NEWS: Updated

Tue Apr 17 10:43:36 2001  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c: Define _GNU_SOURCE for stpcpy

	* tests/mainloop-test.c (main): Wait for all threads
	to start before beginning tests.

2001-04-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c (g_thread_pool_thread_proxy): Until now every
	thread pool always had at least one tread waiting to avoid
	switching overhead in case a new task would be added soon after
	one finished. This however means a big waste of threads, if many
	mostly inactive thread pools are involved. Now such a waiting
	thread will only wait for half a second (This value is of course
	very randomly picked) and go to the global threadpool afterwards.

Mon Apr 16 12:04:52 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Remove warnings about conflicts with the
	stable version.

	* glib-2.0.m4: Fix some of the error text to be halfway
	up to date.

	* README.in INSTALL.in: Add these to generate README, INSTAL
	(as in the stable branch). Update.

	* HACKING: Update.

2001-04-16  Havoc Pennington  <hp@redhat.com>

	* gqsort.c: docs

	* gfileutils.c: docs

	* gwin32.c: docs fixes

	* gconvert.c: docs

	* guniprop.c: docs

	* gutf8.c: docs

2001-04-16  Havoc Pennington  <hp@redhat.com>

	* glib-2.0.m4: put AC_PATH_PROG(pkg-config) before "Checking for
	glib" so the output looks right	

2001-03-23  Havoc Pennington  <hp@redhat.com>

	* gutils.c (g_parse_debug_string): make GDebugKeys argument 
	const

2001-04-14  Hans Breuer  <hans@breuer.org>

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

	* gpattern.c : include "gutils.h" to resolve the inline hassle

2001-04-11  Alexander Larsson  <alexl@redhat.com>

	* glib-2.0.m4: Pass pkg-config options
	before the other args so it works even if
	POSIXLY_CORRECT is set.

Mon Apr  9 18:57:44 2001  Tim Janik  <timj@gtk.org>

	* configure.in: increment version to 1.3.4 (binary 0, interface 0).

2001-04-05  Christian Rose  <menthos@menthos.com>

	* configure.in: Added sv to ALL_LINGUAS.

Wed Apr  4 09:18:55 2001  Tim Janik  <timj@gtk.org>

	* Released GLib-1.3.3.

Tue Apr  3 20:22:59 2001  Tim Janik  <timj@gtk.org>

	* NEWS: updates.

	* NEWS.pre-1-3: take over old news.

Tue Apr  3 12:38:16 2001  Owen Taylor  <otaylor@redhat.com>

	* glib-config-2.0.in: Exit with an error message that you
	should use pkg-config instead.

	* configure.in (PACKAGE): Require pkg-config.

	* tests/Makefile.am (EXTRA_DIST): Add utf8.txt.

	* configure.in (GLIB_MICRO_VERSION): Up MICRO to 3,
	leave interface/binary at 0.

Tue Apr  3 13:46:22 2001  Tim Janik  <timj@gtk.org>

	* glist.[hc]: added g_list_nth_prev() which walks ->prev instead
	of ->next.

	* gpattern.[hc]: added shell-style pattern matching code from beast,
	derived from the gtk_pattern_*() code, but with a couple of bug fixes
	and a number of optimizations.

2001-04-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c: Added documentation.

	* gthreadpool.c: The global thread pool now also is seperated for
	bound and unbound threads. Only threads with standard stack size
	go to the global pool. g_thread_pool_new now protects the global
	setup of inform_mutex etc. with a lock. Fixed some typos. Unlock
	the queue after g_thread_pool_wakeup_and_stop_all in the proxy.

2001-04-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c: Use the new GRealThread member "context" instead of a
	GStaticPrivate to store the thread specific main loop context.

	* gthread.c: Added "context" member to GRealThread and updated
	g_thread_create, g_thread_self and g_thread_cleanup accordingly.
	
	* gthread.c, gthread.h: Removed the functions
	g_static_private_(get|set)_for_thread and adapted
	g_static_private_(get|set) and g_static_private_free
	accordingly. This fixes Bug #51435.
	
2001-03-30  Sven Neumann  <sven@gimp.org>

	* ghash.[ch]
	* docs/reference/glib/tmpl/hash_tables.sgml: added new functions
	g_hash_table_new_full, g_hash_table_replace, g_hash_table_steal and
	g_hash_table_foreach_steal. Moved most docs out of the template
	file into the C file. Please proofread the new documentation.

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

	* glib.def: Updates.
	* tests/makefile.mingw.in
	* tests/makefile.msc.in: Add module-test rules.

Mon Mar 26 14:14:53 2001  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (INCLUDES): -DG_DISABLE_DEPRECATED

	* gmain.h timeloop.c: Surround the cruftiest stuff with
	#ifndef G_DISABLE_DEPRECATED.

	* gcompat.h gdate.h: Move compat defines back to 
	gdate.h, surround with #ifndef G_DISABLE_DEPRECATED. 
	Remove gcompat.h.

Mon Mar 26 13:34:50 2001  Owen Taylor  <otaylor@redhat.com>

	[ Patch from DindinX  <David.Odin@bigfoot.com>, added docs ]
 
 	* gstrfuncs.c, gstrfuncs.h: Add g_stpcpy () for platform that don't
 	have stpcpy ().
 	* gstrfuncs.c (g_strjoin, g_strjoinv and g_strconcat): use
 	g_stpcpy () so these functions run much faster.
 	* config.h.win32.in, glib.def: add reference to g_stpcpy ()
 	* configure.in: Add a test for the stpcpy () function.
 
2001-03-20  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
	Anders

2001-03-19  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_unichar_validate): added this function

2001-03-18  Tor Lillqvist  <tml@iki.fi>

	* gspawn-win32.c (SETUP_DEBUG): Add braces to silence gcc -Wall.

	* gspawn-win32-helper.c (write_no_error): Remove unused function.

	* tests/makefile.mingw.in (module-test.exe): Add rules for
	building module-test.

Wed Mar 14 18:46:54 2001  Tim Janik  <timj@gtk.org>

	* gscanner.[hc]: removed archaic gpointer derived_data; relict and
	added a GData member instead.
	
	* glist.[hc]: added g_list_remove_all().

	* gslist.[hc]: added g_slist_remove_all().

Sat Mar 17 19:54:51 2001  Owen Taylor  <otaylor@redhat.com>

	* timeloop.c: Reorder headers to make FreeBSD happy. 

2001-03-13  Tor Lillqvist  <tml@iki.fi>

	From Edward M. Lee  <tailbert@yahoo.com>:

	* gdate.c (g_date_set_parse): add support for dates that in the
	form "Wed Mar 14 2001". Running testgdate on cygwin requires this.

Fri Mar  9 18:01:43 2001  Tim Janik  <timj@gtk.org>

	* gscanner.[hc]: made config arg to g_scanner_new() const.

2001-03-12  Tor Lillqvist  <tml@iki.fi>

	* tests/Makefile.am (libmoduletestplugin_b_la_LIBADD,
	libmoduletestplugin_b_la_LIBADD): Link with the libgmodule la only
	on Win32.

2001-03-10  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Define G_PLATFORM_WIN32 here, too.

	* tests/Makefile.am: Use the _LIBADD dependency on libglib only on
	Win32.

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

	* README.win32: Update with some information about using configure
	and libtool.

2001-03-09  Hans Breuer  <hans@breuer.org>

	* gobject/gobject.def : updated

2001-03-08  Tor Lillqvist  <tml@iki.fi>

	* glib.def
	* gobject/gobject.def
	* gobject/makefile.mingw.in: Update.

2001-03-08  Sven Neumann  <sven@gimp.org>

	* gtree.[ch]: 
	* docs/reference/glib/tmpl/trees-binary.sgml: added new function 
	g_tree_lookup_extended().

Thu Mar  8 16:23:34 2001  Tim Janik  <timj@gtk.org>

	* ghook.[hc]: destruction cleanup. there's one
	->finalize_hook member in the hooklist now that gets
	called when a hook should be destroyed, that's it.
	that function is guarranteed to be called only when
	all ref_counts to the hook vanished, thus also when
	the hook is not in call.

2001-03-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in (FLAG_DOES_NOT_WORK): Fix typo and thus bug #51862.

Wed Mar  7 09:32:06 2001  Tim Janik  <timj@gtk.org>

	* glib-object.h: add gvaluearray.h.

	* gstring.[hc]: fixup naming of g_string_sprint*.
	
	* gtypes.h: fixed GCompareDataFunc naming.

2001-03-07  Christian Meyer  <chrisime@gnome.org>

	* configure.in: Added de (German) to ALL_LINGUAS.

2001-03-02  Christophe Merlet  <redfox@eikonex.org>

	* configure.in: Added fr (French) to ALL_LINGUAS.

2001-03-01  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_path_is_absolute): (Win32) Remove test for initial
	double backslash (UNC path), this will of course be matched by the
	test for an initial G_DIR_SEPARATOR right up front. Silly me.
	(g_find_program_in_path): Implement on Win32. Append the
	executable file name suffixes from PATHEXT in turn while looking
	for the program.
	(g_find_program_in_path): If the program we are looking for is a
	relative path in a subdirectory, don't do any path search.
	(g_get_any_init): (Win32) Also look for the USERPROFILE env var
	indicating the home directory equivalent.
	(g_find_program_in_path): (Win32): Use MAXPATHLEN, not PATH_MAX
	which isn't defined with MSVC.

	* testglib.c (main): Test g_find_program_in_path() on Win32 by
	looking for more.com and regedit.

	* glib.def: Add g_find_program_in_path.

2001-02-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c (g_thread_pool_thread_proxy): Make
	max_unused_threads work for -1 as well.

2001-02-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.h (struct _GThread): Change the order to match the order
	in g_thread_create().

	* gthread.c (g_static_rec_mutex_lock_full): Also do the right
	thing (behave like 'depth' calls to g_static_rec_mutex_lock) for a
	mutex, that is already locked.

Thu Feb 22 10:31:36 2001  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_source_remove_poll): Add missing implementation
	of g_source_remove_poll. (Pointed out by Stefan Westerfeld)

2001-02-21  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_find_program_in_path): Implement on Win32.

	Cygwin support contributed by Stefan Ondrejicka
	<ondrej@idata.sk>. Hopefully I got it all in while simultaneously
	adding support for auto*/libtool for mingw.

	* Makefile.am: Changes for auto* support on Cygwin and Win32. Do
	still distribute the hand-written makefiles and *.win32.in files,
	though. Use GIO, GSPAWN and PLATFORMDEP macros set by configure.
	Use -no-undefined. Pass -export-symbols glib.def to libtool.
	
	* configure.in: Define G_PLATFORM_WIN32 on both pure Win32 (mingw)
	and Cygwin. Add AC_CYGWIN, AC_EXEEXT and AC_LIBTOOL_WIN32_DLL
	calls for Cygwin and mingw support.  Check for %I64u guint64
	format (in MS C library). Set G_MODULE_IMPL on mingw and
	Cygwin. Use ac_object and ac_exeext.  Set GIO, GSPAWN, PLATFORMDEP
	and G_LIBS_EXTRA. Compile timeloop only on Unix. Define OS_WIN32
	automake conditional on Win32.
	
	* glib.h: Include gwin32.h also on Cygwin.

	* gfileutils.c (get_contents_posix): Use O_BINARY (defined as 0 on
	Unix) for Cygwin's sake.

	* gtimer.c (GETTIME): Reduce #ifdefs, use a macro GETTIME().

	* gconvert.c
	* gthread.c
	* gutf8.c
	* gutils.c: For code needed both on Cygwin and native Win32,
	test for G_PLATFORM_WIN32.

	* gmarkup.h: Use G_BEGIN_DECLS and G_END_DECLS.
	
	* gtypes.h: Refine GLIB_VAR definition. Also check for DLL_EXPORT
	in case compiling a static library on Win32 or Cygwin.

	* gwin32.c: No <direct.h> on Cygwin. No need for ftruncate() or
	dirent emulation on Cygwin.
	(get_package_directory_from_module) Convert return value from
	GetModuleFileName() to POSIX path on Cygwin.

	* tests/Makefile.am (progs_LDADD): Link with libglib, libgthread
	and libgmodule as appropriate. Use -no-undefined.

	* gbacktrace.c: Move #ifdefs around a bit on Win32.

2001-02-21  Tor Lillqvist  <tml@iki.fi>

	* gshell.c (unquote_string_inplace): Make static.

	* gthread.h: Include gtypes.h to be sure to get GLIB_VAR
	definition, remove definition from here.

	* gunicode.h: Remove duplicate GLIB_VAR definition from here, too.

	* gutils.c: (Win32) Use USERPROFILE as home dir if present. On
	Win2k, HOMEDRIVE and HOMEPATH aren't reliable.
	
	* Makefile.am (INCLUDES): Add -DGLIB_COMPILATION.

	* makefile.mingw.in: Remove install target, Windows isn't Unix.
	(DEFINES): Add -DDLL_EXPORT.

	* testgdate.c
	* testgdateparser.c
	* testglib.c: Undefine GLIB_COMPILATION.

	* testglib.c: Make some vars static. Add Cygwin path tests.

	* glib.def: Updates.

	* .cvsignore
	* */.cvsignore: Ignore also .obj, .dll, .lib and .exe files.

2001-02-19  Hans Breuer <hans@breuer.org>

	* glib/glib.def, gobject/gobject.def : added nissing symbols

	* gobject/makefile.msc : updated

	* glib/gmessages.c : call the "debug interrupt" before exiting the
	program, if build with msvc as debug version. Which gives the opportunity
	to see the callstack, etc.

	* glib/gthread.c : thread->pid is only defined #ifdef
	G_THREAD_USE_PID_SURROGATE

Mon Feb 19 07:32:38 2001  Tim Janik  <timj@gtk.org>

	* glib-config-2.0.in (lib_glib): my name is glib-config-2.0!
	don't exit with errorcode!=0 for --help or -h.
	
	* Makefile.am:
	* configure.in: build glib-config-2.0.

2001-02-17  Havoc Pennington  <hp@pobox.com>

	* gthread.c: include string.h

        Applied patch from Soeren Sandmann:
	
	* testglib.c: const fixes

	* gwin32.h: format cleanups

	* gutils.c (g_atexit): constify a variable
	(g_find_program_in_path): constification
	(g_basename): G_CONST_RETURN
	(g_path_skip_root): G_CONST_RETURN
	(g_getenv): G_CONST_RETURN
	(g_get_user_name): G_CONST_RETURN
	(g_get_real_name): G_CONST_RETURN
	(g_get_home_dir): G_CONST_RETURN
	(g_get_tmp_dir): G_CONST_RETURN
	(g_get_prgname): G_CONST_RETURN
	(_glib_gettext): G_CONST_RETURN

	* gunicode.h: formatting cleanups

	* gstrfuncs.c (g_strerror): G_CONST_RETURN
	(g_strsignal): G_CONST_RETURN

	* gspawn.c (g_execute): const on variables

	* gmessages.c (printf_string_upper_bound): fix const on a variable

	* gmem.c (g_mem_chunk_new): make the "name" arg const
	(struct _GRealMemChunk): make the "name" field const

	* gfileutils.c (g_file_open_tmp): store const return in a const
	gchar* variable

	* gdataset.c (g_quark_to_string): G_CONST_RETURN

Sat Feb 17 07:26:33 2001  Tim Janik  <timj@gtk.org>

	* configure.in (G_MODULE_HAVE_DLERROR): add check for broken RTLD_GLOBAL
	(on OSF1 V5.0).

2001-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, configure.in: Reverted the changes necessary to
	enlarge the system thread for G_THREAD_USE_PID_SURROGATE.

	* gthread.c: Now implement G_THREAD_USE_PID_SURROGATE in gthread.c
	instead of gthread/gthread-posix.c. While the latter has the
	advantage, that it is conceptually cleaner, it makes
	g_thread_self_posix_impl _very_ slow and that hurts
	GStaticRecMutex and other things. So the new version is less
	clean, but faster.

2001-02-09  Havoc Pennington  <hp@redhat.com>

	* gconvert.c (g_convert): don't overwrite errors

	* gerror.c (g_set_error): improve warning message if an error is
	overwritten	
	(g_propagate_error): ditto

2001-02-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added functions g_static_rec_mutex_init,
	g_static_rec_mutex_free, g_static_private_init,
	g_static_private_free, g_static_rw_lock_init to allow the usage of
	all those types dynamically. (g_static_rw_lock_free already
	existed). Aditionally freed static_private indeces are reused
	now. Untill now the array would just grow if you would use more
	and more static_private. That required adding a slist of all
	running threads, which could potentially be of good use later. It
	is not exported however. Renamed a LOCK and small indentation
	fixes.

	* tests/thread-test.c: Test the new static_private index freing
	and reusing feature.
	
Mon Feb 12 15:01:09 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in (gtk_doc_min_version): Add check for gtk-doc version.

2001-02-10  Tor Lillqvist  <tml@iki.fi>

	* gtypes.h
	* gutils.h: Move GLIB_VAR definition from gutils.h to gtypes.h

	* glib.def
	* gmem.h: Mark glib_mem_profiler_table for export.

	* gwin32.c (get_package_directory_from_module): Don't store
	address of local variable in hashtable.

2001-02-08  Fatih Demir	<kabalak@kabalak.net>

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

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

	* gwin32.c (g_win32_getlocale): Use "nn" for Nynorsk, as nn.po
	files are appearing now. If the sublanguage starts with '@', don't
	use a '_' separator. South Africa is 'ZA', not 'SA'.

Sun Feb  4 07:38:32 2001  Tim Janik  <timj@gtk.org>

	* docs/debugging.txt: s/glib_trap_/g_trap_/. add comments on
	g_trap_instance_signals, g_trace_instance_signals and
	GRUNTIME_DEBUG.

	* gmem.c: s/glib_trap_/g_trap_/.
	
2001-02-04  Tor Lillqvist  <tml@iki.fi>

	* tests/Makefile.am (thread_LDADD): Change order of libs,
	put progs_LDADD last. Needed for cygwin, says jbdoll@kepri.re.kr.

2001-02-02  Tor Lillqvist  <tml@iki.fi>

	* giochannel.h
	* giowin32.c
	* gmain.c: Stylistic cleanups. Use G_STRLOC in g_warning() calls.

	* glib.def: Add missing functions.

2001-02-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added g_static_mutex_init to allow
	initialization of a GStaticMutex, that can not be initialized with
	G_STATIC_MUTEX_INIT, for example in allocated structures.

Wed Jan 31 13:46:58 2001  Owen Taylor  <otaylor@redhat.com>

	* acinclude.m4 glib-gettext.m4: Fix problem with --disable-nls.

2001-01-31  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Corresponding change as below to
	GStaticMutex.

2001-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added g_static_mutex_free to allow using
	GStaticMutexes with limited lifetime without leaking.
	
	* configure.in: GStaticMutex doesn't have to provide extra space
	for debugging information for G_ERRORCHECK_MUTEXES, as then the
	non-default implementation (runtime_mutex) is used anyway.

	* gthread.h (g_cond_wait): Added debug information for
	g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.

2001-01-29  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Use the same GMutex structure as the
	configure-generated glibconfig.h does.

	* gstrfuncs.c (g_strsignal): Declare strsignal() on Cygwin, too,
	says jbdoll@kepri.re.kr.

2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c: Broadcast the condition, if there are waiting
	readers, as all might read at the same time. Only signal the
	writer thread, if there are no more readers.

2001-01-25  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in
	* */makefile.mingw.in: Protect the rule to rebuild makefile.mingw
	if makefile.mingw.in has changed with a check if said .in file
	exists. (This rule is mainly a convenience for yours truly.)

	* giowin32.c: Socket support rewritten. It was utterly broken, and
	untested in fact. We still do use a thread for each socket being
	watched, but instead of blocking in recv() (which of course was
	plain stupid for sockets being listen()ed on in a server-type
	application), we block in select(). The read method for sockets
	calls recv(). It is now possible for the application to call
	accept(), recv() or send() in the callback, just like on
	Unix. Tested with code kindly provided by Andrew Lanoix.

	Rename g_io_channel_win32_new_stream_socket() to
	g_io_channel_win32_new_socket() as it isn't restricted to stream
	sockets.
	
	* gmain.c (g_poll): Related changes in the Win32 version of
	g_poll(). When polling for messages, always do a PeekMessage()
	first. We used to miss messages if several were posted between
	calls to g_poll().

	* giochannel.h: Improve Win32-related comments.

	* gutf8.c: (Win32) Include <stdio.h> for sprintf.

	* tests/gio-test.c: (Win32) Add tests for polling for Windows
	messages.

	* tests/makefile.mingw.in: Remove superfluous compilation command
	line.

2001-01-23  Alex Larsson  <alexl@redhat.com>

	* gmain.c (g_source_callback_unref): Free the callback
	(g_source_set_callback): Initialize the callback refcount

2001-01-20  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_get_codeset): (Win32) Even if g_get_codeset() is
	currently commented out from gutils.h, fix it to return the same
	CP%d value as g_get_charset().

2001-01-19  Kjartan Maraas  <kmaraas@gnome.org>

	* gconvert.c: Fix typo.
	* gfileutils.c: Same here.
	* configure.in: Added no to ALL_LINGUAS
	
2001-01-17  Tor Lillqvist  <tml@iki.fi>

	* gwin32.c (g_win32_getlocale, g_win32_error_message): Add doc
	comments.
	(g_win32_get_package_installation_directory): Add one parameter,
	the name of a DLL in the package. Add possibility to use that to
	deduce the installation directory if not entered into the
	Registry. Make the return value dynamically allocated.
	(g_win32_get_package_installation_subdirectory): New convenience
	function.

	* gutils.c (GLIB_LOCALE_DIR)
	* gwin32.h: Adapt accordingly.

	* testglib.c (main): Adapt tests accordingly.

Tue Jan 16 23:20:38 2001  Owen Taylor  <otaylor@redhat.com>

	* gutils.c glibintl.h: Optimize for size rather than speed by
	making _() always call _glib_gettext() instead of conditionally
	calling gettext() or _glib_gettext_init. glib only uses translated
	strings in slow error handling code anyways.

	* glibintl.h: g'ify types.

	* Makefile.am: include glibintl.h in _SOURCES

2001-01-17  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Define ENABLE_NLS and GETTEXT_PACKAGE.

	* makefile.mingw.in
	* makefile.msc.in: Use the GNU intl library.

	* gwin32.c (g_win32_get_package_installation_directory): New
	function. To be used by various GLib-using packages to get their
	installation directory, which should be stored in the Registry by
	some installer.

	* gwin32.h: Declare it.

	* testglib.c (main): Test it.

	* gutils.c: On Win32, define GLIB_LOCALE_DIR using
	g_win32_get_package_installation_directory().

	* glib.def: Update.

Mon Jan 15 21:39:06 2001  Owen Taylor  <otaylor@redhat.com>

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

Mon Jan 15 21:12:49 2001  Owen Taylor  <otaylor@redhat.com>

        * configure.in acconfig.h glibintl.h gutils.c
	po/{Makefile.in.in,POTFILES.in,po2tbl.in}: Add gettext
	support.

	* glib-gettext.m4 acinclude.m4: Clean up the GTK+ gettext macros
	some more and put them in this file, though they also need
	to be included in acinclude.m4 due to the brokeness of
	aclocal.

	* gspawn.c gspawn-win32.c gutf8.c gconvert.c gfileutils.c
	gshell.c: Remove dummy _() #defines, include glibintl.m4.

2001-01-09  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c: Rework the changes needed to pass mainloop-test. Now
	we don't need to call TerminateThread() after all, which is a
	relief, as the docs have a BIG RED WARNING SIGN about using that
	API. Instead, when closing a fd channel that has a reader thread
	running, just mark it as non-running and additionally mark the fd
	as ripe for closing. When the reader thread hopefully eventually
	gets something (and EOF or some actual data), it will note that it
	shouldn't be running, break out of the loop, and close the fd.

	The socket channel closing code should probably be changed
	similarily, but that will have to wait until I have a test case.
	
	(g_pipe_readable_msg, g_io_channel_win32_new_pipe,
	g_io_channel_win32_new_pipe_with_wakeups,
	g_io_channel_win32_pipe_request_wakeups,
	g_io_channel_win32_pipe_readable): Remove these, have been
	obsolete for some time.
	
	* gutils.c (g_basename, g_dirname): Don't warn about deprecation
	on Win32. Code written for GLib 1.2 doesn't have much choice but
	to use GLib >= 1.3 on Win32.

	* glib.def: Update.

2001-01-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Made g_profile_mutex a GMutex* instead of
	G_LOCK_DEFINE_STATIC to avoid deadlock for thread implementations
	without native static mutexes. Contruct g_profile_mutex in
	g_mem_init().

2001-01-06  Tor Lillqvist  <tml@iki.fi>

	* gconvert.c (g_locale_to_utf8, g_locale_from_utf8): Get len using
	strlen() if arg is negative in the Win32 code, too.

	* giowin32.c: Changes necessary to be able to run
	mainloop-test. We can't close the fd that our (internal) reader
	thread is sitting doing a blocking read() from. We must terminate
	the thread first. Keep track of thread handle, and close it when
	thread is dying. Start reader thread with the lower-level
	CreateThread() instead of _beginthreadex() from the C runtime, in
	order to be able to use TerminateThread(). Hopefuly this isn't
	harmful.

	* glib.def: Update.

	* tests/makefile.{mingw,msc}.in (TESTS): Add mainloop-test and
	unicode-encoding.

	* tests/mainloop-test.c: Portability: <unistd.h>, need <fcntl.h>
	on Win32.

	* tests/unicode-encoding.c (process): Add missing "line" argument
	to fail(). On Win32, convert UTF-16LE, as libiconv'c ivonf always
	converts to UTF-16BE if we ask for unspecific UTF-16.
	(main) Handle also '\r'.

Fri Jan  5 11:25:42 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in (PACKAGE): move $enable_debug down below
	checks for GCC to avoid setting CFLAGS prematurely,
	change checks to avoid adding -g twice.

	* gutf8.c (g_ucs4_to_utf8): Support len < 0 to mean
	0 termination.

	* gutf8.c (g_utf8_to_ucs4): Terminate result with 0.

	* tests/mainloop-test.c (main): Fix uses of 
	g_main_loop_destroy().

	* tests/unicode-encoding.c tests/Makefile.am tests/utf8.txt:
	Tests for unicode-conversion code.

	* gconvert.c (g_convert, g_convert_with_fallback): work around
	a couple of GNU libc bugs.

	* gconvert.[ch] (g_{locale,filename}_{to,from}_utf8): Standardize
	arguments to match g_convert(). Document.

	* gunicode.[ch]: 
	  - Implement conversion functions to and from UTF-16
	  - Standardize unicode conversion functions on prototype like
	    g_convert.
	  - Add a lot of error checking to unicode conversion functions.

	* gunicode.[ch] (g_utf8_to_ucs4_fast): Add fast, non-checking
	variant of g_utf8_to_ucs4.

	* gutf8.c (g_utf8_validate): 
	 - add g_return_if_fail (str != NULL).
	 - add checks for overlong strings, non-valid Unicode characters (>= 110000)
	   and single surrogates.

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

	* testglib.c (main): Add test for g_path_skip_root().

	* gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
	forward slashes in the template.

	* gutils.c (g_path_skip_root): On Win32, skip the \\server\share
	part of UNC paths. On all platforms, skip several initial
	slashes. Add a few comments.
	(g_get_any_init): On Win32, in case HOME is Unix-style with
	(forward) slashes (some other applications apparently set it up
	this way, convert to backslashed form.

	* configure.in (glib_os): Remove stray 'v'. Add case for mingw,
	although using configure for mingw surely doesn't work yet.

	* glib.def: Update.

2001-01-02  Havoc Pennington  <hp@redhat.com>

	* configure.in: remove glib-config-2.0

	* Makefile.am: remove glib-config-2.0

2001-01-03  Havoc Pennington  <hp@pobox.com>

	* tests/Makefile.am (INCLUDES): -I$(top_srcdir)/gmodule, 
	fix from Michael Meeks

	* Makefile.am (INCLUDES): DISABLE was spelled wrong

Wed Jan  3 14:10:49 2001  Owen Taylor  <otaylor@redhat.com>

	* gmain.[ch]: Switch GMainLoop to be ref/unref, use to
	make dropping reference to running loop safe.

Wed Dec 13 20:41:49 2000  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_source_unref_internal): Unref callback->cb_data
	if it was still set when the source is freed. (Usually, this
	will be done by g_source_destroy.)

2001-01-02  Dan Winship  <danw@helixcode.com>

	* garray.h (g_array_append_val, g_array_prepend_val,
	g_array_insert_val): Use parentheses around an argument to make
	these cause an error if you pass a non-lvalue for the value,
	rather than silently doing the wrong thing.

2000-12-29  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Add GLIB_SIZEOF_VOID_P and GLIB_SIZEOF_LONG.

	* glib.def: Update.

	* {.,*}/makefile.{mingw,msc}.in: Add -DG_ENABLE_DEBUG.
	
Fri Dec 29 14:53:18 2000  Tim Janik  <timj@gtk.org>

	* configure.in: we can't grow _cv_ variables by using a backticked
	expr that refers back to the variable (glib_cv_sizeof_system_thread for
	G_THREAD_USE_PID_SURROGATE), that'd keep the variable growing every time
	it's evaluated. quantum states, anyone?)

Thu Dec 28 10:21:46 2000  Tim Janik  <timj@gtk.org>

	* gmem.[hc]: got rid of outdated dmalloc support. provide g_try_malloc()
	and g_try_realloc() which _may_ fail and return NULL.
	nuked g_mem_check(), provided GMemVTable for memory function
	virtualization, alterable at program startup with g_mem_set_vtable().
	provided glib_mem_profiler_table and g_mem_profile() to support limited
	profiling information out of the box (uses mprotect() for free()ed areas
	on linux).
	provide globally visible G_MEM_ALIGN.
	buncha cleanups.

	* docs/macros.txt: file to get a clue about the various configuration
	macros.

	* docs/debugging.txt: explain debugging traps.

	* configure.in: got rid of --enable-mem-check and --enable-mem-profile,
	define GLIB_SIZEOF_VOID_P and GLIB_SIZEOF_LONG. check malloc prototypes
	and define SANE_MALLOC_PROTOS is we can use them.
	<boy, is this file a mess>

	* gutils.c, gscanner.c: fix up compatibility warnings, use g_message().

2000-12-27  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update.

2000-12-25  Tor Lillqvist  <tml@iki.fi>

	* gmessages.c: (Win32) Use a MessageBox for fatal
	messages. Collect eror message into a buffer, and display that.

	* glib.def: Update.

	* glibconfig.h.win32.in: Update. Remove unused wchar and wctype
	macros, add G_MODULE_SUFFIX.

2000-12-24  Ali Abdin  <aliabdin@aucegypt.edu>

	* Makefile.am, gcompat.h, glib.h: New gcompat.h header file
 	  as recommended by Havoc.

	* gdate.c, gdate.h, testgdate.c,
	  docs/reference/glib/glib-sections.txt,
	  docs/reference/glib/tmpl/date.sgml, tests/date-test.c: Rename some
	  of the gdate functions to use the '_get' in their name. Patch
	  reviewed by Havoc.
		
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".

	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)

2000-12-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c: Updated G_RAND_DOUBLE_TRANSFORM to be more
	accurate. Redid g_rand_double() such that it returns 52 bits after
	the point instead of 32 as before. That OTOH requires calling
	g_rand_int() twice. Overhauled g_rand_int_range(), which is easier
	now thanks to the new precision of g_rand_double(). Thanks to
	Sverre Johansen <sj@ifi.uio.no> for the hint.

	* grand.h: Added g_rand_boolean() and g_random_boolean()
	macros. While they could be omitted due to extreme simplicity,
	they make intention clearer in code and are therefore good to have.

	* grand.c, grand.h: Renamed all 'min' and 'max' parameters to'
	begin' and 'end' resp. to avoid making people think, that 'max' is
	included in the interval. 'end' now isn't, whereas 'begin'
	is. That's similar to the use in the STL.

	* gslist.c, glist.c: Ok, I'm a moron. When I originally
	implemented ENABLE_GC_FRIENDLY, I forgot to include config.h into
	the affected files. Now that Alex did that for those two,
	inevitable typos surfaced, which are now fixed.
	
	* garray.c, ghash.c, gqueue.c, gtree.c: Include config.h as well,
	as ENABLE_GC_FRIENDLY should be known.

2000-12-19  Alexander Larsson  <alexl@redhat.com>

	* configure.in:
	Added --disable-mem-pools option.

	* glist.c:
	* gslist.c:
	* gnode.c:
	* gmem.c:
	Disable free list and memory chunks if DISABLE_MEM_POOLS is defined.

2000-12-17  Tor Lillqvist  <tml@iki.fi>

	* gutf8.c (g_utf8_get_charset_internal): (Win32) Use GetACP to get
	the current ANSI codepage.

	* gunicode.h: Add comment that the static string g_get_charset
	sets the parameter to point to should be copied in case the
	charset might be changed later in the program.

2000-12-14  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: No need to -DGSPAWN_HELPER when
	compiling gspawn-win32-helper any longer.

	* giowin32.c (g_io_win32_dispatch): Warn if no callback. Call
	callback correctly.
	(g_io_win32_create_watch): Fix typo.
	(g_io_win32_fd_create_watch): Ditto.
	(g_io_channel_unix_new): If it is a file descriptor (i.e., a Unix
	fd lookalike provided by the C library), call
	g_io_channel_win32_new_fd(). If it is a socket (from WinSock),
	call g_io_cahnnel_win32_new_stream_socket(). Hopefully sockets and
	fds don't overlap. TODO: Implement also datagram sockets.
	(g_io_channel_win32_poll): Call g_main_context_get_poll_func().

	* gcompletion.h: Include <unistd.h> only on Unix. Is this
	inclusion really needed here? OTOH, do include <stddef.h>, for
	size_t.

	* gmessages.c: (Win32) Don't define a function called "write" that
	might clash with the prototype from <io.h>, use a #define.

	* glib.def: Update.

	* gmain.c (g_source_add_poll): Don't return a value from void
	function.
	(g_main_context_get_poll_func): Compile also for non-Win32, as
	presumably was intended. The result var is a GPollFunc, not a
	GPollFunc*. Return the result!

2000-12-13  Havoc Pennington  <hp@redhat.com>

	* gconvert.c (open_converter): make static

	* gutf8.c (g_utf8_validate): Simplify logic a bit, maybe 
	speeding it up - now we just return FALSE if we had to bail out
	for any reason before getting to the end of the string, as defined 
	by a nul byte if len was -1, defined by the len otherwise. This 
	also fixes a bug where nul bytes were not treated as invalid 
	when the length was specified.

2000-12-12  Havoc Pennington  <hp@pobox.com>

	* gmain.c (g_main_context_destroy): don't try to use thread stuff
	unless G_THREADS_ENABLED
	(g_main_context_query): ditto
	(g_main_context_check): ditto
	(g_main_loop_quit): ditto

Tue Dec 12 18:58:22 2000  Tim Janik  <timj@gtk.org>

	* ghash.c (g_hash_table_remove): return whether a value
	got removed.

Tue Dec 12 15:18:10 2000  Owen Taylor  <otaylor@redhat.com>

	* gmain.[ch]: Revert unauthorized changes.

2000-12-12  Elliot Lee  <sopwith@redhat.com>

	* gmain.c, gmain.h (g_main_context_new, g_main_context_destroy):
	GMainContext useful in implementing some additional styles of
	main loop usage.  To do this, however, Joe Hacker needs to be able
	to create/destroy GMainContext's at will. This is just an export
	of existing functionality, rather than any new functionality.

	They are listed in the "Low level functions for implementing custom
	main loops" section of the header file, to avoid confusing people.

Sun Dec 10 10:47:11 2000  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_source_destroy_internal): Remove pollfds
	from the context here, not when actually freeing the
	source.

	* gmain.c (g_source_unref_internal): Free source list
	and source, call source->source_funcs->destroy().

	* giochannel.c: Unreference io_channel properly.

Thu Dec  7 15:22:30 2000  Owen Taylor  <otaylor@redhat.com>

	* tests/mainloop-test.c (recurser_start): Add a bunch
	of unrefs.

	* gmain.c (g_source_attach): Reference the source
	when adding (pointed out by Elliot)

2000-12-08  Raja R Harinath  <harinath@cs.umn.edu>

	* acglib.m4 (GLIB_AC_DIVERT_BEFORE_HELP): 
	Rename from GLIB_DIVERT_BEFORE_HELP.  
	Update to track autoconf 2.49b.
	* configure.in: Reflect above change.
	(AC_EGREP_HEADER): Rename from really obselete AC_HEADER_EGREP.
	(debug_default): Replace "if test `expr ...`" with "case". 

	* tests/Makefile.am (TESTS): Rearrange into other variables, and
	include run-markup-tests.sh.
	(TESTS_ENVIRONMENT): New.  Pass $srcdir to tests.
	(noinst_PROGRAMS): Rename to ...
	(check_PROGRAMS): ... this.  'automake' ensures that these are
	built before running the tests.
	* tests/run-markup-tests.sh: Support $srcdir != $builddir.

2000-12-08  Havoc Pennington  <hp@pobox.com>

	* tests/Makefile.am (TESTS): move markup-test to noinst_PROGRAMS;
	it isn't a proper test, the proper test would be 
	run-markup-tests.sh, but that can't go in tests, so we need 
	a manual make check rule. Didn't do that yet.

2000-12-07  Raja R Harinath  <harinath@cs.umn.edu>

	* gmain.h: Don't put anything after an #endif.
	* gmain.c: Likewise.

2000-12-06  Havoc Pennington  <hp@pobox.com>

	* tests/strfunc-test.c (main): add g_strdupv test

	* gstrfuncs.c (g_strdupv): Add a function to copy 
	an array of strings

Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com>

        * gmain.[hc]: Major change in API for creating sources
	to handle multiple main loops (GMainContext *). 

	GSources are now exposed as GSource * and implemented
	with structure derivation.

	* giochannel.[ch]: Changed vtable for GIOChannel to correspond
	to the new mainloop API, add g_io_channel_create_watch().
	 
	* gtypes.h: Move GTimeVal here.

	* gthread.h: Remove gmain.h include to avoid circularity.
	
        * giounix.c: Update for new GMain API.
	 
	* giowin32.c: Update for new GMain API. (No check for
	proper compilation or working.)

	* timeloop.c timeloop-basic.c: A benchmarking program for
	the main loop comparing the main loop against a 
	hand-written (timeloop-basic.c) variant. 

	* tests/mainloop-test.c: New torture test of mainloop.
	
	* docs/Changes-2.0.txt: Started. Added text about
	changes to GMain.

	* gmain.c (g_main_add_poll_unlocked): Initial fd->revents
	to zero. (#8482, Benjamin Kahn)

2000-12-01  Tor Lillqvist  <tml@iki.fi>

	* {.,*}/makefile.msc.in: Include make.msc from GLib's build subdir.

	* makefile.{mingw,msc}.in (glib_OBJECTS): Add gunibreak.

	* glib.def: Update correspondingly.

2000-11-21  Havoc Pennington  <hp@pobox.com>

	* gmacros.h: Provide G_CONST_RETURN which is 'const' by default,
	and nothing when G_DISABLE_CONST_RETURNS is defined.

2000-11-29  Havoc Pennington  <hp@redhat.com>

	* gunidecomp.c (COMBINING_CLASS): 
	s/UNICODE_LAST_CHAR/G_UNICODE_LAST_CHAR/

	* gunichartables.h: Update for data in Unicode 3.0.1

	* gunidecomp.h: Ditto
	
	* gunicode.h (GUnicodeBreakType): Enum for line break properties
	(g_unichar_break_type): Get the break property for a char
	
	* gunibreak.h: Autogenerated line break property tables

	* gunibreak.c (g_unichar_break_type): added 
	
	* Makefile.am (EXTRA_DIST): dist gen-unicode-tables.pl

	* Makefile.am (libglib_1_3_la_SOURCES): Add gunibreak.h, gunibreak.c
	
	* gen-unicode-tables.pl: Include the script to update the unicode
	char tables

2000-11-28  Elliot Lee  <sopwith@redhat.com>

	* gmarkup.c: Fix warnings.

	* guniprop.c, gunidecomp.c: Make warnings go away by using
	GPOINTER_TO_INT() instead of (int).

	* gcompletion.[ch]: Add g_completion_set_compare(),
	to allow (for example) using case-insensitive completion.

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

	Patches by Hans Breuer:
	
	* gspawn-win32.c: Move the code for gspawn-win32-helper to its own
	file.

	* makefile.{mingw,msc}.in: Change accordingly.

	* gspawn-win32-helper.c: New file.

	* Makefile.am (EXTRA_DIST): Add it.

	* gmarkup.c (find_current_text_end): Fix assertion not to check an
	uninitialised variable.

2000-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c: Set the thread data before locking the mutex, because
	the locking call might use g_thread_self ().

	* gthread.h: Do only show the location of the locking/unlocking
	for -DG_ERRORCHECK_MUTEXES and not the name of the mutex. Add the
	errorcheck capability for g_cond_wait and g_cond_timed_wait as
	well.	

2000-11-27  Havoc Pennington  <hp@redhat.com>

	* gthread.h: Add void in empty function arg list

2000-11-22  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: Add gqsort.

	* glib.def: Update.

2000-11-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Add a surrogate for thread priorities using PID
	niceness for systems with no thread priorities and different PIDs
	for threads of the same process (most notably: Linux). Define
	G_THREAD_USE_PID_SURROGATE in that case, as used by
	gthread-posix.c. Also make the system thread bigger by
	sizeof (long) to contain the thread's PID.

	* gfileutils.c: Include stdlib.h for mkstemp prototype.

	* gthread.c: Add priority range checks to the affected functions.

	* gthreadpool.c: Remove unused variable.

Mon Nov 20 18:55:17 2000  Jonathan Blandford  <jrb@redhat.com>

	* gtree.[hc]: Patch from David Benson <daveb@idealab.com> to add
	user_data support to gtree functions.

Mon Nov 13 18:35:52 2000  Jonathan Blandford  <jrb@redhat.com>

	* gtypes.h (GCompareFuncData): new func type to let you use user
	data when comparing nodes.

	* gslist.c (g_list_sort_with_data): new function to sort with
	user_data. 

	* glist.c (g_list_sort_with_data): new function to sort with
	user_data. 

	* garray.[ch]: Added convenience functions to sort arrays.

2000-11-16  Havoc Pennington  <hp@redhat.com>

	* guniprop.c (g_unichar_isspace): Use a switch here, maybe helps 
	the compiler optimize things. Also, ' ' is a SPACE_SEPARATOR,
	so don't special case it.

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

	* glib.def: Add g_trash_stack entry points.

Fri Nov 17 15:43:00 2000  Owen Taylor  <otaylor@redhat.com>

        * Released 1.3.2
	
	* NEWS: Update.

	* tests/Makefile.am (dist-hook): Add code to distribute
	markup test files.

2000-11-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Check for the sched.h header and include it on
	gthread/gthread-posix.c if available.

	* configure.in: Add -D_POSIX4_DRAFT_SOURCE to
	GTHREAD_COMPILE_IMPL_DEFINES. Also add -D_POSIX4A_DRAFT10_SOURCE
	to G_THREAD_CFLAGS. Really deploy GTHREAD_COMPILE_IMPL_DEFINES,
	when searching for thread libs. Look for sched_* functions in
	-lrte as well. All of that is necessary on DG/UX.

	* configure.in: Use AC_TRY_COMPILE instead of AC_EGREP_HEADERS in
	various places to make it work more reliable, to make it accept
	macros instead of functions etc.

	* configure.in: Replace some NULL's for checks with 0 to make it
	work without stdio.h everywhere.

	* configure.in, gutils.c: changed the test for getpwuid_r to first
	test for a posix version and then for a non-posix version. No code
	change in gutils.c. Again this change deals better with getpwuid_r
	being a macro and not a function. Most of the above with kind help
	from Tethys <tet@isengard.europe.dg.com>. This fixes Bug #13403.
	
2000-11-14  Tor Lillqvist  <tml@iki.fi>

	* gwin32.h: Make #endif comment match #ifdef.

Mon Nov 13 14:00:20 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Up version to 1.3.2

	* gconvert.h (enum GConvertError): Remove trailing ,

	* gfileutils.c (g_file_open_tmp): Fix comment to 
	properly describe return value.

2000-11-13  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Add USE_LIBICONV.

	* gconvert.c: Check G_OS_WIN32 only after including glib.h. 

	* glib.def: Update.

2000-11-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c (g_static_rec_mutex_*): Made recursive mutexes also
	work when the thread system is not (yet) initialized.

Sun Nov 12 18:34:32 2000  Owen Taylor  <otaylor@redhat.com>

	* gconvert.[ch]: Create wrapper functions for iconv()
	so that we can transparently use the native iconv, 
	libiconv, or (in the future) a mini-iconv included
	with glib.

	* glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@

	* INSTALL: Added note about libiconv.

	* configure.in: Add checks for libiconv from pango. If
	EILSEQ is not defined in errno.h add define for it into
	glibconfig.h so g_iconv can use it. (Note, recompiling
	from a system without EILSEQ to a system with EILSEQ
	will break binary compatibility)

2000-11-12  Robert Brady  <robert@suse.co.uk>

	* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8

	* gconvert.c, gconvert.h: Add g_filename_{to,from}_utf8 and
	g_locale_{to.from}_utf8.  The locale_ variant honours 
	nl_langinfo(CODESET), the filename_ variant uses UTF-8 unless
	asked otherwise.

	(g_convert): Add G_CONVERT_ERROR_PARTIAL_INPUT error, if bytesread
	!= length and no bytesread pointer passed.

Sun Nov 12 15:29:53 2000  Owen Taylor  <otaylor@redhat.com>

	* gfileutils.[ch]: template is a reserved word in
	C++ s/template/tmpl/. 

2000-11-11  Havoc Pennington  <hp@pobox.com>

	* gmarkup.c (g_markup_parse_context_parse): Handle a long stream
	of bytes containing no UTF-8 character starts

2000-11-11  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add missing entry points.

	* gfileutils.c (g_mkstemp): Improve chance to generate unique
	names with less effort a bit.

	* gfileutils.h: Add g_file_open_tmp() declaration.

	* testglib.c: Include <io.h> on Win32.

	* makefile.mingw.in: Correct the way to invoke sub-makes.

Sun Nov  5 13:20:54 2000  Owen Taylor  <otaylor@redhat.com>

	* glib-object.h: Add gtypemodule.h

2000-11-11  Tor Lillqvist  <tml@iki.fi>

	* gfileutils.c (g_file_open_tmp): New function, suggested by Havoc
	earlier this month.
	(g_mkstemp): Use only one case for letters in temp file name, as
	this will be used on systems with case-insensitive file systems.

	* testglib.c (main): Test g_mkstemp() and g_file_open_tmp().

2000-11-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthreadpool.c: Don't take other threads with other priorities
	into account as changing the priority is highly
	unportable. (Actually using it at all already is unportable, but
	even sometimes where that works, changing priority is not
	possible).

2000-11-05  Havoc Pennington  <hp@pobox.com>

	* gmarkup.h: rename G_MARKUP_FOO to
	G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG

	* gmarkup.c: don't start doc comments with "Returns"
	
2000-11-05  Havoc Pennington  <hp@pobox.com>

	* gmarkup.c: inline docs
	(unescape_text): properly check strtoul for failure.
	
	* gerror.c (g_propagate_error): Free the src error if the dest
	location is NULL - I'm pretty sure that's what this function was 
	supposed to do.

2000-11-05  Havoc Pennington  <hp@pobox.com>

	* gutils.c (g_find_program_in_path): cleanup docs, sync param 
	names to those in the header

	* gfileutils.c (g_mkstemp): clean up docs

	* gshell.h: sync param names with param names in .c file

	* gfileutils.h (enum GFileTest): remove trailing comma from last
	member, confuses gtk-doc

	* gmarkup.h: s/GMarkupErrorType/GMarkupError/g; to follow
	convention

2000-11-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gasyncqueue.c: Added documentation for asyncronous queues.

	* gspawn.c: Include sys/select.h (some platforms need it for
	select). 

	* gspawn.c: Changed unportable __FUNCTION__ to the verbatim
	function name.

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

	* gutils.c
	* gutils.h
	* gfileutils.c
	* gfileutils.h: Actually, g_mkstemp() is better suited in gfileutils.

2000-10-30  Tor Lillqvist  <tml@iki.fi>

	* configure.in: Check for mkstemp.

	* gutils.c (g_mkstemp): New function. If HAVE_MKSTEMP, just call
	it, otherwise use code lifted from glibc.

	* gutils.h: Declare it.

	* glib.def: Here, too. Plus two missing functions.

2000-10-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gcache.h, gcache.c, ghash.h, ghash.c, grel.c, grel.h, gtypes.h:
	Introduced new function type GEqualFunc to return TRUE for equal
	params. This is now used instead of GCompareFunc (which should
	work akin to strcmp) here. This kind of fixes Bug #14412. Note
	that technically GCompareFunc and GEqualFunc are still the same
	types, as gint == gboolean.

	* ghash.h, gutils.c: g_int_equal and g_direct_equal now return
	gboolean to be really become GEqualFunc.

	* gscanner.c, testglib.c, tests/hash-test.c: Some tiny changes to
	follow the above change.

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

	* makefile.{mingw,msc}.in (glib_OBJECTS): Add gmarkup.

	* glib.def: Add missing functions.

	* tests/makefile.{mingw,msc}.in (TESTS): Add markup-test.

2000-10-24  Havoc Pennington  <hp@pobox.com>

	* gmarkup.h, gmarkup.c: New module to parse a simple
	markup language
	
	* Makefile.am: add gmarkup.h, gmarkup.c

	* tests/Makefile.am: add markup-test

	* gstring.h (g_string_new_len): new function to create a string
	with a length
	(g_string_new): avoid a gratuitous realloc

2000-10-26  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: Cosmetics.

2000-10-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gstrfuncs.c (g_strsplit): When the string is ended by a
	delimiter, return an extra empty string just like for a delimiter
	at the start of the string. This makes the function behave more
	consistent and also fixes Bug #15026.

Tue Oct 24 22:09:14 2000  Tim Janik  <timj@gtk.org>

	* glib-object.h: added newly added gobject/ headers.

	* gmesage.c: print g_message() output to stderr instead of stdout.

2000-10-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Use one = instead of two, which is plainly wrong.

2000-10-19  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in: Pass -DGSPAWN_HELPER when building it. Link
	with user32.lib.

	* gspawn-win32.c
	* gfileutils.c: Make them compile with picky MSVC.

	* gwin32.h: New file. Move Win32-only stuff that isn't related to
	GIOChannels here from giochannel.h.

	* Makefile.am: Add it here.

	* giochannel.h: Move stuff to gwin32.h.

	* glib.h: On Win32, include gwin32.h.

Mon Sep 11 10:03:24 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h convert.c (g_convert_with_fallback): Change
	ERROR_OTHER to ERROR_FAILED, add some dummy marking with _().

	* docs/reference/glib/glib-sections.txt
	docs/reference/glib/glib-docs.sgml Update for g_convert,
	g_unicode_validate.

2000-10-16  Tor Lillqvist  <tml@iki.fi>

	* glibconfig.h.win32.in: Remove alloca stuff from here. galloca.h
	takes care of it, correctly.

	* giowin32.c (reader_thread): Some more debugging output.
	(g_io_channel_win32_poll): Remove unused vars.

	* gfileutils.c: Changes for Win32, with no unistd.h and no
	S_ISLNK().

	* gspawn-win32.c: Implementation of the g_spwan_* functions for
	Win32. Due to the general non-Unixness of Win32, much of the
	functionality that is relatively clean to implement on Unix, is
	hard to do on Win32. We must use a separate helper program to
	change directory, close extra file descriptors, redirect the std
	ones, as needed, and only then start the child process. No child
	process pid can be returned, unfortunately. Or if we used
	CreateProcess directly, it probably could. (Now we use the spawnv*
	functions from msvcrt.)

	* Makefile.am (EXTRA_DIST): Add gspawn-win32.c

	* glib.def: Add new entry points.

	* glib.def
	* giowin32.c: Remove g_io_channel_win32_wait_for_condition(),
	g_io_channel_win32_poll() subsumes it.

	* gbacktrace.h: G_BREAKPOINT for MSVC (on the ix86).

	* gwin32.c (g_win32_getlocale): Use "sp" for
	LANG_CROATIAN+SUBLANG_SERBIAN_LATIN.

	* makefile.{mingw,msc}.in (glib_OBJECTS): Add new files.
	Add gspawn-win32-helper.exe rule.

	* tests/makefile.{mingw,msc}.in (TESTS): Add shell-test and
	spawn-test.

	* tests/spawn-test.c: (run_tests): On Win32, don't try to run
	/bin/sh, but ipconfig (no special significance in choosing that,
	just a program that outputs something to stdout).

2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>

	Remove need for acconfig.h, and misc. cleanups.
	* acglib.m4 (GLIB_SIZEOF): Add 'autoheader' comment to
	AC_DEFINE_UNQUOTED.
	(GLIB_BYTE_CONTENTS): Likewise.

	* configure.in: Add 'autoheader' comments to all AC_DEFINE(...)
	and AC_DEFINE_UNQUOTED(...) lines.
	Replace AC_MSG_CHECKING/AC_CACHE_VAL with AC_CACHE_CHECK.
	(AM_PROG_LIBTOOL): Move after AC_PROG_CC.
	
	* acconfig.h: Empty out.

	* Makefile.am (BUILT_EXTRA_DIST): New variable.  List 'dist'able
	files that are created in the builddir.
	(dist-hook): Handle those files.
	(libglib_1_3_la_SOURCES): Remove @ALLOCA@.  @ALLOCA@ should only
	be used in an _LDADD or _LIBADD, since it expands (if necessary)
	to 'alloca.o'.

	* tests/Makefile.am (BUILT_EXTRA_DIST): New variable.
	(dist-hook): Handle $(BUILT_EXTRA_DIST).
	
2000-10-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c: Added inline documentation. 

	* gtypes.h, gnode.h, gutils.h: Readded GFreeFunc,
	g_node_insert_after and g_find_program_in_path resp., which
	mysteriously disappeared during the glib.h dissection.

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

	* glibconfig.h.win32.in: Adapted accordingly to header separation
	and GLIB_HAVE_ALLOCA_H renaming.

	* Makefile.am: Added the new headers to glibinclude_HEADERS.

	* glib.h: Forgot to include gerror.h.

	* glib.h, galloca.h, garray.h, gasyncqueue.h, gbacktrace.h,
	gcache.h, gcompletion.h, gconvert.h, gdataset.h, gdate.h, ghash.h,
	ghook.h, giochannel.h, glist.h , gmacros.h, gmain.h, gmem.h,
	gmessages.h, gnode.h, gprimes.h, gquark.h, gqueue.h, grand.h,
	grel.h, gscanner.h, gslist.h, gstrfuncs.h, gstring.h, gthread.h,
	gthreadpool.h, gtimer.h, gtree.h, gtypes.h, gutils.h: Split glib.h
	into many header files mostly according to the resp. *.c-files.
	
	* gmacros.h: Added G_BEGIN_DECLS and G_END_DECLS to mean: 'in case
	of C++: extern "C" { ... }' analogous to glibc __BEGIN_DECLS and
	__END_DECLS.

	* configure.in, gerror.h, gfileutils.h, gshell.h, gspawn.h,
	gunicode.h, : Changed guard-macro names to something more
	consistent.

	* configure.in, *.h: Use G_BEGIN_DECLS and G_END_DECLS.

	* configure.in: Defined GLIB_HAVE_ALLOCA_H instead of including
	alloca.h in glibconfig.h, GLIB_HAVE_ALLOCA_H is used in glib.h.

	* configure.in: Removed cruft from old threading code.

2000-10-09  Raja R Harinath  <harinath@cs.umn.edu>

	Work with beta autoconf 2.50.
	* configure.in (GLIB_MAJOR_VERSION): Use GLIB_DIVERT_BEFORE_HELP
	instead of AC_DIVERT_PUSH(),AC_DIVERT_POP.
	(AC_CHECK_HEADERS): Remove redundant AC_DEFINE(HAVE_...).
	(REALLOC_0_WORKS): Move AC_DEFINE outside AC_CACHE_VAL.
	(dlopen): Quote nested AC_CHECK_... calls.

	* acglib.m4 (GLIB_TR_SH, GLIB_TR_CPP): Utility macros copied from
	beta autoconf 2.50.
	(GLIB_DIVERT_BEFORE_HELP): New macro that works both with autoconf
	2.13 and beta autoconf 2.50.
	(GLIB_SIZEOF, GLIB_BYTECONTENTS): Use GLIB_TR_*.

	* Makefile.am (CONFIGURE_DEPENDENCIES): Use this to specify
	that 'configure' depends on acglib.m4.

2000-10-09  Havoc Pennington  <hp@redhat.com>

	* Makefile.am, tests/Makefile.am: Add new files.

	* tests/spawn-test.c, tests/shell-test.c: new tests for
	the shell/spawn stuff

	* gutils.c (g_find_program_in_path): convert a relative
	program name into an absolute pathname to an existing 
	executable

	* gspawn.h, gspawn.c: New fork/exec API

	* gshell.h, gshell.c: Shell-related utilities, at the moment
	simply routines to parse argv and quote/unquote strings

	* guniprop.c (g_unichar_isspace): Return TRUE for the 
	ASCII space characters isspace() returns TRUE for.

	* gfileutils.c (g_file_get_contents): Convenience function 
	to slurp entire file into a string and return it. Partially
	written by Joel Becker.
	(g_file_test): file test function

2000-10-06  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in: Revamp to be like makefile.mingw.in, make
	the MSVC build actually work again.

	* gmodule/makefile.msc.in
	* gobject/makefile.msc.in
	* gthread/makefile.msc.in: New files, like their mingw counterparts.

	* gmodule/Makefile.am
	* gobject/Makefile.am
	* gthread/Makefile.am: Make and distribute them.

	* */makefile.mingw.in: Allow override of GLib version number from
	the build/win32/module.defs file.

	* glib.def: Add new entry point.

	* tests/gio-test.c (main): Fix the Win32-only code to use current
	API, g_io_channel_win32_make_pollfd() and g_io_channel_win32_poll().

	Fixes from Hans Breuer:

	* glib.h (struct DIR): Keep the last readdir result cached inside
	the DIR struct, to enable several DIRs being open simultaneously.

	* gwin32.c (g_win32_readdir): Use the above instead of static.

	* giowin32.c (g_io_channel_win32_make_pollfd): Insert cast to keep
	MSVC happy.

2000-10-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h: Changed alloca stuff a bit: when we have a working
	alloca.h, we're not messing with alloca any further. Should fix a
	bug reported by Bernd Demian <wega@csc-dd.de>.

2000-09-29  Jonathan Blandford  <jrb@redhat.com>

	* gnode.c (g_node_insert_after): Added function to keep symmetry
	with g_node_insert_before. 

2000-09-29  Martin Baulig  <baulig@suse.de>

	Several minor ANSI C fixes.

	Added missing casts:
	* gdate.c (g_date_fill_parse_tokens): `s = (guchar *) str'.
	* gmain.c (g_idle_dispatch): `func = (GSourceFunc) source_data'.
	(g_idle_add_full): `(gpointer) function' in call to g_source_add().
	* gstrfuncs.c (g_strdown): `s = (guchar *) string' and
	`return (gchar *) string'.
	(g_strup): Likewise.
	(g_strchug): `start = (guchar*) string' in 1st for() argument;
	`strlen ((gchar *) start)' in call to g_memmove().
	* gstring.c (g_string_down): `s = (guchar *) string->str'.
	(g_string_up): Likewise.
	* gthreadpool.c (stop_this_thread_marker):
	`(gpointer) &g_thread_pool_new'.
	* gunidecomp.h (decomp_table[]): Cast all the strings to
	`unsigned char *'.

	Put text following #endif into comments:
	* gmain.c: here.

2000-09-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, glib.h: Added errorcheck mutexes. These are
	activated through the preprocessor symbol
	G_ERRORCHECK_MUTEXES. Need to add an extra word to StaticMutex in
	order to achieve this. g_(static_)mutex_* functions instrument the
	mutex operations with mutex name and location, when compiled with
	-DG_ERRORCHECK_MUTEXES. g_thread_init activates the errorcheck
	mutexes, when compiled with -DG_ERRORCHECK_MUTEXES.

2000-09-28  Havoc Pennington  <hp@pobox.com>

	* glib.h (GThreadPriority): fix indentation
	(GConvertError): generic error is conventionally called
	_FAILED rather than _OTHER, at least at the moment, 
	according to GError docs in docs/reference.

	* gconvert.c: s/_OTHER/_FAILED/

2000-09-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Adjusted the test for an unimplemented
	 getpwuid_r. Info from Michael Pruett. This is just a forward
	 merge from glib-1-2.

	* configure.in: Moved determination of G_THREAD_FLAGS before
	G_THREAD_LIBS. Check for UnixWare systems and set the right cflags
	and libs there (it needs -Kthread for the native compiler and
	-pthread for gcc). Thanks to Boyd Lynn Gerber <gerberb@zenez.com>
	for the info.

	* configure.in: Fail immediately, when no thread library is found,
	instead of continuing searching for rt libs etc. Changed almost
	all occurances of $enable_threads to $have_threads, as that's,
	what we want.

	* tests/threadpool-test.c: Define vars inside the guard to avoid
	warnings.

	* configure.in, tests/type-test.c: Some platforms support 64 bit
	'long long', but you can not printf or scanf them. In that case,
	don't define G_G{UINT|INT}64_FORMAT. Changed the type-test program
	to reflect that.

	* gutils.c (g_get_current_dir): max_len can't be initialized
	statically as it might call a function. So do it at first call.

Tue Sep 26 2000 Elliot Lee <sopwith@redhat.com>

	* glib.h: Add G_GNUC_PURE macro (but don't use it anywhere).

Mon Sep 25 2000 Elliot Lee <sopwith@redhat.com>

	* garray.c, glib.h, gmem.c: Add a few missing G_GNUC_CONST's.

2000-09-21  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in: Add gconvert.o. Use libiconv.

	* config.h.win32.in: Define HAVE_GETCWD.

	* glib.def: Add new entry points.

2000-09-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: The last released automake (1.4) still requires
	AM_PROG_LIBTOOL instead of AC_PROG_LIBTOOL, so use that for the
	time being.

2000-09-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, configure.in, gutils.c: Test for the existence of
	getcwd, and use it only when found.

	* glib.h: Only use the gcc-variable-macro-argument-extension for
	gcc >= 2.4. Both patches from Jonas Oberg <jonas@gnu.org>.

Mon Sep 18 10:58:21 2000  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c: Implement g_ucs4_to_utf8 which was in
	the header file but not implemented.

Sun Sep 17 2000 Elliot Lee <sopwith@redhat.com>

	* glib.h configure.in: Define g_alloca() as an
	alloca-that-works-anywhere.

	* gconvert.c: Fix warnings which could have caused problems on
	64-bit platforms.

Sun Sep 10 12:37:40 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h gconvert.c (g_convert): Havoc Pennington's implementation 
	of convenient character set conversion using iconv, with
	the addition of GError. We probably need a fallback that
	just does conversions between, say UTF-8,16,32 and ISO-8859-1
	for targets without iconv at all.

	Also add g_convert_with_fallback() to take care of conversions 
	where we accept some loss going to the target encoding.

2000-09-10  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_utf8_validate): Add this function.

Sat Sep  9 18:50:42 2000  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c (g_strescape): Add a missing g_return_if_fail().

Mon Aug 21 03:57:46 2000  Tim Janik  <timj@gtk.org>

	* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
	implement BREAKPOINT() as raise (5 /* SIGTRAP */);

	* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
	to turn on compilation of inline function implementations provided
	in header files with extern linkage.
	wrap inline function implementations into ifdef __G_UTILS_C__, so we
	really only compile them for gutils.c and not also into arbitrary user
	code that wants to make use of G_IMPLEMENT_INLINES.
	adjusted comment apropriately.

	* gutils.c: to turn on compilation of inline functions, provide
	#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.

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

	* gerror.c: docs

	* docs/reference/glib/tmpl/error_reporting.sgml: docs

Wed Sep  6 10:28:34 2000  Owen Taylor  <otaylor@redhat.com>

	* guniprop.c gunicode.h gutf8.c: Some inline docs fixes.

2000-09-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, gtimer.c, tests/thread-test.c:
	s/G_MICROSEC/G_USEC_PER_SEC/

	* glib.h: Removed G_G{U}{SHORT|INT|LONG}_FORMAT from glib.h, as
	they are really superfluous.

Tue Sep  5 20:16:27 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in docs/Makefile.am: Add gtk-doc checks
	for newly added docs/reference/ subdir.

2000-09-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c (g_thread_error_quark): Don't use a G_LOCK, as it
	isn't necessary.

2000-09-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gstring.c (g_string_free): Use g_return_val_if_fail instead of
	g_return_if_fail, as the function now is supposed to return
	something.

	* gerror.c, gerror.h (g_propagte_error): Added function
	g_propagte_error to hand over local errors to the calling
	function.

	* glib.h: Include gerror.h before it is used for some g_thread_*
	functions.

	* gthread.c, gthreadpool.c, glib.h: Enable error reporting for
	thread creation, namely for g_thread_create, g_thread_pool_new,
	g_thread_pool_push and g_thread_pool_set_max_threads.

	* tests/thread-test.c, tests/threadpool-test.c: Adapted
	accordingly.

2000-08-31  Tor Lillqvist  <tml@iki.fi>

	* glib.h
	* glib.def
	* giowin32.c (g_io_channel_win32_make_pollfd): New function, to
	make a GPollFD from a GIOChannel. Creates the events and starts
	the reader thread if necessary.

	* glib.h
	* giowin32.c (g_io_channel_win32_poll): No use for separate
	condition parameter.

	* gmain.c (g_get_current_time): (Win32): Simplify, use
	GetSystemTimeAsFileTime().

2000-08-27  Tor Lillqvist  <tml@iki.fi>

	* giowin32.c (g_io_channel_win32_poll): New function, otherwise
	like g_io_channel_win32_wait_for_condition(), but accept several
	GPollFDs.
	(g_io_channel_win32_wait_for_condition): Call
	g_io_channel_win32_poll().

	* glib.h: Declare g_io_channel_win32_poll().

	* gwin32.c (g_win32_error_message): Don't believe return value
	from FormatMessage.

2000-08-25 Elliot Lee <sopwith@redhat.com>

	* glib.h, gunicode.h, gmodule/gmodule.h:
	Mark the following functions G_GNUC_CONST (to allow optimization)
	because their results are a function of only their parameters: 
	g_int_hash, g_int_equal, g_direct_hash, g_direct_equal,
	g_quark_to_string, g_date_is_leap_year, g_date_days_in_month,
	g_date_monday_weeks_in_year, g_date_sunday_weeks_in_year,
	g_spaced_primes_closest, g_unichar_is*, g_unichar_to*,
	g_unichar_*digit_value, g_unichar_type

2000-08-21 Elliot Lee <sopwith@redhat.com>

	* gobject/Makefile.am, gobject/gobject-query.c,
	gobject/gparamspecs.c: Fix inclusion of config.h

Mon Aug 21 14:46:23 2000  Owen Taylor  <otaylor@redhat.com>

	* tests/gio-test.c: Fix a couple of trivial bugs that
	were causing warnings.

Mon Aug 21 14:39:36 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h: Use C99 varargs macros where possible 
	(check __STDC_VERSION__), otherwise, on gcc, use an alternate 
	form of gcc varargs which is more likely
	to be supported going forward. (Based on some code
	from Raja Harinath)

2000-08-17  Darin Adler  <darin@eazel.com>

	* glib.h:
	* garray.c: (g_array_free), (g_ptr_array_free),
	(g_byte_array_free): Return the data left behind.
	* gstring.c: (g_string_free): Return the data left behind.

	Changed the free calls that leave data behind so they
	return a pointer to the left-behind data, NULL if told not
	to leave anything behind. This makes these calls easier
	to use correctly, without any incompatible API change for
	callers that don't know about the return value. Of course,
	it would be even clearer if the free calls weren't dual-purpose
	in the first place.

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

	* giowin32.c: Some indentation and spacing fixes. Add some more
	logging.
	(g_io_win32_add_watch): New function, with common code from
	g_io_win32_fd_add_watch and g_io_win32_sock_add_watch. Don't start
	more than one reader thread for a GIOChannel. We should obviously
	have just one reader thread reading a file descriptor or socket.

2000-08-10  Havoc Pennington  <hp@redhat.com>

	* gthread-2.0.pc.in (Cflags): don't duplicate glib Cflags

	* gmodule-2.0.pc.in (Cflags): don't duplicate glib Cflags

	* gobject-2.0.pc.in (Cflags): don't duplicate Cflags from glib
	itself

2000-08-10  Havoc Pennington  <hp@redhat.com>

	* glib-2.0.pc.in (Cflags): Look in glib-2.0/include for
	glibconfig.h

2000-08-07  Tor Lillqvist  <tml@iki.fi>

	* tests/gio-test.c (shutdown_source): New function, that calls
	g_source_remove(). Check return value of g_source_remove(), and
	decrement running subprocess counter only if g_source_remove()
	actually did remove the source.

	(recv_message): Call shutdown_source() on EOF condition. Return
	FALSE on G_IO_HUP and G_IO_ERR condition. Fix printf format typo.

Sun Aug  6 20:06:02 2000  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_log_domain_check_free): keep *last updated while
	running through the domain list, so we don't screw up the removal,
	patch provided by Gady Kozma <gadykozma@hotmail.com>.

Sun Aug  6 20:03:41 2000  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_log_remove_handler): keep *last updated while running
	through the handler list, so we don't screw up the removal.

Sun Jul 30 16:54:13 2000  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h: Fix stray character

	* gutf8.c (g_unichar_to_utf8): Allow outbuf to be NULL, in
	which case we just compute the length.

2000-07-31  Havoc Pennington  <hp@redhat.com>

	* Makefile.am (EXTRA_DIST): forgot to add .pc.in to EXTRA_DIST

2000-07-31  Havoc Pennington  <hp@redhat.com>

	* glib-2.0.pc.in, gobject-2.0.pc.in, gmodule-2.0.pc.in,
	gobject-2.0.pc.in: pkg-config data files	 

	* Makefile.am: Install/dist the .pc files

	* configure.in: Output the .pc files

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

	* giowin32.c (buffer_read): The code didn't compile (must
	have been sleepy when committing). "return" instead of "break"

	(g_io_win32_fd_add_watch): Cannot check if the file descriptor is
	readable by calling ReadFile to read zero bytes. ReadFile blocks
	on NT even if trying to read nothing at all. So, don't check if
	file descriptor is readable; assume this function isn't called
	otherwise.

Sun Jul 30 10:44:16 2000  Tim Janik  <timj@gtk.org>

	* gmain.c (g_get_current_time): fix tor's recent changes which
	got rid of a required variable in the non-windows path.

2000-07-30  Tor Lillqvist  <tml@iki.fi>

	Finally, a new and improved IO Channel and condition watch
	implementation for Win32. Based on code provided by Craig Setera.

	When watching file descriptors, for which there is no select()
	like functionality on Win32 that would work on all Win32 platforms
	for all types of file descriptors (including anonymous pipes), we
	start a new thread that blocks while trying to read from the file
	descriptor. When the read returns, a Win32 Event is signalled that
	the polling routine eventually notices. Meanwhile, the data being
	read is stored in a circular buffer, from where the IO channel's
	read() method picks it up.

	If the buffer fills up the reading thread has to wait for space
	becoming available. For this another Win32 Event is used. The IO
	Channel's read() method signals this when it has read some data
	out of the buffer.

	The separate reader thread(s), and the circular buffer(s) with
	associated events mean lots of possibilities for fun parallelism
	errors. But it seems to work OK, i.e. GIMP runs.

	* gmain.c: Small changes to the Win32 polling function.
	(g_main_win32_get_poll_func): New function. Perhaps it would be a
	good idea to provide this on all platforms.

	* giowin32.c: The bulk of the new implementation.
	(g_io_channel_win32_wait_for_condition): New function. To be used
	where on Unix one does a select() on the channel's fd, like
	libgimp's gimp_extension_process(). Could be provided on all
	platforms.

	* glib.h: Update documentation for IO Channels on Win32. Remove
	the declarations for the as of now obsolete old functions related
	to IO Channels for pipes with "wakeup" messages.

	* glib.def: Some new functions.

	* tests/gio-test.c: New file, to test GIOChannel and main loop.

	* tests/Makefile.am
	* tests/makefile.mingw.in: Add it.

	(Later the same night:)

	* giowin32.c: Compile in the debugging code all the time, but only
	output debug messages if told so. Add (unadvertised) function to
	turn on/off debug messages for a channel.

	(buffer_read): Don't loop. It is expected behaviour to return a
	short read occasionally, for instance when reading from
	pipes. It's the calling code that should loop if it *knows* how
	much the writer has written.

	* tests/gio-test.c: Correct the program's name in the output.
	(recv_message): Loop calling g_io_channel_read() (in a new
	function read_all()) until we have all the bytes we want (that we
	know the writer has written/will write).

Thu Jul 27 05:15:11 2000  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strlcpy, g_strlcat): completed tor's fix
	to cover both #ifdef branches.

2000-07-26  Tor Lillqvist  <tml@iki.fi>

	* gstrfuncs.c (g_strlcpy, g_strlcat): Return 0 on error, not NULL.

	* glib.def: Add g_strlcpy, g_strlcat.

	* glibconfig.h.win32.in: Add gsize and gssize.

Wed Jul 26 12:59:31 2000  Tim Janik  <timj@gtk.org>

	* *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that
	updates the license headers to the GNU Lesser General Public License,
	as well as updating the copyright year to 2000.

Wed Jul 26 05:47:48 2000  Tim Janik  <timj@gtk.org>

	* configure.in:
	* testglib.c:
	* gstrfuncs.c:
	* glib.h: added g_strlcat() and g_strlcpy() wrappers, supplied by
	David Wheeler <dwheeler@ida.org>:

	* glib.h, gstrfuncs.c: added g_strlcpy and g_strlcat to support
	  safe manipulation of fixed-length string buffers.
	  These functions were originally developed by Todd Miller to simplify
	  development of security-related programs, and
	  are available on many (but not all) Unix-like systems,
	  including OpenBSD, FreeBSD, and Solaris.  See
	  ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3
	  and http://www.openbsd.org/security.html.
	  If there's a strlcpy/strlcat on the system, it's called, otherwise
	  an implementation is provided.

	* testglib.c: Added tests for g_strlcpy, g_strlcat.

Wed Jul 26 05:03:24 2000  Tim Janik  <timj@gtk.org>

	* acglib.m4 (GLIB_SIZEOF): include <stdlib.h> and <stddef.h> if
	STDC_HEADERS is defined.

	* glib.h:
	* glibconfig.h: define gsize and gssize in terms of GLIB_SIZEOF_SIZE_T

	* glib.h (g_return_if_reached): applied darin's fix for copy'n
	paste error in the macro implementation.

Wed Jul 26 00:46:03 2000  Tim Janik  <timj@gtk.org>

	* glib.h: applied patch from Darin Adler <darin@eazel.com> which
	supplies g_return_if_reached(), g_return_val_if_reached() and
	g_critical().

2000-07-22  Tor Lillqvist  <tml@iki.fi>

	* build-dll: Fix resource handling, the resource file got left out
	from the DLL after all... Remove the WIN32APIHEADERS, not needed
	with current windres.

	* glib.def: Add new functions.

2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c, glib.h: Mark the functions g_basename and g_dirname
	deprecated. They will issue an warning once, when compiled with
	G_ENABLE_DEBUG, but continue to work as before. Instead the
	functions g_path_get_basename and g_path_get_dirname should be
	used, which BOTH return newly allocated memory, that has to freed
	by g_free. The new g_path_get_basename now strips trailing slashes
	from the path. This fixes #5097. For discussion see
	http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html

	* gwin32.c, testglib.c, tests/dirname-test.c: Use the new
	functions instead of the old ones.

	* ghash.c, gscanner.c, glib.h: Mark the functions
	g_hash_table_freeze, g_hash_table_thaw and thus
	g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
	deprecated. They will issue an warning once, when compiled with
	G_ENABLE_DEBUG. This fixes Bug #3883. For discussion see
	http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html

2000-07-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, glib.h: glibconfig.h and glib.h now include files
	outside of the extern "C" block. Makes some C++ compiler
	happy. Reported by Denis Vakatov <vakatov@peony.nlm.nih.gov>.

Sat Jul 15 23:49:03 2000  Owen Taylor  <otaylor@redhat.com>

	* glib/glib.texi: Remove incomplete start of info file -
	real docs are in RDP.	

Sat Jul 15 22:44:22 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Add build/Makefile and 
	build/win32/Makefile to AC_OUTPUT() so things build
	again.

Sat Jul 15 09:11:46 2000  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strncasecmp): fixed an off by 0 error (yeah,
	the function went off when the while (n--) loop failed due to
	n==0 ;), reported by Jean-Louis HAMEL <jlhamel@club-internet.fr>.

2000-07-15  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (SUBDIRS): Include the "build" module in GLib, too,
	to make it more self-contained. If your CVS client doesn't
	automatically get it, do a cvs get build in glib.

	* */makefile.mingw.in: Include make.mingw from build in the glib
	source directory.

Fri Jul 14 16:26:35 2000  Owen Taylor  <otaylor@redhat.com>

	* Release 1.3.1

Fri Jul 14 12:22:49 2000  Owen Taylor  <otaylor@redhat.com>

	* configure.in Makefile.am glib-config.m4 glib.m4: Move
	glib-config to glib-config-2.0 move glib.m4 to
	glib-2.0.m4

	* Makefile.am gobject/Makefile.am gmodule/Makefile.am
	gthread/Makefile.am tests/Makefile.am: Change 
	library names to libglib-1.3.la, etc, so that we
	can distinguish glib-1.2 and glib-2.0 on the linkline.

	* Makefile.am gobject/Makefile.am gmodule/Makefile.am:
	Move include files into /usr/include/glib-2.0.

Thu Jul  6 18:54:49 2000  Owen Taylor  <otaylor@redhat.com>

	* docs/Makefile.am (EXTRA_DIST): Remove info files
	from the build.

2000-07-14  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add g_error functions.

	* makefile.mingw.in: Add gbacktrace.o.

	* gbacktrace.c: No need to include <process.h>.

2000-07-12  Havoc Pennington  <hp@redhat.com>

	* glib.h: #include <gerror.h>

	* Makefile.am (include_HEADERS): Add gerror.h
	(libglib_la_SOURCES): Add gbacktrace.c

	* gbacktrace.c: Move g_on_error_query() in here (moved on the 
	server, so history is preserved)

	* gerror.h: GError interface

	* gerror.c: GError implementation replaces stuff that's now in 
	gbacktrace.c

Sun Jul  9 21:20:45 2000  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h: Include stddef.h instead of stdlib.h

2000-07-08  Tor Lillqvist  <tml@iki.fi>

	* glib.h (GLIB_VAR): Rename the GUTILS_C_VAR macro to GLIB_VAR.

	* gunicode.h: Mark the g_utf8_skip array with GLIB_VAR.

	* glib.def: Add two missing entry points.

Thu Jul  6 15:35:28 2000  Owen Taylor  <otaylor@redhat.com>

	* Release 1.3.1

	* Makefile.am (EXTRA_DIST): Dist fixes.

	* configure.in: Moderate the warnings just a little bit.

2000-07-05  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update.

Mon Jul  3 17:58:02 2000  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c (g_utf8_get_charset_internal): Fix up
	to correspond to configure.in checks.

Mon Jul  3 17:18:19 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h: Comment g_get_codeset() out of the header file
	temporarily. (Very similar to g_get_charset(), need
	to resolve the two.)

2000-07-01  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add new entry points.

	* makefile.{mingw,msc}.in: Add the new Unicode object files.

Thu Jun 29 15:57:28 2000  Owen Taylor  <otaylor@redhat.com>

	* NEWS: updated

	* Makefile.am: added snapcheck target to go along with snapshot

	* gstring.c glib.h (g_string_hash): Add g_string_hash to 
	go along with g_string_equal.

Tue Jun 27 12:40:23 EDT 2000  David A. Wheeler <dwheeler@dwheeler.com>

	* glib.h: Added g_string_equal for comparing GStrings;
	changed g_str_equal so it returns gboolean (instead of gint).

	* gstring.c: Modified GString implementation to support embedded
	ASCII NUL ('\0') characters, and implemented g_string_equal.

	* testglib.c tests/string-test.c: Added tests for g_string_equal
	and tests for proper handling of embedded ASCII NUL characters.

Wed Jun 28 22:52:00 2000  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (libglib_la_SOURCES): Fix
	gunichartable.h => gunichartables.h. (From Eric Limings)

Fri Jun 23 17:20:26 2000  Tim Janik  <timj@gtk.org>

	* glib.h: define gstring in terms of gchar*. this typedef reflects
	the type name of the primitive G_TYPE_STRING in the gobject module.

Wed Jun 21 12:09:03 2000  Owen Taylor  <otaylor@redhat.com>

	* gunicode.h gutf8.c guniprop.c gunidecomp.[ch] gunichartables.h
	Makefile.am glib.h: Initial pass at adding unicode support
	functions. A few things still need to be implemented, a bit
	of cleanup needs to be done, tests need to be added, and 
	the docs need to be finished, but this should allow replacing
	most or all use of libunicode.

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

	* giowin32.c (g_io_channel_win32_pipe_readable): If we are
	watching the same pipe for different conditions (with different
	callbacks), check them all. Only call the callback for G_IO_IN
	from here. (This bug popped up when a watch for G_IO_ERR|G_IO_HUP
	was added to gimplib.)

2000-05-30  Tor Lillqvist  <tml@iki.fi>

	* gutils.c (g_locale_get_codeset): Implement on Win32.

	* glib.def: Add g_get_codeset.

	* tests/Makefile.am (EXTRA_DIST): makefile.cygwin* has been
	renamed to makefile.mingw*.

Tue May 30 16:01:32 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h gutils.c: Move the g_locale_get_codeset() up in the 
	header file to correspond to to comments about memory
	management. Rename to g_get_codeset() to avoid 
	polluting the g_locale_* namespace, which probably
	would have g_locale_get_codeset (GLocale *locale).
	Add a doc comment.

Mon May 29 14:10:35 2000  Owen Taylor  <otaylor@redhat.com>

	* gutils.c (g_locale_get_codeset): Add function to get the 
	codeset name for the current locale.

	* configure.in acconfig.h: Add check for nl_langinfo(CODESET);

Fri May 19 11:39:29 2000  Tim Janik  <timj@gtk.org>

	* gutils.c (g_snprintf):
	(g_vsnprintf): added argument assertments.

	* gstring.c (g_string_assign): added argument assertments.
	(g_string_truncate): make len a guint.

Fri May 19 09:00:44 2000  Tim Janik  <timj@gtk.org>

	* gmem.c (g_free): fixed SIZEOF_LONG==4 assumption with
	ENABLE_MEM_CHECK, from Art Haas <ahaas@neosoft.com>.

	* gslist.c (g_slist_reverse): shut up compiler.

	* gscanner.c (g_scanner_get_token_ll): removed inline assignment.

	* garray.c: remove index>=0 checks for unsigned indices.

	* gmain.c (g_idle_prepare): timeout assignment fix.

	* gtree.c (g_tree_node_rotate_right): shut up compiler.

2000-05-13  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in
	* tests/makefile.mingw.in
	* build-dll: Rename makefile.cygwin(.in) to
	makefile.mingw(.in), which better describes what it is. Move the
	build of gmodule, gthread and gobject DLLs to makefiles in those
	directories. Move resource file handling and build number bump to
	build-dll, where it sits much cleaner.

	* README.win32
	* Makefile.am (EXTRA_DIST): Update accordingly.

	* glib.h: Add G_PI, G_PI_2, G_PI_4, G_E, G_LN2, G_LN10 and
	G_SQRT2. M_PI etc aren't necessarily in <math.h> in strict ISO C
	implementations.

	* glib.def: Add g_strcanon.

	* gtree.c (g_tree_node_rotate_left): Remove unused variables.

	* gwin32.c (g_win32_opendir): Remove unneeded statement.

Thu May  4 02:04:46 2000  Tim Janik  <timj@gtk.org>

	* configure.in (STRIP_DUMMY): some Make 3.79 $(strip ) versions are
	broken and require an empty arg, give it to them.

Fri Apr 28 23:54:35 2000  Tim Janik  <timj@gtk.org>

	* setup things for a new sub-library libgobject:

	* Makefile.am (SUBDIRS): added gobject

	* glib-config.in: feature -lgobject.

	* configure.in (AC_OUTPUT): generate gobject/Makefile.

	* glib.m4 (AM_PATH_GLIB): feature gobject module.

	* glib.spec.in: added %{prefix}/lib/libgobject-1.3.so.*

Fri Apr 28 21:41:49 2000  Tim Janik  <timj@gtk.org>

	* glib.h: added G_STRLOC macro.
	G_STRUCT_OFFSET(): signedness corrections.
	(G_CSET_DIGITS): list 0-9.
	* gscanner.c (g_scanner_config_template): use G_CSET_DIGITS.

	* glib.h: 
	* gstrfuncs.c:
	(g_strdown):
	(g_strup):
	(g_strreverse): return the modified string instead of void, so
	calls to these functions can be nested.
	(g_strcanon): new function, canonicalizes string according to
	a given character set.

Fri Apr 28 19:45:16 2000  Tim Janik  <timj@gtk.org>

	* gasyncqueue.c (g_async_queue_unref): get rid of an unused variable.

Wed May 10 19:52:44 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.m4: Print found version when test succeeds.

2000-05-04  Tor Lillqvist  <tml@iki.fi>

	* makefile.cygwin.in
	* tests/makefile.cygwin.in: Include the common makefile snippet
	from ../build/win32.

	Maybe CVSROOT/modules should be changed so that the 'build' module
	is included within the glib module (and gtk+, and gimp, and maybe
	others later), in the same way as the 'macros' module is included
	in lots of GNOME CVS modules?

2000-05-02  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add new functions.

	* makefile.{cygwin,msc}.in (glib_OBJECTS): Add new object files.

	* tests/makefile.{cygwin,msc}.in: Add threadpool-test.

2000-04-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gasyncqueue.c: New File implementing an asynchronous queue to be
	used for asynchronous inter-thread communication.

	* gthreadpool.c: New File implementing a thread pool to be used
	for distributing work among several threads. 

	* glib.h: Added the type and function declarations for these two
	types.

	* tests/threadpool-test.c: New File implementing a test for the
	thread pool. This also checks the asynchronous queue underlying
	the thread pool.

	* tests/Makefile.am: Changed accordingly.

2000-04-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Look for both pthread_create and pthread_join in
	the thread library. Some systems define one of them, but not both
	in libc. Arghh. Now we really start a thread and join it later and
	check, whether the thread to actually ran.

	* glib.h, gcache.c, gtree.c: Changed the 'value' parameter of
	g_cache_remove from gpointer to gconstpointer. Dito for the 'key'
	parameter of g_tree_lookup and g_tree_remove and the 'data'
	parameter of g_tree_search. This function now takes a function of
	type GCompareFunc instead of GSearchFunc. This fixes Bug
	#8267. Thanks to Juan Toledo <toledo@users.sourceforge.net> for
	pointing that out.

	* glib.h: Removed declaration of GSearchFunc.

	* gmem.c: s/GSearchFunc/GCompareFunc/.

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

	* glib.def: Update entry point list.

2000-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h (G_TRYLOCK): Made the debugging G_TRYLOCK call also work
	for compilers with funny G_STMT_(START|END) macros.

	* tests/thread-test.c: Implemented a check for that.

	* gutils.c (g_getenv): Changed the win32 part of this function to
	be thread safe and to make the returned environment string
	persistent to match the UN*X behavior. This is again a response to
	Bug #8983.

	* glib.h (G_LOCK_NAME): Removed parentheses around the lock name,
	as that seems to cause problems for some compilers and really
	isn't necessary.

Wed Apr 19 08:32:32 2000  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_new): make sure that
	scanner->config->cset_skip_characters is "" instead of NULL, so we
	don't segfault further on.

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

	* glib.h, glist.h, gslist.h: Changed the 'data' parameters from
	gpointer to gconstpointer for the functions
	g_(list|slist)_(remove|find|find_custom|index), as they do not
	change this parameter. This fixes bug #4836.

	* glib.h: Changed comment for g_getenv to reflect, that the
	returned memory must not be freed. Fixes bug #8983.

2000-04-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, acconfig.h: Add configure test for garbage
	collector friendliness for GLib. If enabled, ENABLE_GC_FRIENDLY
	will be defined.

	* garray.c, ghash.c, glist.c, gmain.c, gmem.c, gnode.c, gqueue.c,
	gslist.c, gtree.c: If ENABLE_GC_FRIENDLY is defined, NULLify all
	memory released by the user, but cached by GLib. This lets a
	garbage collector have a more correct view of the actually used
	memory.

	* garray.c, glib.h: Added g_(array|ptr_array|byte_array)_sized_new
	functions, that reserve a certain amount of memeory for the array
	at creation time to avoid reallocation. Fixes bug #6707 from
	Charles Kerr <ckerr@osserver1.nssl.noaa.gov>.

	* glib.h, gqueue.c, tests/queue-test.c (main): Renamed
	g_queue_create to g_queue_new in conformance to all other GLib
	data types.

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

	* grand.c (g_rand_new): Fixed bug. Thanks to Marko Kreen
	<marko@l-t.ee> for reporting that.

2000-03-26  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Tell about using the mingw-based gcc, which is
	much easier than modifying the cygwin gcc to product mingw code
	for the msvcrt runtime.

	* makefile.cygwin.in (WIN32APIHEADERS): Kludge to make it work
	with a "pure" mingw gcc, too.

2000-03-24  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* garray.c: Made GArray behave correctly. Now zero_terminated
	really means, that the element array->data[array->len] exists and
	is zeroed, and clear means that any unassigned elements obtained
	through g_array_set_size (the only way to get unassigned elements
	AFAICT) are zeroed. Added some macros to make the code more
	obvoius. Also made GPtrArray zero elements after
	g_ptr_array_set_size. This is done in a portbale way (assignment
	of NULL instead of just memsetting it to zero), though that might
	be more portability than we actually want.

	* Makefile.am, gthread/Makefile.am, gmodule/Makefile.am,
	tests/Makefile.am: Added various win32 related *.in files to
	EXTRA_DIST to let 'make distcheck' procude all the corresponding
	files, which it silently fails to do currently.

2000-03-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: After finding the right thread library (containing
	e.g. pthread_create) we now search for the right realtime library
	(containing e.g. sched_get_priority_max). Makes the output of the
	thread related libraries correct. 

	* gtimer.c (g_usleep): The current implementation of g_usleep
	(simply calling select) doesn't work reliable for multi-threaded
	programs on some platforms (bad omen for the main loop....), so I
	changed the implementation for thread-using programs to wait for a
	GCond for the specified amount of time (NB: sleep and usleep are
	not MT-safe in general, because they often use signals).

Wed Mar 22 16:49:57 2000  Owen Taylor  <otaylor@redhat.com>

	* gmem.c (g_mem_chunk_area_compare): Fix indentation.

2000-03-22 Elliot Lee <sopwith@redhat.com>

	* gmem.c (g_mem_chunk_area_compare): Fix 64-bitness bug in
	comparing two pointers more than 4G apart.

2000-03-22  Tor Lillqvist  <tml@iki.fi>

	* gutils.c: Move Win32-only includes after inclusion of glib.h, so
	that G_OS_WIN32 is defined.

	* glibconfig.h.win32.in: Add GSystemThread.

2000-03-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_current_dir): Ok, Marcus Brinkmann
	<Marcus.Brinkmann@ruhr-uni-bochum.de> convinced me, that 128 KB
	path length might not be enough for the HURD. So I changed the
	loop to at least avoid an integer overflow, which could happen at
	beyond 2GB size ;-)

	* configure.in: Test for sched_yield as the native yield function
	first. Corrected typo g_thread_sleep -> g_usleep. Corrected
	message for the pthread_create test. Negative Priorities are
	allowed (and used on Solaris), so consider
	sched_get_priority_min failed only if it returns -1, not <0. Check
	for sched_get_priority_min also in -lrt, if not found in -lpthread
	alone and add -lrt to G_THREAD_LIBS then. Remove special case
	handling of priorities for older solaris versions and posix
	threads. Thanks to Wan-Teh Chang <wtc@netscape.com> for suggesting
	some of those changes.

	* config.guess, config.sub, ltconfig, ltmain.sh:
	Upgrade to libtool 1.3.4.

2000-03-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, configure.in, gutils.h: always define G_GNUC_EXTENSION,
	even when not needed by GLib. That's actually also the way, the
	GLib reference manual describes that macro. Therefore I had to
	remove the lonesome #include <glibconfig.h> in gutils.c, which
	doesn't seem to be needed there however. This change should make
	Ben Gertzfield <che@debian.org> happy.

	* gutils.c: Furthermore two warnings in gutils.c were voided,
	which crept in due to my last change.

	* gutils.c (g_get_current_dir): Allocate only up to 128KB for a
	pathname. While this is an arbitrary value just like 2048, it
	seems to be enough (after all, even 4GB is an arbitrary value).

2000-03-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c (g_main_poll): Warn in case of an error during the call
	to poll(2). Closes Bug#7564 as reported by David Helder
	<dhelder@umich.edu>.

	* gutils.c (g_get_current_dir): Make g_get_current_dir work on
	systems with unlimited pathname length like the HURD (It worked
	there before, but only for pathes shorter than 2048). Closes
	Bug#4525 as reported by Marcus Brinkmann
	<Marcus.Brinkmann@ruhr-uni-bochum.de>.

2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* giounix.c (g_io_unix_write, g_io_unix_read): Interpret EINTR as
	G_IO_ERROR_AGAIN.

2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added the missing POSIX_NO_YIELD and
	POSIX_NO_PRIORITIES warning messages.

	* configure.in: Use AC_TRY_RUN instead of AC_TRY_LINK, to test for
	real thread support. On solaris pthread_create can be linked to
	even in -lc, but it doesn't work then.

	* configure.in: Don't use priorities for threads, when the
	minimal/maximal priorities couldn't be determined at configure
	time.

	* configure.in, gthread.c: Always define GSystemThread in
	glibconfig.h to represent a system thread.

	* configure.in: Do not use native recursive threads, when
	possibe. We use some features, that they do not expose (namely the
	depth counter).

	* glib.h, gthread.c: Redefined GStaticRecMutex. The functions are
	now implemented in a different way, which should be way
	faster. Alsothere are now functions g_static_rec_mutex_unlock_full
	and g_static_rec_mutex_lock_full to leave/enter a recursive mutex
	completly.

	* gthread.c (g_thread_self): Do not test the system_thread to be
	non-zero to speed things up.

	* gthread.c (g_mutex_init): Therefore set the system_thread of the
	main thread here.

	* tests/thread-test.c: Rerun all tests once again, but this time
	we fool the system into thinking, that the available thread system
	is not native, but userprovided.

2000-03-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gqueue.c (g_queue_push_tail_link, g_queue_push_head_link): We
	want the next and prev pointer of the inserted link to be NULL.

2000-03-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Another small change to the pthread_.. search
	pattern. Should work *now* for AIX.

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

	* gwin32.c (g_win32_error_message): New function that returns the
	message string for a Win32 error code.

	* glib.h: Declare it.

	* glib.def: Export it, plus g_node_copy.

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

	* configure.in: Make the search for pthread_attr_... prototypes
	find names at the start of a line also, like it is on AIX. Thanks
	to Valdis Kletnieks <Valdis.Kletnieks@vt.edu> for the info.

Wed Mar  1 10:39:39 2000  Tim Janik  <timj@gtk.org>

	* gslist.c (g_slist_reverse): minor optimization.

	* testglib.c (g_node_test): added a couple of tests for
	g_node_copy().

	* glib.h:
	* gnode.c (g_node_copy): new function to copy subtrees,
	supplied by dbsears@ix.netcom.com.
	changed iterator to walk the children list backwards, so
	we get down from O(n^2) to O(n).

	* gnode.c (g_node_first_sibling): applied patch from
	dbsears@ix.netcom.com to optimize access if node->parent
	is present.

	* gutils.c (g_get_any_init): backed out HAVE_PW_GECOS check around
	assignment of g_real_name, sicne HAVE_PW_GECOS is never defined and
	thus breaks the original code.

	* merged changes from 1.2.7.

Fri Jan 28 11:37:41 2000  Owen Taylor  <otaylor@redhat.com>

	Bug #4156 - Changes vaguely modelled after Scott Gifford's patch

	* gtimer.c (g_timer_elapsed): Never report negative times -
	clip times to 0.

	* gmain.c (g_timeout_prepare): Guard against unexpected
	clock shifts by never setting a timeout of more than
	data->interval msecs.

2000-02-27  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add new functions.

2000-02-23  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Add a missing step to the setup instructions for
	gcc-2.95.2. Thanks to Arnaud Charlet.

	* glib.def: Add missing entry point.

2000-02-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Changed GCC version test to also accept major
	versions > 2. Thanks to Ben Gertzfield <che@debian.org> for
	pointing this out.

Thu Feb 17 12:53:44 2000  Tim Janik  <timj@gtk.org>

	* gstring.c: changed g_str_hash() to a 31 bit version based on
	a submission by Karl Nelson and hand optimized ad absurdum by
	various people ;)

	* gstring.c: applied patch from havoc for new gstring functions,
	added some more sanity checks, coding style fixups.

2000-02-13  Havoc Pennington  <hp@pobox.com>

	* tests/string-test.c (main): Add tests for the new GString 
	features

	* testglib.c (main): Add tests for the new GString features

	* gstring.c (g_string_insert_len): New function; insert 
	a given length of string at a given position. 
	(g_string_append): reimplement in terms of g_string_insert_len
	(g_string_append_len): new function
	(g_string_insert_c): accept -1 for "pos" arg to mean "append"
	(g_string_append_c): reimplement in terms of g_string_insert_c
	(g_string_prepend): reimplement in terms of g_string_insert_len
	(g_string_prepend_len): new function
	(g_string_prepend_c): reimplement in terms of g_string_insert_c
	(g_string_insert): reimplement in terms of g_string_insert_len

	* glib.h: Declare g_string_insert_len, g_string_append_len,
	g_string_prepend_len

Sun Feb 13 08:16:47 2000  Tim Janik  <timj@gtk.org>

	* configure.in: wtf??? someone destroyed the configure.in, reverting to
	an older version from Feb 4 which apears to still work.

2000-02-07  Tor Lillqvist  <tml@iki.fi>

	* gmodule.rc.in gthread.rc.in: Move to corresponding subdirectories.

	* Makefile.am
	* gmodule/Makefile.am
	* gthread/Makefile.am: Change accordingly.

	* makefile.cygwin: Corresponding changes, some cleanup.

2000-02-05  Tor Lillqvist  <tml@iki.fi>

	* glib.rc.in gmodule.rc.in gthread.rc.in: New files, for putting
	version info in the DLLs on Win32.

	* Makefile.am: Generate corresponding *.rc files and distribute
	them.

	* makefile.cygwin.in: Add rules to automatically bump a "build
	number" in the version info in the rc files each time the DLL is
	built. But do this only for the person who releases binaries. If
	others build the DLLs, the build number is set to zero.

Fri Feb  4 19:36:05 2000  Tim Janik  <timj@gtk.org>

	* glib.h: 
	* gdataset.c: return stolen data from g_datalist_id_remove_no_notify()
	and g_dataset_id_remove_no_notify() to avoid second lookup for common
	use.

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

	* glib.h
	* gstrfuncs.c (g_filename_to_utf8, g_filename_from_utf8): New
	functions for conversion between UTF-8 and the encoding expected
	by C runtime functions like open() and stat(), and returned by
	readdir().

	Implement them on Win32 where we use the system "ANSI" codepage,
	which might be single-byte or double-byte. On Unix, just skip the
	issue for now and provide dummy implementations that return a copy
	of the argument.

	* README.win32
	* build-dll
	* glib.def: Minor updates.

Wed Jan 26 05:24:38 2000  Tim Janik  <timj@gtk.org>

	* glib.h:
	* gmain.c: s/current_time/dispatch_time/ for the dispatch() handlers.
	refetch the current time after invocation of poll() to cover up for
	the time spent in that function call.

Fri Jan 21 10:18:24 2000  Owen Taylor  <otaylor@redhat.com>

	* glib.h (G_N_ELEMENTS): Added G_N_ELEMENTS macro to determine
	the number of elements in an array.

Sun Jan  9 13:28:36 2000  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strtod): correctly fetch the current locale,
	fix from owen.

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

	* gmodule/gmodule-win32.c: Use FormatMessage to translate system
	error codes into textual messages.

1999-11-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h (G_TRYLOCK): This of course should return TRUE in a
	program with a thread-disabled GLib.

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

	* glib.def: g_strjoin was missing.

1999-11-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, config.h.win32.in, configure.in: Renamed
	GLIB_SIZEOF_PTHREAD_T to GLIB_SIZEOF_SYSTEM_THREAD to reflect
	changed meaning.

	* configure.in: Cope with systems, that have a pthread_t type,
	that is not a pointer. Hint from Karl Nelson
	<kenelson@ece.ucdavis.edu>. Define GLIB_SIZEOF_SYSTEM_THREAD to 4
	for Solaris. Cope with systems, that have no default mutex
	initialize, like obviously most DCE systems.

	* glib.h, gthread.c: Changed the prototype of thread_create and
	thread_self to return the system thread into provided memory
	instead of a return value. This is necessary, as HPUX has a
	pthread_t, that is bigger than the biggest integral type there.

	* gthread.c: system_thread is no longer a pointer, but an memory
	area of size GLIB_SIZEOF_SYSTEM_THREAD. Changed the
	zeroinitialization and the tests for zeroness accordingly.

1999-11-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Create docs/glib-config.1 from
	docs/glib-config.1.in. Makes 'make distcheck' happy (and me too).

	* glib-config.1: Removed from CVS, as it is a generated file.

1999-11-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Make the test for getpwuid_r work on newer AIX
	versions, too. Still works on Solaris and Linux. Patch from Craig
	Rodrigues <rodrigc@mediaone.net>.

1999-11-08  Tor Lillqvist  <tml@iki.fi>

	* gwin32.c (g_win32_getlocale): Look at env vars LC_ALL, LC_CTYPE
	and LANG first. Some refinements to the sublanguage logic.

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

	* makefile.{cygwin,msc}.in: Add gwin32 object. Add rule to make .i
	(preprocessed source) files.

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

	* glib.h
	* glib.def: Rename Win32-only functions from gwin_* to g_win32_*
	to match the GLib naming conventions.

	* gutils.c
	* gwin32.c
	* testglib.c
	* Makefile.am: Move the Win32-only functions to the new
	file gwin32.c

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

	* gutils.c (gwin_getlocale): New Win32-specific function, returns
	a Unixish current locale string (en, zh_TW etc).

	* glib.h: Declare it.

	* glib.def: Export it.

	* testglib.c: Test it.

	* gmessages.c (Win32: ensure_stdout_valid): Some improvements,
	make sure we don't call AllocConsole several times, which I think
	has happened.

Sun Oct 31 18:55:01 1999  ape@spacetec.no  (Asbjorn Pettersen)

	* gcache.c (g_cache_remove): Test if node is NULL.
	If not tested, GIMP's script-fu will crash. 

Sun Oct 17 18:11:40 1999  Tim Janik  <timj@gtk.org>

	* gdataset.c (g_data_set_internal): remove g_dataset_global_lock around
	destroy() notification here as well.

1999-10-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gdataset.c (g_datalist_clear_i): Avoid Freezing, when g_datalist
	is called recursivly. Reported by Ola Andersson <rand@ling.umu.se>.

Tue Oct 12 14:17:12 1999  Tim Janik  <timj@gtk.org>

	* glib.h: removed useless g_string(x) macro that cluttered the namespace
	and was just a poor wrapper around the cpp '#' symbol, use #x if you
	need to work around this.
	added new macro G_STRINGIFY(arg) that will convert arg to a string,
	no matter whether it contains macros or not.

1999-10-12  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32.in: Define the new GLIB_SIZEOF_* constants here,
	too.

	* glib.h: Small Win32 comments improvement.

Tue Oct 12 12:16:12 1999  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_printf_string_upper_bound): completly new
	implementation for printf string upper bounds calculation.
	we handle all glibc 2.1 format specifiers now, except for positional
	parameters (%nn$...) and wide char strings, plus some obscure upper
	case variants of the standard conversions. this fixes a lot of
	bugs in the old code, i.e.
	- NULL format strings
	- floats with exponents >+24
	- %G
	- precision specifications in general
	- negative field widths
	- %p for SIZEOF_VOID_P > 4 platforms
	we now issue warnigns in places where the old code would have
	caused buffer overruns anyways. warnings are suppressed when invoked
	from glogv(), to avoid infinite recursions if someone passes a log
	message that comes with really obscure format specifications.

Tue Oct 12 11:49:00 1999  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c: nuked old g_printf_string_upper_bound() version.

Tue Oct 12 03:34:40 1999  Tim Janik  <timj@gtk.org>

	* glib.h: added GFloatIEEE754 and GDoubleIEEE754 unions to access sign,
	mantissa and exponent of IEEE floats and doubles (required by the new
	version of g_printf_string_upper_bound). the unions are endian specific,
	we handle G_LITTLE_ENDIAN and G_BIG_ENDIAN as of currently. ieee floats
	and doubles are supported (used for storage) by at least intel, ppc and
	sparc, reference:
	http://twister.ou.edu/workshop.docs/common-tools/numerical_comp_guide/ncg_math.doc.html

Mon Oct 11 18:01:49 1999  Tim Janik  <timj@gtk.org>

	* configure.in: added additional checks to figure sizes of size_t,
	ptrdiff_t and intmax_t (required by g_printf_string_upper_bound).

Wed Oct  6 12:44:23 PDT 1999 Manish Singh <yosh@gimp.org>

	* configure.in: blah. use G_WITH_CYGWIN instead of G_HAVE_CYGWIN

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

	* glib.h: (Win32) Drop the mapping of POSIX function names to the
	underscored versions, it's unnecessary after all. With MSVC we get
	them from oldnames.lib, with gcc-2.95 and mingw32 from
	-lmoldname-msvc. Add comment about what headers to include for
	prototypes.

	* glibconfig.h.win32.in: Don't define WIN32 and NATIVE_WIN32.

	* gerror.c (g_on_error_query): (Win32) Slightly increased verbosity.

	* build-dll: Don't strip.

	* tests/string-test.c tests/dirname-test.c: Use G_OS_WIN32.

	* glib.def: Add g_thread_use_default_impl.

Sun Oct  3 19:46:55 PDT 1999 Manish Singh <yosh@gimp.org>

	* configure.in: use G_HAVE_CYGWIN instead of G_OS_FEATURE_CYGWIN

Sun Oct  3 19:25:42 PDT 1999 Manish Singh <yosh@gimp.org>

	* acconfig.h
	* configure.in
	* glibconfig.h.win32: G_OS_FOO #defines. I *think* I got the cygwin
	and beos stuff right, but I haven't tested it. The respective
	porters should fix any screwups

	* glib.h
	* gerror.c
	* gmain.c
	* gmessages.c
	* gscanner.c
	* gthread.c
	* gtimer.c
	* gutils.c
	* testglib.c: use G_OS stuff

Wed Sep 22 01:53:18 1999  Tim Janik  <timj@gtk.org>

	* glib.h (NULL): define NULL as (0L) if __cplusplus is defined, to
	avoid "ANSI C++ forbids implicit conversion from `void *' in argument
	passing" errors upon NULL usage in C++ programs (gcc-2.95 is on crack
	for erroring out on this, instead of just issueing a warning).

	* glib.h (g_trash_stack_pop): use uncasted NULL again.

Fri Sep 17 10:24:45 1999  Tim Janik  <timj@gtk.org>

	* gmem.c (g_mem_chunk_compute_size) (g_mem_chunk_new): applied
	patch from Soeren Sandmann <sandmann@daimi.au.dk>, to force mem
	chunk's area sizes to be a multitiple of atom_size, and to
	eliminate the MAX_MEM_AREA restriction of 65536 bytes. we also
	catch cases where users pass an area size < atom size with a
	return_if_fail statement now (which is ok, because previously this
	lead to memory corruption anyways).

Thu Sep 16 13:19:54 1999  Tim Janik  <timj@gtk.org>

	* glib.h (g_trash_stack_pop): add explicit (GTrashStack*) cast for NULL
	pointer to cure ANSI C++ error.

Mon Sep 13 23:25:59 1999  Tim Janik  <timj@gtk.org>

	* gmessages.c (g_logv): in case we have to abort the program,
	debugging is enabled and we are not called recursively, try
	to abort with raise (SIGTRAP) first, so developers may ignore
	certain failure conditions during debugging stage.

Thu Aug 26 15:09:36 1999  Tim Janik  <timj@gtk.org>

	* Makefile.am:
	* gmodule/Makefile.am:
	* gthread/Makefile.am: added --export-dynamic so we can load dynmic
	modules, (required, according to the libtool 1.3.3 docu).

1999-07-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c (g_rand_new): Use /dev/urandom, as it doesn't block,
	which /dev/random might do. Do not XOR the time, when getting the
	seed form /dev/urandom, as this is good itself. Prevent the
	initial seed from being zero, which causes the PRNG to produce
	only zeros. Hints from Colin Plumb <colin@pgp.com>.

1999-08-17  Tor Lillqvist  <tml@iki.fi>

	* glib.h (g_trash_stack_push): Add a cast.

	* gslist.c
	* glist.c: Make the inline functions static inline, and add
	separate extern wrappers. Not all compilers produce callable entry
	points for inline functions, even if gcc does.

Sun Aug 15 02:47:14 1999  Tim Janik  <timj@gtk.org>

	* glib.h (g_trash_stack_pop): eliminate memset() call, since string.h
	has not neccessarily been included prior to glib.h.

Mon Aug  2 21:03:10 1999  Tim Janik  <timj@gtk.org>

	* configure.in: added --enable-msg-prefix option.

	* gmessages.c (g_log_default_handler): feature "prg_name (pid:%u): "
	if --enable-msg-prefix was selected (use "(process:%u): " if
	g_get_prgname () returns NULL, along the lines of g_on_error_query).

1999-08-03  Tor Lillqvist  <tml@iki.fi>

	* glib.h
	* gstrfuncs.c
	* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
	g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
	destination parameter, always g_malloc a new string.  Fix bug in
	g_strcompress, octal digits were gobbled up without limit, should
	use max three.

	Sources that use g_strescape must have ifdefs to be compilable
	both with GLib 1.2 and 1.3.

Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>

	* glib.h
	* gstrfuncs.c: the #define for g_strescape interfered with the
	compilation of the function, so just remove the function and
	note that it's deprecated in the header

1999-08-01  Tor Lillqvist  <tml@iki.fi>

	* gstrfuncs.c (g_strccpy, g_strecpy): New functions.

	* glib.h: Declare and document them. Define the deprecated
	g_strescape as a macro that calls g_strecpy.

	* tests/strfunc-test.c (main): Test them.

	* makefile.{cygwin,msc}.in
	* tests/makefile.{cygwin,msc}.in: Remove gstack and its test
	program.

	* glib.def: Additions and removals.

	* README.win32: Improve gcc build instructions.

	* build-dll: Also build import library for MSVC.

Sat Jul 24 20:11:35 1999  Tim Janik  <timj@gtk.org>

	* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
	* incorporated proposed cleanups from gtk-devel-list.

	* bumped version number to GLib-1.3.1

	* glib.h:
	* gqueue.c:
	* gstring.c:
	* glist.c:
	removed string tokenisation (we got g_strsplit() and g_strjoin()
	already) and readline functions.
	s/g_list_delete/g_list_delete_link.
	implemented g_slist_delete_link.
	removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
	macro, g_atexit() is provided for public consumption.
	added GTrashStack inline utility functions.
	reimplement double eneded queues.
	removed GStack implementation, people can use a queue or a (singly)
	linked list for this task.
	deprecated g_strescape(), we need the SunOS variants here.

	* gdate.c: added DEBUG_MSG() macro to wrap old messages.

	* *.*: CVS merges.

	* upgrade to libtool 1.3.3.

1999-07-21  Tor Lillqvist  <tml@iki.fi>

	Win32: With the latest gcc (2.95, pre-release), we can have binary
 	compatibility with MSVC by using the switch -fnative-struct. No
 	longer build DLLs with .gcc in the name when using gcc.

	* README.win32: Renew gcc build instructions.

	* build-dll: Comments change, handle also .a files.

	* makefile.cygwin.in
	* tests/makefile.cygwin.in: Remove .gcc from DLL name.

1999-07-13  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Correct URL for mingw runtime sources.

	* build-dll: Combine commands with &&.

	* glib.h: Map also rmdir() and hypot() for MSVCRT library.

	* makefile.cygwin.in
	* tests/makefile.cygwin.in: New DLL naming style. GCC-compiled DLLs are
 	now called *.gcc.dll, to avoid binary incompatibilities with
 	MSVC-compiled versions.

	* makefile.msc.in: Cosmetics.

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

	* configure.in: Test for pthread_join rather than for
	pthread_create to determine the right thread-lib. Makes it work on
	mips-sgi-irix6.5. Hitn from to Jari Vuoksenranta
	<javu@piano.ux.phys.jyu.fi>.

1999-07-02  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Note about need to fix another bug in the mingw32
 	headers.

	* makefile.msc.in: Debugging turned on via an nmake variable,
	no need to edit the makefile.

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

	* configure.in, acconfig.h, gutils.c: Added a g_memmove
	replacement for platforms without memmove, where bcopy can't
	handle overlapping copies and the corresponding checks, which is
	taken form the PERL Configure routine.

	* glib.h: Updated the commentary about g_memmove to be right and
	more GLib-like.

	* configure.in: Removed test for rand_r, as it isn't used anymore.

1999-06-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h, grand.c: Finally removed the g_random_normal and
	g_rand_normal functions.

1999-06-28  Tor Lillqvist  <tml@iki.fi>

	* glib.def: Add missing export of g_strncasecmp.

1999-06-21  Jose Mercado  <jmercado@mit.edu>

	* glib.spec.in: Changed version number (1.1->1.3) in files section
	to allow rpm to build packages again.

1999-06-21  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Update the pthreads snapshot version we want.
	Advice how to hand-expand the makefile.*.in files.

	* config.h.win32.in: Define values needed by Sebastian Wilhelmi's
	new thread stuff.

	* glib.def: Add new functions.

	* glibconfig.h.win32.in: Update the pthreads snapshot version.
	Fix typo.

	* gthread.c: Include config.h, guard inclusion of unistd.h.  When
 	using gcc on Win32, g_thread_functions_for_glib_use must be marked
 	for export here, too.

	* gtimer.c: Implement g_usleep on native Win32 using Sleep (which
	only has millisecond granularity, though).

	* makefile.cygwin.in
	* makefile.msc.in: Update pthreads snapshot version. File
	name changes. Remove testgthread.

	* tests/makefile.cygwin.in
	* tests/makefile.msc.in: Add thread-test. Link with gthread lib.

1999-06-18  Jeff Garzik  <jgarzik@pobox.com>

	* tests/Makefile.am:  Re-order tests in alpha order.

1999-06-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Changed test for pthread_attr_setstacksize from
	AC_TRY_COMPILE to AC_TRY_LINK.

1999-06-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, acglib.m4, acconfig.h, glib.h, gthread.c:
	Completed the thread support in GLib. Thread creation,
	prioritizing threads, yielding, joining threads as well as
	reader/writer locks and recursive mutexes are now in place. Please
	test heavily on your platform. It is so far tested on
	Linux/i386/pthreads, Solaris/Sparc/pthreads and
	Solaris/Sparc/solaristhreads.

	* gtimer.c, glib.h: Implement g_usleep (gulong microseconds) for
	thread safe sleeping. (sleep() is not MT-safe at all!)

	* gutils.c: Avoid compiler warning.

	* tests/Makefile.am, tests/thread-test.c: New program to test some
	aspects of the thread implementation.

	* gthread.c, Makefile.am: Renamed from gmutex.c to reflect the
	change of content.

	* configure.in: Purged all appearances of nspr. 

Wed Jun  2 11:42:46 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3.2 (BeOS changes merged)

1999-05-29  Tor Lillqvist  <tml@iki.fi>

	* gstrfuncs.c (g_strescape): Backslashify also '"' characters.

	* glib.h: Document g_strescape.

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

	* glib.h (Win32): Map fileno to _fileno for mingw32. Map fstat to
 	_fstat.

	* README.win32: Advice also to remove -lmoldname in the
 	patch to the egcs-1.1.2 spec file.

Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* gmodule/Makefile.am: Another small fix.

1999-05-08  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am tests/Makefile.am: Correct rules for making the
	win32-related files that are made from corresponding .in files.
	Is there a cleaner way than explicitly writing rules that invoke
	config.status?

Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>

	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3.3

1999-06-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
	is..... and to..... macros, which take unsigned chars, not chars!
	Thanks to Morten Welinder <terra@diku.dk> for pointing this out.

Thu Jun  3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>

	* gerror.c (g_on_error_query): check isatty() before querying so
	we don't loop endlessly

Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3.2

1999-05-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c: provide a poll prototype for SunOS, as they do not do
	it self. Hint from Christian Parg <cparg@fs-design.de>.

Tue May 25 12:23:07 1999  Owen Taylor  <otaylor@redhat.com>

	* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
	(Reported by Charles Levert <charles@comm.polymtl.ca>)

Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.3

1999-05-08  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am tests/Makefile.am: Correct rules for making the
	win32-related files that are made from corresponding .in files.
	Is there a cleaner way than explicitly writing rules that invoke
	config.status?

Sat May  1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3

1999-04-30  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am: Don't distribute glibconfig.h.win32.in, but
	glibconfig.h.win32. Generate it when making a dist. Also generate
	makefile.msc and config.h.win32 from corresponding .in files when
	making dist.

	* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
	@GLIB_BINARY_AGE@ (needed in config.h.win32).

	* glibconfig.h.win32.in: Use static mutex structure and initial
	value corresponding to the 1999-04-07 snapshot of pthreads-win32.

	* tests/Makefile.am: Distribute makefile.msc. Generate it when
	making dist.

	* tests/makefile.msc.in: New file.

	* tests/node-test.c: Include <stdlib.h> for exit().

Thu Apr 29 02:16:36 1999  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c: minor code cleanups.

Tue Apr 27 13:11:29 1999  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
	the events field so we don't give IRIX fits.

Tue Apr 20 08:42:22 1999  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_unexp_token): behave conservative with
	G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
	to be "null" in that case.

1999-04-20  Havoc Pennington  <hp@pobox.com>

	* gutils.c (g_vsnprintf):  When using the vsnprintf()
	implementation, '\0'-terminate the resulting string
	and return its length rather than -1.

Mon Apr 19 13:42:21 1999  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_main_iterate): Added missing
	#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
	the first place!)

1999-04-18  Havoc Pennington  <hp@pobox.com>

	* gutils.c (g_snprintf): When using the vsnprintf()
	implementation, '\0'-terminate the resulting string
	and return its length rather than -1.

Fri Apr 16 06:52:07 1999  Tim Janik  <timj@gtk.org>

	* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
	expected token as well, so we get "- expected end of file" instead of
	"- expected (unknown) token <0>".

Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.2

1999-04-12  Elliot Lee  <sopwith@mh69.mh.cuc.edu>

	* g_strchug(): s/strcpy/memmove/

1999-04-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Adjusted the test for an unimplemented
	getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.

Sun Apr 11 15:07:34 1999  Tim Janik  <timj@gtk.org>

	* configure.in: bumped versin number to GLib 1.2.2, interface 2,
	binary 2.

	* NEWS: updates.

Sun Apr 11 14:37:06 1999  Tim Janik  <timj@gtk.org>

	* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.

Sat Apr 10 19:30:50 1999  Tim Janik  <timj@gtk.org>

	* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
	and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for
	compile time string concatenation.

Thu Apr  8 19:53:19 1999  Owen Taylor  <otaylor@redhat.com>

	* gmain.c (g_main_iterate): Check for two threads
	calling g_main_iterate at once.

	* gmain.c: If the set of poll file descriptors changes
	during a call to poll(), abort that call, and start
	a new poll. My test program still segfaults
	obscurely on glibc 2.0 (in read()!!!), but now it works on
	glibc 2.1, so I'll blame something else for the other segfault.

1999-03-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Fixed slight bug, that made configure hang on some
	systems. Please do not merge this into 1.3 branch. It's taken care
	of differently there. Info from J. Rhett Aultman
	<cuplan@alley.gator.net>

Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.1

	* README:
	  INSTALL: 
	  NEWS: 
	  sanity_check: updated

	* glibconfig.h.win32.in:
	  Makefile.am:
 	  docs/glib-config.1.in:
	  docs/Makefile.am: Added files used to generate new files.

	* glibconfig.h.win32:
	  docs/glib-config.1: Removed, now generated.

	* configure.in: Added to output now-generated files.

Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>

	* giounix.c: add user_data param to check and prepare functions

Mon Mar 22 03:54:43 1999  Tim Janik  <timj@gtk.org>

	* glib.h:
	* gmain.c: add user_data to the GSource ->check and ->prepare
	functions, so it can be used to e.g. pass a GPollFd.
	(g_main_poll): only add poll records with an events mask != 0 to the
	fd_array. don't even bother calling poll_func() if fds=timeout=0.
	added debugging printouts around poll_func() invokation that can be
	enabled with #define G_MAIN_POLL_DEBUG.

Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.sub
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.2f

	* autogen.sh: libtool is not required to autogen glib

	* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
	needed)

1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Fixed another stupid fault of mine: Did
	s/g_static_/g_private_/g

Wed Mar 17 03:17:42 1999  Tim Janik  <timj@gtk.org>

	* configure.in bumped versin number to GLib 1.2.1, interface 1,
	binary 1.

	* NEWS: updates.

	* glib.h: added GLIB_CHECK_VERSION() macro similar to
	GTK_CHECK_VERSION().

Sun Mar 14 17:50:35 1999  Tim Janik  <timj@gtk.org>

	* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
	to g_return_if_fail().
	(g_mem_profile): 
	(g_mem_chunk_print): 
	(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
	messages.

	* gtimer.c (g_timer_*):	changed a bunch of g_assert() statements
	to g_return_if_fail().
	* grel.c (g_*): changed a bunch of g_assert() statements to
	g_return_if_fail() and added some extra ones to check relation != NULL.

1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Also accept _Pctime_r instead of ctime_r, while
	seraching for the right `_REENTRANT' flag. This is for Digital
	UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.

Tue Mar  9 23:25:50 1999  Tim Janik  <timj@gtk.org>

	* configure.in: check for working realloc (NULL,).
	* gmem.c (g_realloc): use malloc() for initial allocation on systems
	where realloc(NULL,) will not work (this is the case on SunOS, reported
	by Tom Geiger).

Mon Mar  8 07:42:08 1999  Tim Janik  <timj@gtk.org>

	* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
	flag around the call to g_hook_free() to avoid spurious
	warnings (happens during destruction phase).

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

	* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
	from config.h.win32 to glibconfig.h.win32

	* acconfig.h, configure.in, config.h.win32: Added test for DCE
	versions of mutex_trylock and cond_timedwait. The win32 versions
	are posix, aren't they?

1999-03-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
	Friedrich Dominicus <Friedrich.Dominicus@inka.de>

1999-03-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_any_init): Fixed yet another bloody
	implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
	<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
	test better than that, but have no idea, how to do that easily.

Sun Feb 21 22:11:51 CST 1999  Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.2.0

	* AUTHORS: updated

Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>

	* *.[ch]: inserted additional note to look for ChangeLog and
	  AUTHORS file for a log of modifications.

Sun Feb 21 14:01:00 1999  Dr Mike <drmike@redhat.com>

	* Made specfile generated, tweaked slightly

Sat May  8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* configure.in
	  gmodule/Makefile.am
	  gthread/Makefile.am: Better testing reveals better
	  methods.  Fixes for BeOS.

Sat May  8 01:52:29 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* configure.in
	  gerror.c
	  gmain.c
	  gstrfuncs.c
	  gutils.c
	  ltconfig
	  ltmain.sh
	  gmodule/Makefile.am
	  gmodule/gmodule.c
	  gmodule/gmoduleconf.h.in
	  gmodule/gmodule-beos.c
	  gthread/Makefile.am: Port to BeOS by myself and Richard Offer.

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

	* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
 	config.h.win32.in tests/makefile.msc.in tests/makefile.cygwin.in:
 	New files, used to generate corresponding non-.in files when
 	making a dist. This is just so the version numbers will be kept in
 	synch automatically.

	* configure.in: Also substitute @GLIB_MAJOR_VERSION@,
 	@GLIB_MINOR_VERSION@, and @GLIB_INTERFACE_AGE@.

	* Makefile.am tests/Makefile.am: Also distribute makefile.cygwin.

	* gerror.c (g_on_error_query): On Win32, put up a MessageBox and
 	then exit.

	* glib.def: Add a couple of functions.

Sat May  1 10:26:20 PDT 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.status
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.3

1999-04-25  Tor Lillqvist  <tml@iki.fi>

	* README.win32: More editing.
	* build-dll: Use gcc, not ld to link.
	* glib.h: On native Win32 use _unlink().
	* gscanner.c: Use corrent NATIVE_WIN32 feature test macro,
	not _MSC_VER.
	* gstring.c: Include <io.h> on Win32 for _read prototype.
	* gutils.c: Remove old IO channel code (was in #if 0).
	* makefile.cygwin: Don't need to link with kernel32 and msvcrt
	explicitly, they are included anyway.

1999-04-24  Tor Lillqvist  <tml@iki.fi>

	Support added for building using a GNU toolchain on Win32,
	i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).

	* README.win32: Updated.
	* build-dll makefile.cygwin tests/makefile.cygwin: New files.
	* glib.h glib.def glibconfig.h.win32: Slight updates. 
	* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
	* gmain.c gutils.c testglib.c tests/string-test.c: Test for
	NATIVE_WIN32, not _MSC_VER.
	* gmutex.c: Must declare g_thread_functions_for_glib_use as
	exported (using the GUTILS_C_VAR macro).
	* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
	* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
	* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
	value of g_thread_functions_for_glib_use (?).
	* makefile.msc tests/makefile.msc: Cosmetics.

Fri Apr 23 14:29:25 BST 1999  Tony Gale <gale@gtk.org>

	* glib.h: Fix typo in g_string_ncasecmp macro (by me).
	  Add b_string_strncasecmp macro.

1999-04-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_any_init): use sysconf (_SC_GETPW_R_SIZE_MAX) as
	the new initinal bufsize for getpwuid_r on systems, that support
	this. Hint from Holger Duerer <H.Duerer@zait.uni-bremen.de>.

Sat Apr 17 20:55:13 BST 1999  Tony Gale <gale@gtk.org>

	* glib.h, gstring.c: Add new g_string functions for reading
	  from file/socket descriptors, and tokenising strings.

	  Added various g_string macros.

Tue Apr 13 23:28:32 1999  Tor Lillqvist  <tml@iki.fi>

	* README.win32: Mention the tests directory.

	* glib.def: Add the functions from grand.c.

	* glibconfig.h.win32: Add unsigned max values, and the format
 	strings.

	* makefile.msc: Add grand.

	* tests/{date-test,node-test}.c: Include <stdlib.h> for exit().

	* tests/makefile.msc: New file.

1999-04-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h: Moved struct declaration up. Style fixes.

	* grand.c: Style fixes. Only try to open /dev/random once.

	* tests/rand-test.c (main): New tests; Slight bug fix. 

1999-04-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* grand.c, tests/rand-test.c: New files to implement the Mersenne
	Twister Pseudo Random Number Generator.

	* glib.h, AUTHORS, Makefile.am, tests/Makefile.am: Changed
	accordingly.

Thu Apr  8 21:12:30 CDT 1999 Shawn T. Amundson <amundson@gtk.org>

	* Released GLib 1.3.0

1999-03-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added a check for the right format to printf and
	scanf long longs. It is %qi instead of %lli on FreeBSD for
	whatever reason.

1999-03-28  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (glibconfig.h): Make sure `glibconfig.h' exists
	after the rule is fired.
	(install-exec-local): Install glibconfig.h only if the contents
	are different from the currently installed glibconfig.h.

1999-03-26  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (configexecincludedir): Rename from 
	configincludedir so that glibconfig.h will be installed 
	as part of `make install-exec'. 

Thu Mar 25 22:45:47 1999  Tor Lillqvist  <tml@iki.fi>

	* config.h.win32: Update version numbers.

	* glibconfig.h.win32: Update version numbers and pthreads-win32-
 	related magic values.

	* README.win32: Some improvements.

	* makefile.msc: Add gqueue and gstack. Correct version number.

Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>

	* acinclude.m4
	* config.guess
	* config.sub
	* ltconfig
	* ltmain.sh: upgrade to libtool 1.2f

	* autogen.sh: libtool is not required to autogen glib

	* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
	needed)

1999-03-18  Jeff Garzik  <jgarzik@pobox.com>

	* glib.def: Add new g_list, g_stack, g_queue functions.

1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: added new AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
	to hold various defines to get the right thread implementation on
	different platforms. Also look in -ldce for pthread_create. Should
	make it work on HP-UX 10.x. Information from "D. Emilio Grimaldo
	Tunon" <emilio_tunon@nl.compuware.com>.

1999-03-17  Jeff Garzik  <jgarzik@pobox.com>

	* gstack.c, gqueue.c:
	Add copyright, clean up code a bit.

1999-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added missing values for G_MAXU(SHORT|INT|LONG) on
	platforms with only /usr/include/values.h.

	* acconfig.h: Removed unnecessary macros.

	* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
	from config.h.win32 to glibconfig.h.win32. Taken from glib 1.2
	branch.

	* configure.in: Also accept _Pctime_r instead of ctime_r, while
	seraching for the right `_REENTRANT' flag. This is for Digital
	UNIX 4.0d. Taken from glib 1.2 branch.

Wed Mar 17 03:14:56 1999  Tim Janik  <timj@gtk.org>

	* glib.h: added GLIB_CHECK_VERSION() macro similar to
	GTK_CHECK_VERSION().

Wed Mar 17 01:46:28 1999  Tim Janik  <timj@gtk.org>

	* merges from glib-1-2:

Sun Mar 14 17:50:35 1999  Tim Janik  <timj@gtk.org>

	* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
	to g_return_if_fail().
	(g_mem_profile):
	(g_mem_chunk_print):
	(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
	messages.

	* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
	to g_return_if_fail().
	* grel.c (g_*): changed a bunch of g_assert() statements to
	g_return_if_fail() and added some extra ones to check relation != NULL.

Tue Mar  9 23:25:50 1999  Tim Janik  <timj@gtk.org>

	* configure.in: check for working realloc (NULL,).
	* gmem.c (g_realloc): use malloc() for initial allocation on systems
	where realloc(NULL,) will not work (this is the case on SunOS, reported
	by Tom Geiger).

Mon Mar  8 07:42:08 1999  Tim Janik  <timj@gtk.org>

	* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
	flag around the call to g_hook_free() to avoid spurious
	warnings (happens during destruction phase).

1999-03-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
	Friedrich Dominicus <Friedrich.Dominicus@inka.de>

1999-03-16  Timur Bakeyev  <mc@bat.ru>

	* configure.in: Fix problem with pthread_create in libc, as running
	"gcc test.c -l " is not legal.

1999-03-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* tests/type-test.c: Added a test for the
	G_(U)?INT(16|32|64)_FORMAT and G_(MIN|MAX|MAXU)(SHORT|INT|LONG)
	macros.

	* configure.in: Removed G_(U)?INT8_FORMAT again, as it can't be
	used for scanf.

	* configure.in: Added the macros G_MAXU(SHORT|INT|LONG). I do not
	know how to handle these on platforms with /usr/include/values.h,
	but without /usr/include/limits.h. Please someone add this.


1999-03-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added the macros G_(U)?INT(8|16|32|64)_FORMAT to
	use for printf and (much more important) scanf format strings for
	the corresponding GLib types. 

	* glib.h Added G_(U)?(SHORT|INT|LONG)_FORMAT for consistency. It
	however makes no sense to also provide G_(FLOAT|DOUBLE)_FORMAT, as
	they are different for printf (f for both) and scanf (f for float,
	lf for double). Defining G_INT_FORMAT makes sense however, as we
	might want to define gint to something different than int someday
	in the future. Idea from Sascha Brawer <sb@adasys.ch>.

1999-03-14  Jeff Garzik  <jgarzik@pobox.com>

	* gdate.c:
	Commented out debugging output.

	* tests/Makefile.am, tests/date-test.c:
	Added test of the GDate module, based closely on testgdate.c.

	* tests/Makefile.am:
	Bugfix - compile tests with @GLIB_DEBUG_FLAGS@.

1999-03-14  Raja R Harinath  <harinath@cs.umn.edu>

	* configure.in (glibconfig.h): Remove widechar tests and defines.
	(fd_set): Change the grep for `fd_mask' to search for `fd_set'.
	* gerror.c (fd_mask): Remove conditional typedef.  It is not used
	elsewhere in the file.
	* gmain.c (fd_mask): Likewise.

1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Test for posix threads first, then for dce threads.

1999-03-11  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Revamped the thread configure stuff. Now dce
	threads (old posix draft) are recogniced. This is necessary,
	because dce threads are in fact working quite differently from
	posix threads. Also changed the conditions for checking for MT
	safe functions a bit, because G_THREADS_IMPL_NONE still have to
	compile thread safe. NOTE: Please do not commit my change to
	glib-1-2/{acconfig.h,configure.in,config.h.win32} from 1999-03-03,
	as the current change will take care of that too.

Tue Mar  9 14:37:32 1999  Jeff Garzik  <jgarzik@pobox.com>

	* Makefile.am, glib.h, gstack.c, gqueue.c,
	  tests/Makefile.am, tests/queue-test.c, tests/stack-test.c:
	Added stack, queue ADTs and related tests.

	* glib.h, glist.c:
	New g_list_delete() function.

Sat Mar  6 11:03:08 1999  Asbjorn Pettersen  <ape@lrdpf.spacetec.no>

	* gutils.c (g_get_any_init): add OS/2 changes.
	change '\\' in HOME to '/'.

1999-03-03  Josh MacDonald  <jmacd@spin.dsl.pacbell.net>

	* glib.def: g_spaced_primes_closest was omitted here, so I
	couldn't build Xdelta on Windows.

1999-03-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gutils.c (g_get_any_init): Fixed yet another bloody
	implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
	<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
	test better than that, but have no idea, how to do that easily.

Sat Feb 27 01:18:47 1999  Tim Janik  <timj@gtk.org>

	* ChangeLog: moved old ChangeLog to ChangeLog.pre-1-2, and started
	new one.

	* configure.in: set glib version to 1.3.0.
