Tue Nov 20 20:54:25 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gunidecomp.[ch] glib/gen-unicode-tables.pl: Patch
	from Andrew Taylor to optimize the decomposition table
	to eliminate relocations and save space. (#64982)

2001-11-18  Hans Breuer  <hans@breuer.org>

	* glib/glib.def : 
	* glib/makefile.msc.in : remove g_log_domain_glib usage/export

	* tests/makefile.msc.in : add iochannel-test

Sat Nov 17 17:21:57 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/Makefile.am glib/*.c glib/gmessages.h: Get
	rid of g_log_domain_glib variable in favor of just
	using a string constant.

Sat Nov 17 14:10:35 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gbsearcharray.h: Include gtypes.h not gobject/gtype.h

	* glib/glib-object.h gobject/*.h: Prevent headers from
	being included directly except when compiling GObject.

	* gobject/gvaluecollector.h: Include glib-object.h so that
	this file can be included directly, since we don't
	include it _from_ glib-object.h.

	* gobject/gtype.c: Remove struct _GValue hack since we 
	now include glib/gvaluecollector.h which simply pulls in
	glib-object.h.

2001-11-15  Matthias Clasen  <matthiasc@poet.de>

	* glib/giochannel.c: Documentation fixes.
 
2001-11-15  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>

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

2001-11-15  Michael Meeks  <michael@ximian.com>

	* glib/giounix.c (g_io_channel_unix_new): set the fd
	before using it.

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

	* tests/makefile.{mingw,msc}.in (TESTS): Add back mainloop-test
	here, too.

	* tests/Makefile.am: Remove leftover comment that claimed
	mainloop-test is removed.

2001-11-14  Matthias Clasen  <matthiasc@poet.de>

	* glib/gpattern.c: add UTF-8 support.

	* tests/patterntest.c: add UTF-8 and equality tests.

Wed Nov 14 07:34:24 2001  Tim Janik  <timj@gtk.org>

	* glib/galloca.h (g_newa): provide g_newa(ctype, count) on top of
	g_alloca() like we provide g_new() on top of g_malloc().

Tue Nov 13 21:25:35 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/{gen-unicode-tables.pl,gunibreak.c,gunibreak.h,
	gunichartables.h, gunicomp.h, gunidecomp.[ch], 
	guniprop.c}: Patch from Andrew Taylor to improve
	tables and reduce relocations by using indices 
	rather than pointers. (#64433)
	
	* tests/unicode-normalize.c (main): Fix for changes
	to g_strsplit().

2001-11-12  Darin Adler  <darin@bentspoon.com>

	* glib/gstrfuncs.c: (g_strsplit): Fix max_tokens == 1 case to
	match documentation.
	* tests/strfunc-test.c: (main): Add tests.

	* tests/.cvsignore: Recently-added test.

Mon Nov 12 03:01:28 2001  Tim Janik  <timj@gtk.org>

	* glib/gscanner.c (g_scanner_eof): G_TOKEN_ERROR is also an end
	of stream condition.

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

	* glib-zip.in (DEVZIP): Also share/glib-2.0.

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

	* glib/gwin32.c (g_win32_getlocale): Add a couple of languages
	that have LANG_* codes in newest headers, just for completeness.

2001-11-08  Wang Jian  <lark@linux.net.cn>

	* configure.in(ALL_LINGUAS): Added zh_CN for Simplified Chinese.

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

	* glib/gwin32.c: Don't define LANG_AZERI etc in case those aren't
	defined in the headers (MSVC 5.0).
	(g_win32_getlocale): Instead, surround uses of those with
	#ifdef. Those MSVC 5.0 users that want to build a GLib that
	recognizes those languages should download the Platform SDK and
	use the headers from it.

2001-11-07  Peter Williams  <peterw@ximian.com>

	* glib/gdir.c (g_dir_read_name): Return NULL when done reading.

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

	* glib/Makefile.am (gspawn_win32_helper_LDFLAGS): Use -mwindows.

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

	* README.win32: Minor edits.

	* glib-zip.in: Build separate runtime and developer packages.

	* glib/libcharset/config.charset (os): Don't need to match mingw
	after all, the charset.alias file isn't even used on Win32... (see
	localcharset.c).

	* glib/makefile.mingw.in: Add gdir.

	* glib/glib.def: Add g_dir_* entry points.

Sun Nov  4 20:45:21 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in (CFLAGS): Add check for dirent.h

	* glib/glib.h glib/Makefile.am: Add gdir.

	* glib/gdir.c (g_dir_close): Couple of small tweaks
	now that it is actually compiling...

Sun Nov  4 20:29:31 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gdir.[ch]: Indentation fixes, some rewriting of docs to
	conform to gtk-doc standard.

	* glib/gdir.[ch] (g_dir_close): Remove the boolean 
	return value. What would you do if closing failed?
	What would the user do if you printed a warning
	message "closing directory %s failed"?

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

	* glib/gdir.[hc] : (new files) simplified wrapper around dirent 
	functions to improve portability of downstream libs/apps
	* glib/makefile.msc.in : use them
	* glib/glib.def : export them
	* config.h.win32.in : needing HAVE_DIRENT_H defined

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

	* tests/Makefile.am: On Win32, create separate .exp file for
	module-test.o and link with that. Otherwise the GNU linker doesn't
	export the g_clash_func.

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

	* glib/giowin32.c : static correctness

	* glib/gwin32.c : some more #if defined (SUBLANG_* ...
	(g_win32_get_package_installation_subdirectory) use g_build_filename
	instead of duplicating its logic

	* glib/glib.def : removed duplicates, added mising, removed
	compat cruft

Fri Nov  2 19:54:16 2001  Tim Janik  <timj@gtk.org>

	* glib/gbacktrace.h (G_BREAKPOINT): remove public signal.h include.

Thu Nov  1 21:48:43 2001  Owen Taylor  <otaylor@redhat.com>

	* tests/mainloop-test.c (recurser_idle): Recurse
	with may_block = FALSE, so we don't get into
	the pathology where the recurser_idle recurses
	for 10 iterations, and the only thing that is
	running is the recurser idle, which adds
	another recursion for each of those 10 iterations
	and....

	* tests/mainloop-test.c (create_crawler): Fix race
	condition where a crawler source could be destroyed
	before it was added to the crawler array.

	* test/Makefile.am: Add mainloop-test back.
	
2001-11-01  Marius Andreiana  <mandreiana@yahoo.com>

	* configure.in: Added ro (Romanian) to ALL_LINGUAS

2001-10-31  Havoc Pennington  <hp@redhat.com>

	* glib/gmain.c (g_main_loop_run): fix to the locking so we don't
	hang

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

	* configure.in: Make --with-threads=none mean, that we want thread
	support, but no default thread implementation. This also was the
	original intention, but disapeared around 1998... So it doesn't
	seem to be the most requested feature, but we went far to make it
	possible in the code, so I resurrected this feature.

	* INSTALL.in: Describe the --enable-gc-friendly, --disable-threads
	and --with-threads options of configure.

	* glib/gmain.c (g_main_context_acquire, g_main_context_release,
	g_main_context_wait): Use the right conditional (G_THREADS_ENABLED
	instead of G_THREAD_ENABLED). Also remove wrong
	return-statement. Unfortunately mainloop-test still does fail. Many
	thanks to Andrea Fazekas <fazek@ludens.elte.hu> for spotting
	this. (#63455)

2001-10-31  Matthias Clasen  <matthiasc@poet.de>

	* gobject/gsourceclosure.c (g_source_set_closure): Fix documentation.

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

	* glib-zip.in: New file, used to build distribution packages for
	Windows.

	* configure.in: Expand it.

	* Makefile.am: Distribute it.

	* config.h.win32.in: Update to match currently produced config.h

2001-10-29  Daniel Egger  <degger@fhm.edu>

	* glib/gbacktrace.h: Fix non-Intel/-Alpha version of the 
	G_BREAKPOINT macro to include <signal.h> and use SIGTRAP.

	* glib/gmessages.c: Conditionalise definition of args2
	depending on the definition of HAVE_VSNPRINTF to avoid 
	compiler warning.

	* gobject/testgruntime.c
	* tests/patterntest.c: Include <string.h> to avoid warnings.

Mon Oct 29 11:29:37 2001  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-2.0.m4: Don't try to use PKG_CONFIG
	when we didn't find it. (#62944, Eric Lemings)

	* m4macros/glib-2.0.m4: Fix problem with spaces around =
	sign in assignment. (#63209, Arkadiusz Miskiewicz)

Mon Oct 29 10:59:36 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Check for path to Perl, add gobject/glib-mkenums 
	to AC_OUTPUT. (#63093, Dan Winship)

Mon Oct 29 10:55:12 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/libcharset/Makefile.am (EXTRA_DIST): Dist
	ref-add.sin, ref-del.sin. (#63092, Dan Winship)

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

	* glib/gmain.c (g_main_loop_quit): Conditionalize thread related
	calls. (#63091)

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

	* glib/glib.def: Add missing g_pattern_match_simple and
	g_pattern_spec_equal.

	* glib/gwin32.c (g_win32_get_package_installation_subdirectory):
	Set separator correctly.

	* glib/libcharset/config.charset (os): Match also mingw*.

	* tests/testglib.c (main): (Win32): Print the lib/locale
	subdirectory, as that is what actually gets used.

Wed Oct 24 11:10:54 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Version 1.3.10, interface age, binary age = 0.

	* NEWS: Updates

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

	* configure.in: Don't default to win32 thread implementation on
	Cygwin. The gthread-win32 implementation really is for Win32 with
	MS runtime only. Let configure find pthreads when configuring for
	Cygwin.

	* README.win32: Updates.

	* glib/glib.def: Update.

	* tests/makefile.mingw.in
	* tests/makefile.msc.in: Remove mainloop-test here, too.  Add ../*
	to PATH before running tests to find DLLs. Separate the
	interactive tests, don't run them in the check target.

	* */makefile.msc.in: Include make.msc from GLib's build directory.

Thu Oct 25 12:01:41 2001  Owen Taylor  <otaylor@redhat.com>

	* tests/Makefile.am: Temporarily remove mainloop-test, since it
	prevents distcheck.

2001-10-24  Alex Larsson  <alexl@redhat.com>

	* docs/reference/glib/glib-sections.txt:
	Add g_strtod & co.

	* docs/reference/glib/tmpl/string_utils.sgml:
	Add docs for G_ASCII_DTOSTR_BUF_SIZE.

	* glib/gstrfuncs.[ch]:
	Added g_ascii_strtod, g_ascii_dtostr and g_ascii_formatd.

	* tests/Makefile.am:
	* tests/strtod-test.c:
	Add tests for g_ascii_strtod & co.

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

	* config.h.win32.in: Typo: GLIB_MICRO_VERSION and
	GLIB_MINOR_VERSION were swapped.

	* glib/gutils.h: Remove G_HARDCODED_PATH_WRAPPER, Owen didn't like
 	it.
	
	* glib/gutils.c: Instead, expand it on Win32 as
 	_glib_get_locale_dir(), and #define GLIB_LOCALE_DIR as a call to
 	it.

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

	* config.h.win32.in: Typo.

	* glibconfig.h.win32.in: Minor update to correspond to what
	configure now generates.

	* glib/Makefile.am: (Win32): If we have built the MSVC import
	library, install it. Install the gcc import library. Also support
	uninstall.

	* glib/gutils.h: Add macros G_WIN32_DLLMAIN_FOR_DLL_NAME and
	G_HARDCODED_PATH_WRAPPER. These are used to avoid hardcoding path
	names into Windows DLLs.

	* glib/gutils.c: Use them for GLIB_LOCALE_DIR.

	* glib/gwin32.c (get_package_directory_from_module): Plug a small
	memory leak. Minor code reordering.
	(g_win32_get_package_installation_subdirectory):  Allow empty subdir.

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

	* configure.in: Fix test for lib.exe. Can't set ms_librarian
	before calling AC_CHECK_PROG, as it doesn't actually check
	anything if the result variable has been preset...

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

	* glib/gutils.c (g_set_prgname, g_get_prgname): Use another LOCK
	for g_prgname to avoid deadlocking. (#62606)

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

	* configure.in: Check also ac_cv_sizeof___int64 when requiring a
	64-bit type.

2001-10-17  HideToshi Tajima  <hidetoshi.tajima@sun.com>

	* glib/gconvert.c (g_iconv_open):
	Fix a typo: to_codeset => from_codeset.
	(#58195, #55152)

Fri Oct 12 18:24:02 2001  Tim Janik  <timj@gtk.org>

	* glib/gpattern.[hc]: make struct _GPatternSpec and GMatchType
	private.
	(g_pattern_equal): new function to return equality of two patterns
	(required because GPatternSpec is private now).
	(g_pattern_spec_new): fix bug wrg wildcard counting which produced
	incorrect pattern specs (discovered by Matthias Clasen).
	optimized code so we just keep one compiled pattern string now.
	correctly canonicalize patterns. reduce string walks, optimize
	decision about MATCH_ALL vs. MATCH_ALL_TAIL.
	(g_pattern_match_string): call just g_pattern_match() with NULL
	reversed string.
	(g_pattern_match): allow NULL reversed strings now, reverse_dup
	strings on demand.

	* tests/patterntest.c (test_compilation): added an extended testcase
	for pattern matching from Matthias Clasen <matthiasc@poet.de>.

2001-10-11  Raja R Harinath  <harinath@cs.umn.edu>

	* configure.in (ac_cv_sizeof_long_long): Avoid '==' and '-a' in
	'test's.

Wed Oct 10 20:07:36 2001  Joshua N Pritikin  <vishnu@pobox.com>

	* glib/gmessages.c glib/gtypes.h: Remove G_HAVE_GINT64
	conditionalization.

Wed Oct 10 17:34:15 2001  Joshua N Pritikin  <vishnu@pobox.com>

	* configure.in: Un-conditionalize and require a 64-bit integer
	type.

2001-10-04  Raja R Harinath  <harinath@cs.umn.edu>

	* configure.in: Avoid 'test -a'.

2001-10-05  Matthias Clasen  <matthiasc@poet.de>

	* glib/gwin32.c: Documentation update.

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

	* glib/libcharset/Makefile.am (EXTRA_DIST): add config.charset

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

	* glib/gutils.c (Win32) (DllMain): New function (DLL entry point)
	to tuck away actual DLL name.
	(GLIB_LOCALE_DIR) Use actual DLL name, instead of assuming one
	naming convention for DLLs.

	* glib/glib.def: g_string_append_printf.

2001-10-02  Matthias Clasen  <matthiasc@poet.de>

	* glib/gstrfuncs.c, glib/giochannel.c: documentation update.

	* glib/gqueue.c: add documentation.

2001-10-02  Sven Neumann  <sven@gimp.org>

	* glib/gstring.h (g_string_sprintfa): let the compatibility definition
	point to the new name g_string_append_printf().

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

	* glib/gconvert.[ch]:
	Convert G_CONVERT_ERROR_NOT_ABSOLUTE_FILE_URI and
	G_CONVERT_ERROR_INVALID_URI to G_CONVERT_ERROR_BAD_URI.

	* tests/uri-test.c:
	Update tests

Mon Oct  1 16:01:24 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstring.[ch] glib/grel.c: Rename g_string_printfa()
	to g_string_append_printf(). (#61041, Havoc Pennington.)

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

	* glib/gwin32.c: Documentation cleanups. (#61487)

2001-10-01  Matthias Clasen  <matthiasc@poet.de>

	* glib/gscanner.h (GScannerMsgFunc): make third argument
	a gboolean.
	(g_scanner_add_symbol, g_scanner_remove_symbol, 
	g_scanner_foreach_symbol): mark these 
	G_DISABLE_DEPRECATED. (#61469)

	* glib/gscanner.c (g_scanner_msg_handler): make third 
	argument gboolean. (#61468)

2001-10-01  Sven Neumann  <sven@gimp.org>

	* glib/gconvert.c
	* glib/gspawn-win32.c
	* glib/gspawn.c: some minor documentation fixes.

2001-09-29  Alexander Larsson  <alla@lysator.liu.se>

	* configure.in:
	Add build/win32/dirent/Makefile to the list of makefiles

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

	* glib/gwin32.c
	* glib/gwin32.h
	* glib/glib.def: Remove own implementation of dirent
	functions. Instead, gcc (mingw) users should go ahead and use the
	<dirent.h> included with the mingw gcc, and the dirent functions
	included in libmingw32, while MSVC users can use the same (public
	domain) code, extracted from mingw-runtime sources and placed in
	build/win32/dirent.[ch].

	* glib/gwin32.c (get_package_directory_from_module,
	g_win32_get_package_installation_directory): Use static lock to
	protect static hash table.

Sat Sep 29 02:33:14 2001  George Lebl <jirka@5z.com>

	* tests/testglib.c (main): cast the string size to gulong and use %lu
	  for printing to avoid 64bit issues

	* glib/gstrfuncs.[ch] (g_ascii_strncasecmp): Change the 'n' argument 
	  to gsize instead guint.

Fri Sep 28 19:41:32 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/libcharset/* configure.in: Fix macros from libcharset
	to work with autoconf-2.5x. (From Laszlo Peter.)

2001-09-27  Matthias Clasen  <matthiasc@poet.de>

	* glib/gstring.c: Fix inline docs for g_string_prepend_unichar.

2001-09-29  Abel Cheung  <maddog@linux.org.hk>

	* configure.in: Add quotes around test values. This fixes a minor
	  annoying warning if platform is not win32.

2001-09-27  Manish Singh  <yosh@gimp.org>

	* glib/grand.c (g_rand_new): fix typo (#if->#ifdef) so it compiles
	again.

2001-09-24  Bruno Haible  <haible@clisp.cons.org>

	* glib/gwin32.c (g_win32_getlocale): When the sublangid is
	SUBLANG_DEFAULT, return the locale of the language's main country,
	not a country-neutral locale. E.g. "en_US" instead of "en". Add
	handling of LANG_SORBIAN. Fix typo for SUBLANG_CHINESE_SIMPLIFIED
	(China == CN, CH == Switzerland). Ignore empty environment
	variable values.

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

	* glib/makefile.{mingw,msc}.in: Add localcharset.o. Just copy the
	source file from libcharset and compile in this directory.

	* glib/giochannel.c: Mark rest of g_set_error strings for
	translation, too.

	* glib/giowin32.c: Add some debugging output functions, call them
	when debugging.
	(create_events, g_io_win32_msg_write): Free message fetched with
	g_win32_error_message ().
	(g_io_win32_check): Indentation fixes.
	(g_io_win32_fd_read,g_io_win32_sock_read): Don't always return
	G_IO_STATUS_NORMAL. Do return G_IO_STATUS_EOF if we got 0 bytes,
	like on Unix. This helps making the test programs run
	successfully.

	* glib/gmain.c (g_poll): Return the code ifdeffed out with
	TEST_WITHOUT_THIS. Can't remember why it was ifdeffed out. Things
	seem to work as previously with the code in place. Especially
	spawn-test didn't work with the code ifdeffed out (Bug#61067).

	* glib/grand.c (g_rand_new): Don't try to use /dev/urandom unless
	on Unix.

	* glib/gspawn-win32-helper.c (WinMain): Remove Sleep(10000)
	accidentally left in.

Thu Sep 27 14:26:57 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_ascii_strup/down): Use gssize to
	match the header. (Reported by Elliot Lee.)

Wed Sep 26 22:34:12 2001  Owen Taylor  <otaylor@redhat.com>

	Fixes for #58195, based on some ideas from Hidetosh Tajima.

	* aclibcharset.m4 glib/libcharset: Add Bruno Haible's
	portable-current charset detection code from libiconv.

	* glib/gutf8.c (g_utf8_get_charset_internal): Rewrite
	to use _g_locale_charset().

	* glib/gutf8.c (_g_charset_get_aliases): Private functions
	to get aliases from libcharset for a particular canonical
	name.

	* glib/gconvert.c: If loading a charset fails, try 
	aliases to look for fallbacks.
	
2001-09-26  Matthias Clasen  <matthiasc@poet.de>

	* gmem.c (g_mem_is_system_malloc): Return !vtable_set.

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

	* configure.in: Retract my change earlier today. Don't preset
	autoconf variables in a try to match both mingw and MSVC. Instead,
	he who packages a prebuilt GLib developer distribution for Win32
	runs configure twice: once for mingw, once for MSVC, and then uses
	diff -D on the glibconfig.h files to generate a suitably ifdeffed
	glibconfig.h for distribution that suits both compilers. (Ditto
	for config.h, although that file wouldn't be distributed in a
	developer package, but in a source package for Win32 users who
	want to build GLib but can't use configure.)

	* glibconfig.h.win32.in
	* config.h.win32.in: Generated by using diff -D as described above.

	* tests/makefile.mingw.in (.c.exe): Correct name of gthread (import)
	library.

Wed Sep 26 15:33:37 2001  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am po/Makefile.in.in: Fix distclean to 
	remove some extra files. #60993, Ben Gertzfield

Wed Sep 26 14:37:52 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gen-unicode-tables.pl glib/guniprop.c 
	  glib/{gunibreak,gunichartables,gunidecomp}.h:
	Patch from Andrew Taylor to make much of the unicode
	table data const so that it can be made read-only
	and shared.

Wed Sep 26 12:41:05 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_strdup_vprintf): Copy if 
	!g_mem_is_system_malloc, not the other way around.
	(Found by James Antill.)

Wed Sep 26 11:00:31 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gstrfuncs.c (g_strnfill): Use memset; might be 
	faster if someone used this for a biiig string.
	(Suggestion from Jakub Jelinek)

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

	* configure.in: (Win32:) Move the Win32 check closer to the start,
	after the BeOS checks. Preset some autoconf variables so that
	configure won't find those few headers and functions that gcc
	(mingw) pretends to implement (even if the actual C library
	doesn't), but MSVC doesn't. This because I want the same config.h
	and glibconfig.h to be usable both from gcc and MSVC (as they use
	the same C library). Some other minor hackery for this purpose.

	* glibconfig.h.win32.in
	* config.h.win32.in: Use versions generated by configure (and
	hand-edited slightly).

2001-09-25  Darin Adler  <darin@bentspoon.com>

	* glib/gtree.h: Use gboolean for return value of GTraverseFunc.

Tue Sep 25 11:34:22 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Version 1.3.9 (binary, interface == 0)

	* glib/gstrfuncs.c (g_ascii_strdown): Change g_ascii_strup/strdown
	to take a 'len' argument to match g_utf8_strup/strdown. This
	hopefully will also make it more obvious that they duplicate
	the string rather than acting like g_strup/strdown.
	(Suggestion from Matthias Clasen, #59550)

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

	* configure.in: More Win32 automake macros. For .def files:
	GLIB_DEF, GMODULE_DEF, GOBJECT_DEF and GTHREAD_DEF. For .exp
	files: TESTGMODULE_EXP (for programs that need to export symbols,
	just testgmodule here). A new conditional, MS_LIB_AVAILABLE to
	test whether the Microsoft librarian ("ar") is available to build
	MS import libraries.
 
	* glib/Makefile.am
	* gmodule/Makefile.am: Use above. New rule to build MS import
	library.

	* glib/makefile.msc.in
	* tests/makefile.msc.in
	* tests/makefile.mingw.in: Use same DLL and import library names as
	libtool.

2001-09-24  Matthias Clasen  <matthiasc@poet.de>

	* glib/gutf8.c, glib/gunibreak.c, glib/gunicollate.c,
	glib/gunidecomp.c, glib/guniprop.c: Inline doc consistency fixes.

2001-09-24  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>

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

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

	* glib/giowin32.c : simply setting is_readable and is_writeable
	to TRUE does make Gimp plug-ins work again. Still no API known
	to request this info on Win32 (see #57690)

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

	* makefile.msc : added rule for glibconfig.h

	* glib/giowin32.c (g_io_channel_new_file) : always open
	in binary mode (fix for #57695)

	* glib/glib.def : updated externals

	* glib/gwin32.c : re-added LANG_* and SUBLANG_* definitions,
	which are missing from the msvc 5.0 win32 sdk

	* glib/makefile.msc.in : added gbsearcharry

Thu Sep 20 20:33:45 2001  Owen Taylor  <otaylor@redhat.com>

	* Rename g_mem_vtable_is_set() to g_mem_is_system_malloc().

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

	* glib/gutils.c (g_path_is_absolute): (Win32:) Accept also forward
	slashes. (But still don't accept them in the other functions
	here. This is a thorny issue. Windows in fact does treat / like \
	on input (at least as local directory separators, dunno about
	server/share separators). But GLib only has the one
	G_DIR_SEPARATOR value, that apps should scan for, and use when
	building pathnames. To properly fix this would require totally
	abstracting pathnames, and don't having any path name scanning and
	building in applications at all. Fat chance.)
	(GLIB_LOCALE_DIR): Redefine only on "pure" Win32, not Cygwin. Use
	subdirectory "share\locale", as on Unix.

	* glib/gwin32.c: Don't need to define those langiage and
	sublanguage constants here, current mingw (w32api) headers have
	them.

	* glib/glib.def: Add a few missing entry points.

	* tests/testglib.c (main): Use same name for DLL as libtool does.
	Use G_DIR_SEPARATOR in g_path_get_basename tests.

Wed Sep 19 16:35:22 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.c (g_main_context_find_source_by[_funcs]_user_data): 
	Fix handling of user data when locating sources. 
	(#60414, Katsuhiro Okuno)

Wed Sep 19 14:17:31 2001  Owen Taylor  <otaylor@redhat.com>

	Patch from Matthias Clasen (#59806)

	* configure.in: Check for vasprintf().

	* glib/gmem.[ch]: Add g_mem_vtable_is_set() to be used
	for efficiency hacks to avoid extra copies when not
	needed.

	* glib/gstrfuncs.c: Use vasprintf() to implement
	g_strdup_printf() when available.

	* glib/gmessages.c (g_logv): Avoid using 
	printf_string_upper_bound() when we have have vsnprintf.

	* glib/gmessages.c (printf_string_upper_bound): Don't
	segfault when warning about positional parameters.

Wzed Sep 19 14:05:27 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/{gcache.c,gmem.c,grel.c,gstring.c,gtimer.c,gtree}:
	Patch from Darin Adler to remove GReal* structures in
	favor of simple opaque typedefs in cases where there
	were no non-private members. (#59693)

Wed Sep 19 13:03:38 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/giochannel.c (g_io_channel_read/write_chars): Handle NUL
	bytes_written, bytes_read. (Suggested by Joshua N Pritikin, #59550)

Wed Sep 19 12:49:11 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gutils.c (g_get_any_init): Handle failure of
	sysconf and pick a fixed size buffer. (Happens on Cygwin
	#60242)

Wed Sep 19 11:23:41 2001  Owen Taylor  <otaylor@redhat.com>

	* configure.in: Error out if gettext support is not found. (#59386)

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

	* glib/gthread.h (GThreadFunctions): Add thread_equal function to
	allow for platform defined function to compare two threads.

	* glib/gthread.c: Use g_thread_functions_for_glib_use.thread_equal
	when non-NULL instead of ==.
	
Wed Sep 19 10:44:25 2001  Tim Janik  <timj@gtk.org>

	* Released 1.3.8.

Tue Sep 18 22:57:33 2001  Tim Janik  <timj@gtk.org>

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

	* NEWS: updates.

Tue Sep 18 18:23:02 2001  Owen Taylor  <otaylor@redhat.com>

	Fixes for compilation on Solaris (#59026, Frank Belew)

	* glib/gqsort.c (g_qsort_with_data): Use g_alloca().

	* glib/giochannel.c (g_io_channel_read_to_end): Fix use
	of ternary on left-hand-side.

	* configure.in: Handle the ac_cv_working_alloca_h variable
	set by autoconf-2.5x.

Tue Sep 11 18:50:44 2001  Owen Taylor  <otaylor@redhat.com>

	* m4macros/glib-gettext.m4 acinclude.m4: Remove commented
	out sections for clarity.

Tue Sep 18 18:19:33 2001  Tim Janik  <timj@gtk.org>

	* tests/testglib.c: add simple test for g_path_get_basename().

	* glib/gfileutils.c (g_file_open_tmp): 
	* glib/gstrfuncs.c (g_strerror): scratch erroneous usages
	of "illegal".

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

	* glib/gmain.c
	* glib/giowin32.c: Mark the _funcs tables for export.

	* glib/glib.def: Add here, too.

	* glib/gwin32.c (get_package_directory_from_module): No reason to
	check for the module being in a bin or lib directory only when
	module_name is non-NULL.

	* glib/gwin32.c (g_win32_get_package_installation_directory):
	Check first in HKEY_CURRENT_USER, then in HKEY_LOCAL_MACHINE.

2001-09-17  Darin Adler  <darin@bentspoon.com>

	* tests/strfunc-test.c: (main): Change so that it works
	on platforms where isalpha is a macro only, without the
	corresponding function that the C standard requires.
	Also eliminate the multiple lists of ctype functions.

	* tests/.cvsignore: Ignore the new test.

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

	* configure.in: Add variable for LT_CURRENT minus LT_AGE (the
	suffix used by libtool on Win32 for DLLs). Set variables for the
	compiled resource files on Windows. Handle the native Win32
	threads gmodule.

	* glib/Makefile.am
	* gmodule/Makefile.am
	* gobject/Makefile.am: (Win32) Add hacks to link in the object
	file produced from the resource file. Use the lt-compile-resource
	script from the build module. The non-hack way would be to teach
	libtool, autoconf and automake about .rc files (which are a kind
	of source code, after all, that gets compiled to object
	files). But then there would be problems with those who don't have
	bleeding edge auto* and libtool.

	* glib/glib.def
	* gobject/gobject.def: Updates.

	* glib/glib.rc.in
	* gmodule/gmodule.rc.in
	* gobject/gobject.rc.in
	* gthread/gthread.rc.in: Update InternalName and OriginalFilename to
	match libtool's naming convention for DLLs.

	* glib/gutils.c: Ditto when constructing the DLL name in the
	definition for GLIB_LOCALE_DIR.

	* glib/makefile.mingw.in
	* gmodule/makefile.mingw.in
	* gobject/makefile.mingw.in
	* gthread/makefile.mingw.in: Update import library names.
	
Fri Sep 14 20:34:27 2001  Matthias Clasen  <matthiasc@poet.de>

	* glib/gconvert.c (g_filename_from_uri): Replace `is contains'
	by `contains' in two error messages. (#60395)

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

	* glib/giochannel.h glib/giochannel.c: Added a length argument
	to g_io_channel_[set,get]_line_term(), allowing embeded nulls
	and binary safe line termination strings

	* glib/giochannel.c: Got rid of a compile warning in
	g_io_channel_write_chars()

Mon Sep 10 17:13:36 2001  Tim Janik  <timj@gtk.org>

	* glib/gmessages.h: got rid of g_set_error_handler(),
	g_set_warning_handler(), g_set_message_handler().

Mon Sep 10 11:42:58 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gutf8.c glib/gstring.c glib/gfileutils.c glib/gmain.c: 
	Doc fixes.

Sat Sep  8 17:14:51 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gfileutils.[ch]: Add g_build_path(), 
	g_build_filename(), to create separated paths, 
	suppressing duplicate separators, from varargs
	lists.

	* tests/strfunc-test.c: Add tests for g_build_path(),
	g_build_filename().

Sat Sep  8 14:11:53 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/Makefile.am (libglib_1_3_la_SOURCES): Add
	gbsearcharray.[ch].

	* glib/glib-object.h: Remove include of gbsearcharray. 

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

	* Version 1.3.7

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

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

	* NEWS: Various additions.

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

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

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

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

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

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

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

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

	* NEWS: updates for 1.3.7 release.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* Makefile.am: added po to SUBDIRS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* tests/makefile.msc : added iochannel-test

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

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

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

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

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

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

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

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

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

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

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

	* glib/glib.def : updated exports

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* .cvsignore: Add some generated files.

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

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

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

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

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

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

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

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

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

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

	* glib/gdate.c: Fix for above.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Also fix remaining 64 bit cleanliness issues.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* NEWS: updated

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* autogen.sh: support AUTOGEN_SUBDIR_MODE

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

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

	* configure.in: Look for nanosleep function. 

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

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

	* gasyncqueue.c: Documentation updates.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* autogen.sh (have_libtool): Fix GNU sedism

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

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

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

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

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

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

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

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

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

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

	* configure.in: Fix typo.

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

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

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

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

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

	* grel.c : reflect renaming of g_string_sprintfa to g_string_printfa

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

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

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

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

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

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

	* glib.def: g_thread_create renamed to g_thread_create_full.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* glib.def: Export g_thread_exit as well.

	* Makefile.am: Fix BUILT_EXTRA_DIST exporting.

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

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

	* acinclude.m4: Remove libtool macros.

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

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

	* configure.in (AC_OUTPUT): m4macros/Makefile

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* Released 1.3.5

	* NEWS: Updated

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* Released 1.3.4

	* NEWS: Updated

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

	* gstrfuncs.c: Define _GNU_SOURCE for stpcpy

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

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

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

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

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

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

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

	* HACKING: Update.

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

	* gqsort.c: docs

	* gfileutils.c: docs

	* gwin32.c: docs fixes

	* gconvert.c: docs

	* guniprop.c: docs

	* gutf8.c: docs

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

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

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

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

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

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

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

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

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

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

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

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

	* configure.in: Added sv to ALL_LINGUAS.

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

	* Released GLib-1.3.3.

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

	* NEWS: updates.

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

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

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

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

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

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

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

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

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

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

	* gthreadpool.c: Added documentation.

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

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

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

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

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

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

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

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

	* Makefile.am (INCLUDES): -DG_DISABLE_DEPRECATED

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

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

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

	[ Patch from DindinX  <David.Odin@bigfoot.com>, added docs ]
 
	* gstrfuncs.c, gstrfuncs.h: Add g_stpcpy () for platform that
	don't have stpcpy ().
	* gstrfuncs.c (g_strjoin, g_strjoinv, 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.
