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.
