Overview of changes in GLib 2.57.2
==================================

* Require pcre 8.31
* Require meson 0.47.0

* Bugs fixed:
 742456 Add g_steal_pointer() convenience function to mark ownership...
 795569 MinGW CI: fix tests
 796341 gmem.h: Use typeof() in g_steal_pointer() macro
 #1013 Support for per-session overrides
 #1360 glib-mkenums breaks if option specified but no nick
 #1175 Add names and tags to various GSources and GTasks constructed in GLib
 #903 g_main_context_wait() not deprecated in API, but emits a g_critical()...
 #786 Fix memory leaks in libgio tests
 #927 gio/gresource.c:do_lookup check for terminating "/"
 #976 Document difference between g_assert() and g_assert_*()...
 #1447 glib 2.57.1: test_month_names: assertion failed...
 #1407 Update to Unicode Character Database 11
 #1455 glib python tools have full python path in shebang, limits to 128 characters
 #1459 Missing g_return_val_if_fail in g_async_queue_timeout_pop

* Translation updates:
 Friulian
 German
 Romanian
 Spanish


Overview of changes in GLib 2.57.1
==================================

* New api:
 - g_hash_table_steal_extended
 - G_GNUC_NO_INLINE 

* Bug fixes:
 668132 Use libmount and expose mount options on GUnixMountEntry type
 736741 Update private copy of valgrind.h
 748620 g_regex_* utf-8 validity requirements are not stated clearly
 784995 meson: some Windows improvements
 788771 NODELETE missing when built with meson
 788773 meson does not install correct pc files
 789968 Add g_autoptr() support for GTypeClass
 794325 Various fixes to compile on OSX
 795152 gdesktopappinfo: Mark GDesktopAppInfo constructors as nullable.
 795165 Add g_date_time_get_timezone() and g_time_zone_get_identifier()
 795180 Investigate performance impacts of recent compiler features on hot functions
 795302 Add g_hash_table_steal_extended() API
 795376 Add g_ptr_array_steal()
 795544 Add binary/textfile/zero size detection
 795569 MinGW CI: fix tests
 795636 gitlab-ci: generate test coverage reports
 795735 Fix comparison for GVariant property values
 795802 gdbus-codegen doesn't accept --output-directory with --output for --body and --header
 795849 gwin32: Fix detection of MinGW32 vs MinGW-w64
 795876 meson: Fix checks for posix_memalign and stpcpy
 795960 g_format_size_for_display() is deprecated since 2.30
 796085 Meson: Many apps breaks on non-glibc because of missing libintl
 796138 Fix typo in g_file_info_set_attribute docs
 796139 Add g_autoptr() support for GParamSpec
 796164 Fix atomic ops check in meson.build
 796186 Typo: "instead off" in gsignal.c
 796213 Meson: Fail to build on macosx
 796220 meson: do not run atomic test with msvc
 796264 Add android CI
 796325 meson: Add exception for atomic ops test for Android
 796328 gengiotypefuncs.py: Read and parse files in binary mode 

* Translation updates:
 Czech
 Indonesian


Overview of changes in GLib 2.57.0
==================================

* Bug fixes:
 739424	Rewrite kqueue GFileMonitor backend to drop threading
 751826	Use g_get_language_names() for other locale categories
 788773	meson does not install correct pc files
 793400	g_application_id_is_valid() not strict enough
 793578	gdatetime tests depend on Japanese translation of month names
 793645	test_month_names: Updated translations needed for el_GR, hr_HR, ru_RU
 793729	gitlab-ci: Add Windows MinGW support
 793994	GUnixVolumeMonitor doesn’t show user mounts when run as root
 794170	gdbus: hexdecode() and hexencode() do not return/use decoded/encoded s...
 794194	gobject_gdb.py: 'address' is a property of gdb.Value not a function
 794207	leak: g_socket_listener_add_inet_port increases ref-count on socket-li...
 794284	Support whitespace stripping for JSON resources
 794285	glib-compile-resources should not noisily g_printerr() when xmllint is...
 794473	Remove duplicated option in gio.xml
 794506	glib-mkenums: Enters infinite loop if using typedef enum SomeIdentifier
 794528	Fix segfault caused by use-after-free in GPollFileMonitor
 794555	glib meson build fails on MinGW due to misdetected functions
 794557	gtkdoc-scangobj fails on gio in meson builds
 794606	glib-2.56.0 fails to compile when res_nquery is not available
 794635	gmacros: Don't define bogus __has_* macros
 794636	G_HAVE_GNUC_VISIBILITY is defined in meson MinGW builds
 794686	Date (except weekday) displayed in English
 794732	Fix various compiler warnings 

* Translation updates
 Hungarian
 Slowak
 Slovenian
 Spanish


Overview of changes in GLib 2.56.0
==================================

* Bugs fixed:
 672777 Error in gdummyfile.c
 732184 GObject: warn on use of deprecated properties
 733338 Don't segfault in GNetworkMonitor when IPv6 support is unavailable
 742124 g_data_input_stream_read_upto()'s documentation should say that the...
 749206 GDateTime: month names in the genitive case
 768507 simplify qguark functions
 791457 Slow transfer rate when writing to smb/cifs
 793272 fix GCC 8.0's -Wcast-function-type warnings
 793300 g_hash_table_add() return value change in 2.40 not mentioned in docs
 793399 Fix some cases of -Wduplicated-branches
 793555 -Wimplicit-function-declaration when using g_abort()
 793565 GLib does not compile on macOS 10.13 due to .m file naming
 793597 gdbus-tool: Make --dest optional for emit again
 793635 Enable CI for GLib
 793880 gnetworkmonitor: Minor fixes based on code review 
 793578 gdatetime tests depend on Japanese translation of month names 
 794180 test_month_names fails unless installed

* Translation updates:
 Brazilian Portuguese
 British English
 Catalan
 Czech
 Danish
 Dutch
 Finnish
 French
 Friulian
 Galician
 German
 Hungarian
 Indonesian
 Italian
 Kazakh
 Korean
 Lithuanian
 Polish
 Scottish Gaelic
 Serbian
 Serbian Latin
 Spanish
 Swedish
 Turkish


Overview of changes in GLib 2.55.2
==================================

* GFile now has API to get the path without copying

* A network monitor implementation for Windows has been added

* Bugs fixed:
 520116 g_utf8_strlcpy()
 584284 g_data_input_stream_read_until_async behaves confusingly different f...
 605700 request for g_key_file_get_locale()
 658713 ngettext (plural forms) needed for "Message has %d file descriptors ...
 685442 windows GNetworkMonitor implementation
 723003 gsettings list-recursively reports some keys multiple times
 749583 GSequence performance improvements
 757284 Move G_DIR_SEPARATOR* and G_SEARCHPATH_SEPARATOR* into glibconfig.h
 760324 [PATCH] gkeyfile.c: find_file_in_data_dirs fails to return the path ...
 761102 Increase performance for main loop
 767976 GFile: Add g_file_peek_path()
 770335 gdbus-codegen: generated getter for 'ao' property is actually (trans...
 772989 Totem allows invalid urls that might cause segfault that's irrecover...
 790698 convert: test failure on NetBSD
 791015 gdbus-codegen: Split generation of header and source
 791622 Disable strict-aliasing in GLib
 792050 GResolver is not thread-safe
 792217 Deprecate GTlsClientConnection:use-ssl3
 792338 meson, autotools: figure out if mem barrier is needed for arm64 host...
 792351 gbookmarkfile: check length before dereferencing groups
 792364 gdbus-threading test method-calls-in-thread: assertion failed (elaps...
 792370 GNetworkMonitor: Rename "network-changed" signal argument
 792410 GDateTime new_from_iso8601 test broken in 2.55 on i386
 792432 flush stdout after logging (debug) messages
 792455 Improve docs of GSequence
 792499 deadlock on startup with TCP session bus
 792516 gconvert: More consistent handling of embedded NUL bytes
 792777 g_notification_set_urgent() unconditionally sets G_NOTIFICATION_PRIO...
 792780 gbytes should reference toplevel bytes when slicing with g_bytes_new...
 792856 off64_t isn't a part of C standard
 792862 gpollableoutputstream: document side effects of WOULD_BLOCK on D/TLS
 792903 Clarification between g_try_.. functions and their counterparts
 793006 High CPU load for GUnixMountsMonitor consumers
 793026 possible mem leak in g_mutex_impl_new
 793074 g_message() does not get -Wformat warnings when compiling with G_LOG...

* Translation updates:
 Hungarian
 Indonesian
 Polish


Overview of changes in GLib 2.55.1
==================================

* Build:
 - The --enable-rebuilds configure option has been removed
 - The --with-charsetalias-dir configure option has been added

* GList and GSList now have autoptr support

* The gsettings list-schemas command has gained a --print-paths option

* Bugs fixed:
 346816 Refactor LIBDIR in libcharset Makefile
 508976 Does g_slist_sort preserve the order of equal elements?
 562334 2.18.2 break libglade on Solaris
 662802 systemtap multiarch issue
 684282 Add support static link of GIO modules
 692034 Install an invalidation notifier for GClosure in g_source_set_closure()
 694723 Get rid of REBUILD stuff in configure.ac
 697715 floating point precision problem in check test gst/gstvalue
 701156 testgobject assumes that the priv data follows the instance data
 720380 Segfault when using GDBusMenuModel on a peer-to-peer connection
 724383 glib: document restrictions on various foreach() functions
 724412 GLib mappedfile.c test uses g_get_user_runtime_dir instead of a tempo...
 724794 Fix "on on" typo in tap-driver.sh comment
 732003 gnode: Eliminate implicit signed-to-unsigned integer conversion
 734479 G_VALUE_HOLDS etc. cause -Wcast-qual warnings for a const GValue *
 737677 gmain: Make GSourceCallback thread-safe
 741167 gdbus-codegen fix for boxed out parameters
 748534 gtest: if a subprocess assertion fails, print its stdout and stderr
 749527 add weak pointer helpers similar to g_set_object
 749652 compilation errors with gcc 4.8
 754634 Update the list of Linux filesystem magic numbers used in get_fs_type
 756011 Fix up annotations for GBookmarkFile
 761102 Increase performance for main loop
 773980 GIR scanner doesn't interpret array type properly
 776147 gio/glocalfilemonitor.c doesn't handle case G_FILE_MONITOR_EVENT_MOVE...
 776195 -z nodelete configure check does not work on Solaris
 777075 Potential leak of memory pointed to by 'list'
 779413 Translated X-Geoclue-Reason string not used in a dialog window
 780309 gio/tests/appinfo build fails: gdesktopappinfo.c skipped on OS X
 780893 Reword licensing header for gdbus-codegen
 782057 Unit tests fail in run-assert-msg-test.sh
 784995 meson: some Windows improvements
 786796 gtk-doc build fails with meson
 788806 Impossible to build static glib via meson
 788936 Show mime type icons on OS X
 790416 g_date_time_format returns empty string on %r with German locale
 790588 Generated file missing from .gitignore
 790697 g_object_ref API should propagate parameter type
 790785 glib-tap: Add missing mkdir for .test generation rule
 790829 glib-genmarshal --body must not generate alias implementations
 790830 Mismatch between number of interface methods in text and example code
 790837 Meson: missing many configure options
 790839 GApplication command line: lacks parameter_string, summary and descri...
 790877 fix non-portable check in G_GNUC_CHECK_VERSION
 790894 Do not connect to the session bus when trying GProxyResolverPortal io...
 790896 docs/reference/README has broken link to http://www.gtk.org/rdp/
 790914 gdesktopappinfo: Downgrade a warning to a debug message
 790934 gtester doesn't handle skipped tests
 790948 GSourceFuncs documentation is confusing: when will dispatch be called?
 791036 Guard for g_output_stream_vprintf makes no sense
 791128 C runtime complains about bad arguments on each g_log() call
 791221 po/README.translators has no useful information in 2017
 791235 Fix gschema.dtd regarding flags.
 791267 Make gschema.dtd usable.
 791296 gtester-report: fix range usage when running as python3 app
 791318 GBytes: Improve documentation
 791325 Gio handling of thumbnail:: attribute namespace causes inconsistent b...
 791334 gbinding.c:898: The target object of type GNetworkAddress has no prop...
 791337 Crash opening URIs with g_desktop_app_info_launch_uris_with_spawn()
 791342 Add autoptr support for lists
 791460 meson: fixes for OSX
 791532 Implicit declaration of function ‘memcmp’ in gtestutils.h
 791622 Disable strict-aliasing in GLib
 791720 Criticals in gio/xdp-dbus.h leading to crash under flatpak
 791744 gmenumodel test sometimes fails: assertion failed (items_changed_coun...
 791745 not immediately clear whether g_test_slow() is in effect by default
 791906 GSocketListenerClass.event has wrong signature
 792064 gsettings list-schemas --print-paths
 792098 Binding: bind_property’s @notify func is nullable
 792099 gdbus-test-codegen: Cast to void* to printf "%p"
 792129 meson: skip optional linux/unix deps that default to true when buildi...
 792322 GLib-GIO:ERROR:gschema-compile.c:51:test_schema: child process (/gsch...
 792324 gkeyfile: Document need for KEEP_TRANSLATIONS with get_locale_string()

* Translation updates
 Hebrew
 Indonesian


Overview of changes in GLib 2.55.0
==================================

* New API:
  - g_clear_handle_id, to simplify removing sources from the default mainloop
  - g_file_load_bytes, to make it more convenient to load files into GBytes

* Bugs fixed:
 330458 Sample code for the GLib Key-value parser
 483341 g_error and friends create warnings when not used in MSVC
 569375 g[u]intptr undocumented
 573251 documentation for g_seekable_truncate() needs some love
 629347 Missing annotations in GFile (was: Perf throws an exception in cur...
 630983 [PATCH] Type accuracy for result of strlen() in string utilities.
 632953 Clarify documentation of GValueTransform.
 636210 Document that pre-unmount is not guaranteed and backend-dependant
 656502 type information for GSettings::backend missing from .gir
 661442 Nautilus crashes when refreshing home folder after modifying ~/.co...
 668035 gtester-report broken with python 2.7.2 and glib 2.30.1
 670139 gbytes.c:try_steal_and_unref nit
 677233 (transfer full) annotation not correct for g_closure_new_simple re...
 679347 glocalfile seems to leak 'fstype'
 679467 Mention translation in g_warning() documentation
 689323 Variable scoping in gunixmounts.c
 691436 glib-mkenums output arch dependent
 695681 gsettings bash completion put error messages
 705331 AM_PATH_GLIB_2_0 macro fails with -Wstrict-prototypes -Werror
 706667 Fix permission denied error when installing from an nfs directory
 711809 gdbus-proxy: Fix erroneous timeout during following tests
 722256 gslist: Simplified node removal and got rid of some code duplication
 723655 Socket source is left in the poll after the socket is closed
 723743 g_child_watch_add() doesn't check for non-pids
 725014 g_settings_schema_source_ref should check for NULL pointer
 727346 docs: Escape some backslashes for markdown
 730296 gsignal: Fix a potential NULL pointer dereference
 731625 Improve test for darwin printf format-strings
 731705 gio/tests/desktop-app-info assumes /bin/true
 737278 Clarify relationship of g_application_quit() to hold count
 738176 Skip GSpawnChildSetupFunc closures in introspection
 740223 source_object for GAsyncResult should be nullable
 740791 gio: cannot specify the source when joining a multicast group (IGM...
 740826 glib doesn't know fuse filesystems
 742548 configure.ac: stay out of autoconf's namespace
 742997 Don't skip invalid enum values in schemas
 745723 -Wunused-but-set-variable work-around no longer sufficient
 749371 Use a GHashTable as a set when possible
 751738 Unused-variable warnings in glib/tests/autoptr.c
 752239 Missing dependency for python files in build file
 752240 Add DTLS support to GIO
 753459 GDateTime: Add conversion functions from/to ISO 8601 strings
 753521 g_subprocess_launcher_set_environ misses argument annotations
 754026 gfileutils: add some sanity checks
 756009 'const gchar* const *' gets incorrectly defaulted to utf8
 756103 Skip g_base64_decode_step() in introspection
 756128 Fix up annotations in gconvert
 756430 g_rw_lock_reader_lock() can return without locking, or error
 756470 Fix up annotations in gdataset.c
 756588 Fix up annotations on data/qdata API of GObject
 760022 Memory leak in gvariant-parser.c
 760109 [PATCH] Invalid GDate can't be g_boxed_copy()'d
 760716 Fix documentation regarding <glib/gprintf.h>
 765063 Update annotations for gio
 765552 Please set serial in .m4 files to prevent autoreconf failure on up...
 767215 GCC version number is interpreted as start of a list in docs for g...
 767239 Tautological comparisons in convert tests
 769674 some GIO tests' arbitrary timeouts are too short
 769846 gmessages: Add timestamp to g_log_writer_format_fields()
 770459 Tutorial article is slightly wrong
 773355 Incorrect documentation about stopping a signal emission from a hook
 774083 spelling mistakes in glib: charater
 776562 Add Intel C Compiler support for G_GNUC_BEGIN/END_IGNORE_DEPRECATI...
 777308 GModule win32: disable error dialog popup
 777310 gio/gasynchelper.c: fix cast from pointer to smaller int type on w...
 777956 gmessages: Update advice for G_LOG_DOMAIN
 779182 xdg-open fails with gio open for some uris
 779501 Type of GIConv given wrongly on web
 780202 introspection: Don't expose GValueArray.free
 780296 xdg-open/gnome-open doesn't work if service isn't started
 781598 gstdio.h should #include what it needs to work
 781867 various gvfsd-* wants to look in /boot/efi, causes unnecessary/ina...
 783210 build: Switch to sassc for generating style
 783270 Improve Visual Studio support for Meson builds
 783825 Suggest that asynchronous operations should invoke the callback in...
 786737 No g_variant_get() example for dicts
 786785 Commit #fe2a9887a8 breaks gdbus-codegen, cannot find its module so...
 787271 Make GListModel usable from G-I bindings
 787485 g_tls_backend_supports_dtls () returns true when the backend doesn't
 787551 Factor out some duplicated code in GParamSpec validation
 787581 tests: Add tests for g_slist_copy() and g_slist_copy_deep()
 787671 meson: Fix permissions of installed scripts
 787731 g_file_query_filesystem_info() wrongly reports "filesystem::readon...
 788138 glib-compile-resources: Fix leak of a GHashTable
 788180 G_FILE_ATTRIBUTE_ID_FILE is useless on W32
 788270 gmodule - failed to load symbol on Android 64bit
 788368 Race condition in GDbusObjectManagerClient
 788384 gtypes: Fix signedness of __builtin_bswap() usage
 788385 gtestutils: Explicitly cast args to g_assertion_message_cmpnum()
 788401 PATCH: MacOS build cannot detect content type from content - xdgmi...
 788467 Fatal errors and warnings should be reported as TAP
 788488 GFile-based API for g_build_filename()
 788489 gmain: add g_clear_source API
 788561 Document how to integrate GTest into your project
 788594 gdbus-tool doesn’t handle non-message-bus connections correctly
 788705 Allow building GLib on older Linux platforms
 788766 fixed a doc-typo in socket_get_remote_address
 788772 meson installs gdb scripts incorrectly
 788863 Add more filename type annotations for strings which can contain f...
 788880 gunixmounts: Update list of virtual file systems to ignore
 788927 Expose better API for detecting ‘system’ mounts
 788936 Show mime type icons on OS X
 788948 Document Autotools best practices for genmarshal/mkenums
 788975 Meson + Visual Studio: Can't find zlib.h with subprojects/zlib
 788978 Document XML has a syntax error
 788989 Use subdir-objects with Autotools
 788990 Include licensing information in output from glib-mkenums, glib-ge...
 789087 gint and guint misrepresented as functions
 789170 GFormatSizeFlags should have a value for bits
 789245 g_settings_bind() not conforming to lifecycle specification
 789444 Fix handling of length in g_utf8_make_valid
 789637 glib-mkenums: Fails when --ouput file does not exist
 789681 meson: Libmount support not built
 789723 [PATCH] gdbus-codegen: Call abspath() earlier
 789755 g_get_host_name: ensure return value is always UTF8 encoded
 789820 GPollFileMonitor is not cleaning up correctly
 790015 docs: Various linking and syntax fixes
 790030 GResource/GVariant fails to load from non-pointer aligned memory
 790093 gio-tool: fix inverted logic in monitor tool
 790126 gengiotypefuncs.py is missing from tarballs
 790147 build: Drop data-to-c.pl in favour of data-to-c.py
 790157 gmessages: Give examples of G_DEBUG with gdb in the documentation
 790272 file: add g_file_load_bytes()
 790275 avoid temporary string allocations in g_resources_enumerate_children
 790310 speedup path canonicalization in GResourceFile

* Translation updates:
 Catalan (Valencian)
 Czech
 German
 Nepali
 Norwegian bokmål
 Slovak
 Slovenian
 Spanish


Overview of changes in GLib 2.54.0
==================================

* Bugs fixed:
 780861 Crash in GnomeWallClock
 786983 Please make the output of gio-querymodules deterministic
 787109 Valgrind false positive in ioctl() in btrfs file copy
 787123 glib: Slighty update GIOChannel documentation
 787146 GMainLoop: match of parameter pair of LOCK_CONTEXT/UNLOCK_CONTEXT

* Translation updates:
 Basque
 Catalan
 Romanian
 Swedish


Overview of changes in GLib 2.53.7
==================================

* Bugs fixed:
 736710 remove unnecessary executions of libtool from configure
 785260 gio/tests/appmonitor fails if local dir not writeable
 786456 g_subprocess_wait[_check]_async() breaks when cancelled...
 786555 g_array_free() is not thread safe w.r.t. g_array_unref()
 786580 gdesktopappinfo.c: Add Tilix as a fallback terminal
 786807 g_uuid_string_random undefined when built with meson

* Translation updates:
 Brazilian Portuguese
 Catalan
 Czech
 Danish
 Finnish
 French
 Friulian
 German
 Italian
 Kazakh
 Korean
 Latvian
 Nepali
 Polish
 Spanish
 Turkish


Overview of changes in GLib 2.53.6
==================================

* Bugs fixed:
 766358 glib doesn't respect XDG_* envvars on W32, ever
 783270 Improve Visual Studio support for Meson builds
 785955 pthread_setname_np misdetected with meson
 786060 Sequences documentation does not make it clear...
 786360 gobject: add autoptr support for GClosure
 786452 crash on Linux without stderr stream
 786460 gio-tool: Unify buffer sizes
 786462 Use g_output_stream_write_all instead of while
 786463 gio-tool-save: Prevent overwriting error

* Translation updates:
 Catalan
 Galician
 Hungarian
 Indonesian
 Lithuanian
 Nepali
 Serbian


Overview of changes in GLib 2.53.5
==================================

* Bugs fixed:
 695573 Untranslatable strings in glib-compile-schemas
 725950 GApplication: call dbus_unregister only once, and before destruction
 731703 giomodule test misbuilds its test modules as libraries
 769135 External control for g_test_add/g_test_run
 779332 Rewrite mkenums in Python
 779607 Race between mounts-changed signal and g_unix_mounts_get() function
 784000 Improve strerror_r() detection
 784815 Map G_NOTIFICATION_PRIORITY_HIGH to NOTIFY_URGENCY_NORMAL
 784965 Use the glib preset for i18n in Meson
 784995 meson: some Windows improvements
 785113 glib-mkenums Python port fixes
 785130 G_LOG_DOMAIN shouldn't be left undefined for applications
 785438 Spurious -Wmaybe-uninitialized in gdatetime.c
 785468 glib/gpoll: Unnecessary if conditional included in the poll_rest() function
 785520 Replace advice to use removed gdk_spawn functions
 785577 clobbers errno while setting GError

* Translation updates:
 Slovenian
 Spanish


Overview of changes in GLib 2.53.4
==================================

* Unicode support has been updated to Unicode 10.0.0

* glib-genmarshal and glib-mkenums have been rewritten in python.
  Every effort has been made to keep compatibility. Please report
  problems related to these tools

* GLib can now be built with meson. autotools are still supported

* Bugs fixed:
 722047 drop makefile.msc?
 733821 g_strerror() uses strerror(3) instead of strerror_r(3)
 773842 g_utf8_find_next_char() won't signal the end of a NUL-terminated string
 779332 Rewrite mkenums in Python
 780095 g_utf8_get_char_validated() stopping at nul byte even for length specified...
 780634 Remove remaining old codepage ABI comapt code
 783841 test_GDateTime_new_from_timeval_overflow fails on 32 bit systems
 784000 Improve strerror_r() detection
 784020 GKeyFile – Add array length annotations to to_data(), get_keys() and get_g...
 784037 gio: Mention the ALL_METADATA flag in g_file_copy()
 784433 gdbus-codegen with variant type parameters result in nested variant
 784456 Update to Unicode 10.0.0
 784528 Rewrite glib-genmarshal in Python
 784579 Calling g_dir_open on Missing Directory When Executable File Path Contains...
 784581 docs: Fix cut'n'paste error in g_resources_get_info() doc
 784739 Minor typo in configure error message
 784792 Just fixing a little typo in comments

* Translation updates:
 Hebrew


Overview of changes in GLib 2.53.3
==================================

* Bugs fixed:
 658446 Add translation comment for wrong password notice string
 661926 Improve the default logging setup in GLib
 674885 type initialisation deadlock in GObject
 775593 GIO cannot write symlinks on FreeBSD and NetBSD
 776169 Various gio-tool fixes
 776333 Fix annotation on g_file_copy_async()
 776504 Upgrade license from LGPLv2+ to LGPLv2.1+
 777307 race condition between gdbus signal callback and g_bus_unwatch_name...
 778422 gsubprocesslauncher: Clarify the behavior of set_environ()
 781301 Stack pointer corrupted by incorrect call of NtNotifyChangeMultipleKeys
 782336 Add additional documentation of the GResource XML format
 782996 build: Use AM_TESTS_ENVIRONMENT rather than TESTS_ENVIRONMENT
 783061 GApplication: Remove some unused members
 783130 Make dbus activation sandbox-aware
 783193 Adapt to OpenURI api change
 783201 gdbus-codegen: Apply --output-directory to generated docs as well
 783340 win32: port monotonic times to use QPC
 783350 length parameter can be NULL g_data_input_stream_read_line
 783392 incorrect (out) annotation for g_dbus_interface_info_generate_xml
 783593 GGtkNotificationBackend should use /org/freedesktop/DBus to call Ge...

* Translation updates:
 Esperanto
 German
 Indonesian
 Kazakh
 Spanish


Overview of changes in GLib 2.53.2
==================================

* A few new number parsing functions have been added:
  - g_ascii_string_to_signed
  - g_ascii_string_to_unsigned
  These have better error handling than the existing ones.

* glib-mkenums now supports /*< private >*/ and /*< public >*/

* GSettings now consider XDG_DATA_HOME in addition to XDG_DATA_DIRS.

* Bugs fixed:
 674885 type initialisation deadlock in GObject
 698064 Add g_ptr_array_contains()
 732000 gdatetime: Remove an unnecessary NULL pointer check
 734946 Implement GContentType on OSX
 741335 Possible differences in use of XDG_DATA_DIRS versus XDG base directory specification
 748263 Use-after-free in g_dbus_connection_call_internal()
 776876 gmodule – Various Android bug-fixes
 777030 build error where minor() and major() cant be resolved in gio/gdbusmessage.c
 780300 gio/gosxappinfo.c uses deprecated LSFindApplicationForInfo
 780309 gio/tests/appinfo build fails: gdesktopappinfo.c skipped on OS X
 781755 Avoid compiler warnings in generated marshallers code
 781826 portal support: Read /.flatpak-info
 781830 Fix some typos and errors in GVariant documentation
 781847 Use-after-free under send_message_with_reply_cleanup():gdbusconnection.c:1792
 781867 various gvfsd-* wants to look in /boot/efi, causes unnecessary/inappropriate auto...
 782068 doc: Trivial typo fixes
 782075 gtimer: Handle gmtime() failure in g_time_val_to_iso8601()
 782089 gdatetime: Fix overflow checks when constructing from timestamps
 782162 Support public/private trigraph in glib-mkenums
 782237 make check error
 782311 inode/directory is treated as a subclass of application/octet-stream
 782628 libmount build dependency check not requiring the right version?

* Translation updates:
 Hungarian
 Indonesian
 Spanish


Overview of changes in GLib 2.53.1
==================================

* The gdbus tool gained a wait command

* g_unix_signal_source_new support SIGWINCH now

* There are now g_enum_to_string and g_flags_to_string functions

* A new function to instantiate objects: g_objet_new_with_properties

* GParameter and related APIs have been deprecated

* Bug fixes
 447907 enum/flags from string + type transform + tests
 668962 GUnixMountPoint/GUnixMountEntry not usable through gobject-introspection
 669355 gdbus-codegen output contains stray semicolons at file scope (forbidden in C99)
 674885 type initialisation deadlock in GObject
 698064 Add g_ptr_array_contains()
 709865 Add boxing to GParameter
 725894 build: Include gettext libraries for static compilation on Mac OS X
 734946 Implement GContentType on OSX
 741229 gio: Handle NULL cached properties in NetworkManager monitor
 745971 gdbus-tool: Add a command to wait for a well-known name on the bus
 755046 gfileutils: Add precondition checks to g_file_test()
 761102 Increase performance for main loop
 761889 GDateTime: %p does not always print AM/PM string
 766660 Please clarify the extent to which GInitable, GAsyncInitable must be idempotent
 769534 g_unix_signal_source_new does not support SIGWINCH
 772221 Take advantage of Unicode
 775879 g_log_default_handler should not check G_MESSAGES_DEBUG
 776169 various gio-tool fixes
 777961 Documentation for g_app_info_equals() could be clearer
 778049 race in gsource detected by TSan
 778207 gio-querymodules: fix memory leak
 778287 G_MODULE_EXPORT and -fvisibility=hidden
 779409 Fix false positive g_warning() in remove_filter()
 780066 g_base64_encode_close() in glib/gbase64.c produces invalid base64 encoding
 780095 g_utf8_get_char_validated() stopping at nul byte even for length specified buffers
 780306 Unused function in gunicollate.c for CARBON
 780310 g_tls_database_verify_chain doesn't set the GError for failures other than cancell...
 780384 gio/tests/contenttype fails on OS X: "public.directory" != "public.folder"
 780441 Make the portal implementation of g_app_info_launch() synchronous
 780634 Remove remaining old codepage ABI comapt code
 780908 gobject: remove duplicate GType sanity check
 780924 Memory leak in gdbusmethodinvocation.c
 781125 gio-tool: Fix errors format string
 781234 the buffer written to by g_input_stream_read is not marked as an out parameter
 781298 gfileutils.c:330:3: error: ISO C90 forbids mixed declarations and code

* Translation updates
 Catalan
 Friulian
 German
 Hebrew
 Indonesian
 Polish
 Russian


Overview of changes in GLib 2.52.0
==================================

* Bug fixes:
 779799 gdatetime test fails with tzdata 2017a
 780032 Add missing attributes to two functions
 780144 gio/fam: Remove leftover debug print

* Translation updates:
 French
 Friulian
 Latvian


Overview of changes in GLib 2.51.5
==================================

* OS X implementations of GContentType and GAppInfo
  have been added

* Bugs fixed:
 673047 gunicollate is broken on OS X (patch included!)
 734946 Implement GContentType on OSX
 747146 Implement GNotification on OSX
 769983 glib-mkenums generates non-reproducible Makefile snippets
 777203 gnulib license information is not correct in glib2.0
 778515 Crash in the gio kqueue backend
 779456 Make g_utf8_make_valid optionally take a length

* Translation updates:
 Danish
 Friulian
 German
 Hungarian
 Korean
 Lithuanian


Overview of changes in GLib 2.51.4
==================================

* Memory leak fixes
* Fix the released tarball


Overview of changes in GLib 2.51.3
==================================

* Bugs fixed:
 771997 gchecksum: Add SHA-384 support
 778422 gsubprocesslauncher: Clarify the behavior of set_environ()
 778581 gdbus-codegen: Fix -Wconversion warning
 778801 gdbus-codegen: Add --outdir flag
 778991 Plug a mem leak in gdbusauth
 779183 g_io_extension_point_get_extensions should check for NULL pointer

* Translation updates:
 Basque
 Chinese (Taiwan)
 Danish
 Indonesian
 Italian
 Serbian


Overview of changes in GLib 2.51.2
==================================

* Minimal support for UUIDs has been added

* A new file attribute, G_FILE_ATTRIBUTE_RECENT_MODIFIED has been added
  to improve sorting of recent files

* Bugs fixed:
 639078 UUID support feature request
 777135 gkeyfile: Be more specific about error codes in documentation
 777307 race condition between gdbus signal callback and g_bus_unwatch_name...
 777481 goutputstream: docs: fix typos
 777493 g_mkdtemp() not introspectable
 777507 Recent view sorting incorrectly
 777592 Add minor examples to GDBus and GVariant documentation
 778002 race in gdbusprivate.c detected by the ThreadSanitizer
 778096 race in gdbusconnection reported by TSan

* Translation updates:
 Norwegian bokmål
 Polish
 Simplified Chinese
 Slovak
 Spanish
 Swedish


Overview of changes in GLib 2.51.1
==================================

* glib-compile-resources grew a --generate-phony-targets flag

* GLib now installs a valgrind suppressions file for GLib and GIO

* Bugs fixed:
 666114 should have infrastructure to run its tests under valgrind
 729730 GDBusMessage: Fix segfault if DEBUG_SERIALIZER is enabled
 730932 statically assert that reasonable assumptions about enums are true
 735731 gobject: Document behaviour of GType checking macros on NULL
 736810 gdbus: Fix leak in g_dbus_message_print()
 762283 GSocket – Fix race conditions on Win32 if multiple threads are waiting on cond...
 767609 Test suite problems
 767952 g_dbus_method_invocation_return_*, g_dbus_method_invocation_take_error: They d...
 769672 Assert threads for testcase 642026 are sucessfully created
 769745 gtask: Add guards for public functions
 770175 Add command line argument to mkenums and genmarshal to write output to a file
 770646 glib: Namespace global tapset variables by soname
 772160 Add g_unix_mount_for() support
 772989 Totem allows invalid urls that might cause segfault that's irrecoverable
 773823 gio: Bump copy buffer size to 256k by default
 774086 fix g_main_context_check declaration
 774368 Dependency file output of resource scanner breaks Ninja
 774421 Two minor patches
 774520 GSocket allocates and processes control messages even if not requested
 775309 Crash in gdbusauth
 775468 Improve log write supports color method on windows
 775510 testing with -fsanitize=undefined reports various undefined behaviour
 775517 Password input is echoed in the terminal
 775621 gmessages: Fix compilation on Android
 775765 FDO notification withdrawal backend sends wrong ID to the server
 775913 subprocesslauncher: potential infinite loop in verify_disposition()
 776198 Stray semicolon after g_variant_print() function in gvariant.c
 776586 License headers cleanup
 777077 Use of memory after it is freed

* Translation updates:
 Brazilian Portuguese
 Czech
 Galician
 German
 Hebrew
 Kazakh
 Lithuanian
 Spanish
 Swedish


Overview of changes in GLib 2.51.0
==================================

* glib-genmarshal and glib-mkenums have gained --output options
  for better build system integration

* New API: g_utf8_make_valid

* Bugs fixed:
 591603 Make _g_utf8_make_valid public
 610969 Nice to have g_utf8_make_valid as public
 767882 Bit shift overflow (-Wshift-overflow) warning in gparam.h
 769135 External control for g_test_add/g_test_run
 769630 gfile: G_FILE_MONITOR_WATCH_MOVES was actually introduced in 2.46
 772160 Add g_unix_mount_for() support
 772221 Take advantage of Unicode
 773303 GApplication leaks option_strings 

* Translation updates:
 French
 Galician
 German
 Hungarian
 Lithuanian
 Norwegian bokmål
 Occitan
 Polish
 Slovak
 Turkish


Overview of changes in GLib 2.50.1
==================================

* Update Unicode support to Unicode 9.0.0

* Bugs fixed:
 662946 gunixmounts monitoring doesn't work correctly with libmount
 771591 Update to Unicode 9.0.0
 772054 glib/gspawn-win32-helper.c: unexpected behavior re CommandLineToArgvW()
 772255 gresolver: Mark GResolver as an abstract class
 772269 Add --version options to glib-compile-resources and glib-compile-schemas
 772297 completion: Complete gsettings describe
 772511 g_log_default_handler crashes windows apps with "Unspecified fatal err...

* Translation updates:
 Brazilian Portuguese
 Catalan
 Croatian
 Czech
 Danish
 Hungarian
 Italian
 Latvian
 Polish
 Swedish


Overview of changes in GLib 2.50.0
==================================

* Bugs fixed:
 771438 Turn on libmount by default on linux
        Fix the annotation for g_log_variant

* Translation updates:
 British English
 French


Overview of changes in GLib 2.49.7
==================================

* Add g_log_variant, binding-friendly api for structured logging

Bugs fixed:
 646926 arg_data invalid after g_option_context_parse() fails

* Translation updates:
 Danish
 Finnish
 Galician
 German
 Hebrew
 Kazakh
 Korean
 Latvian
 Lithuanian
 Polish
 Portuguese
 Serbian
 Slovak
 Spanish
 Swedish
 Thai


Overview of changes in GLib 2.49.6
==================================

* The gsettings commandline tool now has a describe command

Bugs fixed:
 745754 Add gcc-style dependency output to glib-compile-resources
 769076 Fix warning: attempt to override closure->va_marshal with new marshal
 770372 gdbus-codegen: Strip @since parameters before comparison

Translation updates:
 Brazilian Portuguese
 Czech
 German
 Hungarian
 Polish
 Portuguese
 Spanish


Overview of changes in GLib 2.49.5
==================================

* Structured logging:
 - drop libsystemd dependency
 - document that g_test_expect_message does not work with structured logs

* Use libmount for unix mount support

* Add an async variant of g_app_info_launch_default_for_uri

Bugs fixed:
 522053 GUnixMountMonitor needs to use /proc/self/mountinfo on recent Linux
 682794 Add usage guidance to logging documentation
 744456 Structured logging API
 766370 Add a macro for initializing g_auto(GVariantBuilder)
 767240 Regex failures with pcre 8.38
 768198 Can't build glib with systemtap enabled
 768453 Gdbus test: compilation fails due to -Werror=format-y2k errors
 768752 Add async variant of g_app_info_launch_default_for_uri
 769027 Docs misleadingly imply G_CHECKSUM_SHA512 is available since 2.16
 769029 gmessage: compiler complains about -Wformat-nonliteral
 769042 'O_CLOEXEC' undeclared (first use in this function)
 769087 gmessages: support NULL log domain
 769089 Fix gsettings uint64 testcase
 769104 Build failure when using _GLIB_CHECKED_ADD_U32 with the Intel compiler
 769139 g_log_writer_journald uses non-standard 'htole64' function
 769238 memory increases every time I umount and mount my secondary hard disk.
 769245 is_valid_heap_iter define misses NULL pointer check
 769507 gmessages: Don’t require is_journald() call before writer_journald()
 769785 gmessages: Expand documentation further for structured logging
 769995 gdbus-codegen: Allow '@since: UNRELEASED' in documentation comments

Translation updates:
 Catalan
 Hebrew
 Lithuanian
 Slovak
 Spanish


Overview of changes in GLib 2.49.4
==================================

* Change the just-introduced structured logging API. The arguments
  of g_log_structured() had to be reordered to enable an implementation
  within the limits of what the standards guarantee about var args.

Bugs fixed:
 744456 Structured logging API
 768936 gio doc build fails because of missing gio.xml in the tarballs
 768963 improper va_list use in g_log_structured()
 768968 gio/tests/socket-listener hangs since e4ee307

Translation updates:
 Spanish


Overview of changes in GLib 2.49.3
==================================

* GLib has a structured logging API, g_log_structured, with support
  for writing to the systemd journal. It also supports colored output
  in terminals

* Some new GBytes API has been added:
 - g_key_file_load_from_bytes
 - g_compute_hmac_for_bytes

* Stack-allocated GVariantBuilder and GVariantDict objects can now be
  initialized with G_VARIANT_BUILDER_INIT and G_VARIANT_DICT_INIT

* gio:
 - Add a way to register handlers for custom uri schemes
 - Add a G_FILE_ATTRIBUTE_FILESYSTEM_REMOTE attribute to
   have these heuristics in a single place
 - Include a gio tool that makes the functionality of the
   various gvfs commandline tools available in a single place
 - Add portal support to g_app_info_launch_default_for_uri
 - Add portal support to GNetworkMonitor
 - Add portal support to GProxyResolver
 - Add portal support to g_application_send_notification

Bugs fixed:
 547200 g_utf8_find_next_char() issues
 662802 systemtap multiarch issue
 723506 fork/exec from non-main thread when autolaunching could be avoided...
 725902 build: simplify dtrace configuration
 728207 gsocketservice: Documentation does not mention that is already act...
 729914 instead of DEBUG_CODE and IF_DEBUG, provide a common macro to supp...
 744456 Structured logging API
 744678 Unable to delete relocatable schemas
 746685 clarify that g_variant_get_data() can be used instead of g_variant...
 747134 glib-compile-resources --generate should detect common C++ file ex...
 750257 GSettings changed signal should clearly state the order required
 753231 Memory is potentially used after free
 754012 missing filename in "Error loading css: Failed to import: Error op...
 760115 gtestutils: add missing dash in seed argument's --help documentation
 760423 gio-querymodules prints error messages as question marks on some l...
 761102 Increase performance for main loop
 765338 GLib.compute_hmac_for_data throws every time
 766370 Add a macro for initializing g_auto(GVariantBuilder)
 766899 Superflous HTML/XML comments in GDBusProxyTypeFunc documentation s...
 766933 GSocketAddress leaks in gnetworkmonitornetlink.c:read_netlink_mess...
 767765 Add names and tags to various GSources and GTasks constructed in GLib
 767880 gkeyfile: add g_key_file_load_from_bytes() API
 767887 vfs: add g_vfs_register_uri_scheme()
 767949 [patch] Typos in glib docs
 768029 infinite loop in parse_name_internal()
 768119 Fix fallout from get_supported_schemes() changes
 768357 Build the gio tool on Windows/MSVC
 768498 portal support for glib
 768504 keyfile: g_key_file_get_double behavior doesn't follow documentation
 768549 Test failure: test_ip_sync_dgram
 768551 Test failure: test_socket_address_to_string
 768560 gio/tests/gsettings: fix GSettings reference leaks in some tests
 768780 O_PATH is a non-standard flag which may be unavailable on non-Lin...
 768806 gdbus tool must swallow -- argument

Translation updates:
 Chinese (Taiwan)
 French
 Hebrew
 Indonesian
 Lithuanian
 Portuguese
 Spanish


Overview of changes in GLib 2.49.2
==================================

 * GMainContext and GTask have gained more systemtap probes

Bugs fixed:
 673101 resource compiler dependency generation not working for gen...
 700756 GFile.new_for_path arguments misses (type filename) annotation
 730187 glocalfileoutputstream: Fix an FD leak in an error path
 755439 Memory leak in gdbusproxy.c
 759813 Add more SystemTap/DTrace probes for main context and GTask
 761810 gio: Support using GDBusObjectManagerServer at path ‘/’
 767172 docs: Move GIO_USE_VFS to "okay for production" section
 767218 Remove a UTF-8 ellipsis from gsignal.h
 767245 Add filename type annotations
 767824 Some UTC timezones incorrectly recognized on Windows 7

Translation updates:
 Occitan


Overview of changes in GLib 2.49.1
==================================

 * GDesktopAppInfo now allows bus activation with dashes. This is
   not technically allowed per the Desktop Entry specification, but
   it happens in the wild. Rather than forcing people to go through
   another traumatic desktop file rename, accept it and translate - to _.

 * The support for giving names to threads has been improved. Thread names
   are now supported on Solaris as well, and the Linux support no longer
   uses prctl() but the pthread api.

 * GIO resources can now be overridden at runtime, using the G_RESOURCE_OVERLAYS
   environment variable.

 * gdbus-codegen can now generate autocleanup definitions for the types
   it generates. Use the --c-generate-autocleanup option to control this

Bugs fixed:
 665446 Use g_abort() instead of abort()
 731988 glocalfile: Avoid a potential NULL pointer dereference
 742898 g_value_type_transformable() description differs from the code
 747107 GVariant varargs documentation: g_variant_get() example
 747478 g_system_thread_set_name() is not implemented for gthread-win32
 748474 g_get_language_names() is not thread-safe
 748530 gthread: W32 implementation of g_get_num_processors() has lame fallback
 748806 GVariant: Better introduction to the concepts and its uses
 749583 GSequence performance improvements
 749606 tests: always remove app.desktop
 755898 [PATCH] settings: add get/set uint64
 758174 Fix documentation typos
 758738 Usage of GType properties causes crashes due to gulong/gpointer mismatch
 760186 namespace clash with gdb pretty-printing code
 762994 Race condition in GIO/AppFileChooser crashes Firefox/Gtk3
 763379 codegen: Add support for g_autoptr to gdbus-codegen–generated objects
 763821 build: Also dist Systemtap files always for gobject/
 764092 gstrfuncs: Document the behaviour of g_strjoinv()
 764163 g_task_had_error doesn't remember the error after g_task_propagate_*
 764415 Very High CPU usage in g_poll() Windows implementation
 764574 build: Fix all statfs() tests failing
 764575 tests: Fix compilation errors due to Y2K format problems
 764685 GApplication documentation about handling command-line options is confusing
 764754 '-' in application id: unbreak bus activation and notifications
 765173 documentation of g_main_context_push_thread_default() regarding GIO...
 765668 GResources: add support for resource overlays
 765710 gdbus-tool: only print note about expected argument types if that...
 765712 tests: Fix compilation
 765861 task: avoid context lock when setting source name
 765900 Add g_drive_is_removable() support
 765924 Improve external drives detection
 765959 socket: set fd field to -1 after closing socket
 765990 Visual Studio: Define inline only when necessary
 765991 Compilation of gresource.c is broken due to S_ISDIR
 766092 Incorrect locale handling in g_date_time_format_locale()
 766211 Fix the upper bound in g_unichar_iswide_bsearch
 766407 Some build-related defects in glib testsuite
 766570 build: Fix a misnamed variable in glib-tap.mk

Translation updates:
 Basque
 Catalan
 Chinese
 Occitan
 Portuguese
 Turkish
 Vietnamese


Overview of changes in GLib 2.48.0
==================================

 * a minor build fix in the name of determinism

 * a few coverity fixes

Bugs fixed:
 763617 giotypefuncs.c: Sort _get_type functions in the 'C' locale

Translations updated:
 Danish
 Italian

Overview of changes in GLib 2.47.92
===================================

 * gdbus-codegen now supports g_autoptr()

 * g_get_user_runtime_dir() now reliably returns an existing directory

 * g_array_remove_range() can now remove 0 items from the end of an array

 * Many fixes for Windows
   * build fixes
   * file monitoring
   * gsettings backend
   * streams
   * random numbers
   * wide character support

 * documentation improvements

 * other small bugfixes

Bugs fixed:
 724847 Segmentation fault on "gsettings list-recursively"
 743933 gapplication: add --app-id command line option
 756706 [PATCH] gio/gtestdbus.c: don't use non-standard %m printf modifier
 757506 gsettings: schema_list should use the passed schema's source
 760694 W32: Apps linked with -mwindows make cursor busy sometimes
 762202 g_win32_error_message improvements
 762637 build: Unconditionally dist tapset files
 762748 Undefined behavior
 762937 Mention that g_clear_error can be used with an "empty" GError
 763339 array: Support clearing an empty array with g_array_remove_range()
 763344 g_get_user_runtime_dir(): ensure directory exists
 763379 codegen: Add support for g_autoptr to gdbus-codegen–generated objects

Translations updated:
 Brazilian Portuguese
 Czech
 Finnish
 French
 Galician s
 German
 Greek
 Hebrew
 Hungarian
 Italian
 Kazakh
 Korean
 Latvian
 Lithuanian
 Occitan
 Polish
 Russian
 Serbian
 Slovak
 Slovenian
 Spanish
 Swedish

Overview of changes in GLib 2.47.6
==================================

* Windows usupport:
 - Fixes and improvements to the GSettings registry backend
 - Handle readability and writability of registry keys
 - Use Unicode registry APIs

* Bugs fixed:
760852 744772 761126 747927 761337 744570 761504 761550 761843
 744570 GString is missing (transfer none) annotations on many of its methods
 744772 systemtap and gdb scripts install in wrong place
 747927 Documentation: various small improvements
 760852 gdbusobjectmanagerserver: Clarify recommended ObjectManager paths
 761126 winiconv: update to upstream version
 761337 Fix some annotations
 761504 W32 registry GSettings backend does not use Unicode
 761550 Cannot build with default flags under Fedora rawhide (-Werror=format-...
 761843 gmacros.h is testing attributes with __has_feature (when compiling wi...

* Translation updates:
 Brazilian Portuguese
 Bulagarian
 Chinese (Taiwan)
 Hungarian
 Polish
 Slovak
 Slovenian
 Spanish
 Swedish


Overview of changes in GLib 2.47.5
==================================

* the system copy of PCRE is now used by default to implement GRegex.
  Configure with --with-pcre=internal if a system PCRE version
  is unavailable or undesired.

* interfaces for DTLS support have been added.  A new version of
  glib-networking will also be required.

* GDBusMethodInvocation now drops replies if the sender set the
  NO_REPLY_EXPECTED flag

* several GApplication fixes, including fixes for commandline arguments
  in interpreted languages on Windows

Bugs fixed:
 624186 Deprecate glib-gettext macros
 734095 gtk-demo.py of PyGObject fails to run on Windows (and likely other binding scripts using g_application_run())
 735754 Implement close on TLS GOutputStream
 748064 gnulib vfprintf returns desired (not actual) number of bytes, ignores errors
 752240 Add DTLS support to GIO
 755421 GDBus ignores NO_REPLY_EXPECTED flag in messages, leading to warnings on system bus
 756875 Include ntdef.h for NTSTATUS
 759554 g_application_run() calls g_main_context_default() repeatidly
 760199 gsettings: Install gettext ITS rules
 760215 G_LIKELY/_UNLIKELY macros need more parentheses
 760683 regex test: Check the expected PCRE exceptions at runtime

Translations updated:
 Brazilian Portuguese
 Czech
 German
 Lithuanian
 Swedish

Overview of changes in GLib 2.47.4
==================================

* The GApplication documentation has been improved in several areas.

* Bugs fixed:
 749092 gdb pretty-printers fail on Python 3 with a TypeError...
 757374 macros: clean up "inline" mess
 758641 Memory leak in g_dbus_proxy_new_for_bus_sync()
 759134 Add missing checks for gnulib vasnprintf()
 759408 Do not use uninitialized var 
 756475 Stop supporting non-POSIX getpwuid_r, getgrgid_r
 757372 GApplication: destroy the impl on shutdown
 728099 macros: add G_GNUC_CHECK_VERSION() for compiler checks
 757299 glib-compile-resources: do not leak c_name
 758553 Fix gettext use
 758823 file monitors: reorder some code to avoid segfault
 756214 gsettings: Don't translate ""
 710243 Add GParamSpec object ref management annotations
 735696 xdgmime: Finer handling for cases where mmap() is not available
 752983 gapplication: Acquire the main context before running

* Translation updates:
 Swedish


Overview of changes in GLib 2.47.3
==================================

The inline cleanup in the last release accidentally removed three
symbols from libglib-2.0.so.  It is unlikely that this will have caused
any problems because these symbols were only backup symbols for
definitions exported as inlines in the header files, but ABI is ABI.

This release corrects only this problem.

Overview of changes in GLib 2.47.2
==================================

* We have formalised the assumption that all compilers that are
  interested in support 'static inline' and simplified the macros around
  this considerably.  Please watch for and report unintentional fallout.

* New API: hardware-assisted helpers for overflow-checked integer math.

* other fixes

Bugs fixed:
 696324 gtester-report doesn't work with Python 3.x
 719966 glib: Add missing (nullable) and (optional) annotations
 752837 gobject and glib-compile-resources rely on .CRT$XCU section, no longer works with Win 10 UCRT (VS 2015)
 755364 make gtkdoc-check happy again
 756134 Segmentation fault on calling g_simple_action_group_add_action with bad action constructor call
 756179 gwin32.c: Replace VerifyVersionInfoW() with RtlGetVersion() due to API deprecation
 756988 GSequence should document each function's complexity
 757294 Move G_POLLFD_FORMAT to glibconfig.h
 757374 macros: clean up "inline" mess
 757451 doc: fix g_task_attach_source() example
 757628 gio tests fail to build when cross compiling 2.46.1
 757693 Invalid free in g_local_file_trash()
 757742 Fix up annotations in ghash.c
 758181 GTask: fix wrong example code

Translations updated:
 Greek
 Hebrew
 Hungarian
 Norwegian bokmål
 Portuguese
 Scottish Gaelic
 Simplified Chinese
 Spanish

Overview of changes in GLib 2.47.1
==================================

* The Unicode support has been updated to version 8.0 of the Unicode standard

* GDesktopAppInfo no longer sets the DISPLAY environment variable when
  launching apps. This is now done in the GAppLaunchContext implementations
  when appropriate

* Bug fixes:
 664740 Key-value file parser, space after integer
 687223 cleverer GThreadPool management
 692085 stderr and stdout are not always file descriptors 1 and 2
 697907 Add interface for socket-like things (GSocket, DTLS, etc)
 735754 Implement close on TLS GOutputStream
 737116 Add functions to print GSocketConnectables and addresses as strings
 743011 Minor additions to GError documentation
 749161 undefined reference to `__imp__stat32i64'
 749314 Cannot restore a just-trashed file
 751924 Add recvmmsg()-like API on GSocket
 752240 Add DTLS support to GIO
 752837 gobject and glib-compile-resources rely on .CRT$XCU section, no longer...
 753310 Remove `#pragma GCC system_header` from gmessages.h
 753935 Update example namespace and class names in GObject tutorial
 754855 Object instantiation documentation refers to example that no longer ex...
 754983 Wayland: g_desktop_app_info_launch_uris_with_spawn() forces DISPLAY va...
 754994 g_date_time_get_second () sometimes returns an off-by-one result
 755083 Clarify in G_ADD_PRIVATE that it is safe to call _get_instance_private...
 755351 Example still contains g_autoptr(gchar)
 755355 Move GStrv to glib.h so it can be used with g_auto()
 755374 g_variant_get_child(): flatten-first logic on '&'
 755496 glib 2.46 fails GStreamer test suite
 755609 glib 2.46.0 breaks Sun Java JVM 1.8.0.60
 755766 gvalue: The g_auto cleanup function assert if value is G_VALUE_INIT
 755795 2.46 considers empty files as octet-stream rather than text (leads to...
 755961 Fix up annotations in gbytes.c
 756053 MSVC doesn't understand the symbol 'msghdr'
 756054 MSVC linker error due to 'g_socket_send_message_with_timeout()'
 756077 testutils: remove internal ABI comment
 756099 g_main_context_query(): Annotate @n_fds as (in) parameter
 756139 musl: ctors called in the wrong order
 756179 gwin32.c: Replace VerifyVersionInfoW() with RtlGetVersion() due to AP...
 756251 The documentation of G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START is confusing
 756255 GOutputStream swallowing errors in splice with G_OUTPUT_STREAM_SPLICE...
 756316 GSequence should provide fast api to check if empty
 756382 snprintf used on Windows with VS2015 doesn't support %n
 756477 gio/gthreadedresolver.c has outdated copy of bionic headers (for android)
 756550 gtypes.h: Make G_MININTn literals negative
 756875 Include ntdef.h for NTSTATUS
 756952 giomodule: return a copy of module name

* Translation updates:
 Basque
 Czech
 Serbian
 Serbian Latin
 Vietnamese


Overview of changes in GLib 2.46.0
==================================

* Disable runtime-deprecation warnings

* Fix marshalling of flags on bigendian 64bit architectures

* Translation updates
 Brazilian Portuguese
 Danish
 German
 Latvian
 Russian
 Turkish


Overview of changes in GLib 2.45.8
==================================

* utf8 validation and utf8-to-ucs4 conversion are faster

* Small speedups to property change notification

* Various other small optimizations for GQuark, GData

* Bugs fixed:
 696426 GParamSpecTypeInfo do not need to be static
 735429 Cleanup MSVC Project Files Generation
 738504 Optimize UTF-8 decoding by unrolling branches and expressions
 742903 Add missing (transfer) annotation to GString
 748633 g_set_object order of operations
 754431 Fix build of glib/gstrfuncs.c on Windows
 754560 gioerror: Add more mappings for WinSock error codes
 754582 Glib cannot compile
 754601 Make g_strerror work with non-glibc POSIX systems
 754636 tests/unicode-encoding test fails for glib 2.45.7 on x86-64
 754788 more g_strerror stuff
 754831 autocleanups: Add GString type
 754924 Improve test coverage of g_utf8_validate() by added known-...
 754986 Avoid unnecessary signal emission during draw

* Translation updates:
 Italian
 Kazakh
 Korean
 Lithuanian
 Slovenian
 Swedish


Overview of changes in GLib 2.45.7
==================================

* Add G_FILE_ATTRIBUTE_STANDARD_IS_VOLATILE for use by non-POSIX-like
  backends (e.g. cloud storage).

* GFileMonitor: Make the inotify backend work with atomic renames again

* GSettings: change notification is again working unconditionally

* GListStore has a sort function now

* Test infrastructure:
 - Tests are now required to have unique names
 - TAP support has been improved
 - A macro for asserting that two memory regions have identical content
   has been added

* Bugs fixed:
 708525 A "g_file_query_info" on the file path "/sys/kernel/debug/hid"...
 742849 inotify: send paired events to both sides
 744060 Update GObject tutorial documentation to use G_DECLARE_FINAL_T...
 747364 Fix GError leak in g_file_query_writable_namespaces()
 749492 Support file creation time on FreeBSD and NetBSD
 752769 (g_socket_receive_message | g_socket_send_message) performance
 753745 glib-genmarshal still needed for cross-compilation
 754152 Add g_list_store_sort
 754211 Memory leak in g_file_enumerator_iterate ()
 754264 GLib 2.44 certificate chain construction fails if the PEM incl...
 754283 gtestutils: add g_assert_cmpmem()
 754284 gtestutils: print the TAP test plan first, not last
 754286 misc gtestutils fixes
 754307 size of array '_GStaticAssertCompileTimeAssertion_3387' is neg...


* Translation updates:
 Chinese (Taiwan)
 French
 Galician
 Greek
 Hebrew
 Hungarian
 Indonesian
 Polish
 Portuguese


Overview of changes in GLib 2.45.6
==================================

* Fix a test failure and a build failure

Overview of changes in GLib 2.45.5
==================================

* GNetworkMonitor now provides information about metered networks

* g_mem_set_vtable has been deprecated; it has not been working for
  quite a while. The recommendation is to use valgrind, or replace
  malloc itself.

* Bugs fixed:
 656325 Make GDBusInterfaceVTable binding friendly
 741779 Documentation tweaks addressing real-world API misuses
 741822 Fails to build with VS 2015
 742386 gdbusconnection: Don't g_printerr() when exiting
 743018 gobject: Add more cross-links between documentation pages
 750282 Add g_network_monitor_get_network_metered() to get if the connection...
 751358 GFileMonitor doesn't react to "mv some-file watched-file"
 751592 Stop using GMemVtable
 751598 Stop 'handle-local-options' propagation when callback reports an err...
 751610 g_str_hash produces collisions with strings of length 2
 751751 Wrong docs of g_async_queue_remove
 752210 gdbus command crashes with SIGSEGV
 752656 gdbusconnection: Fix signal subscription documentation
 752767 Fix typo in g_hash_table_replace() documentation
 753278 gdbus: Don't use g_assert_no_error() GDBusObjectManagerServer
 753285 g_menu_item_set_icon fails if called with NULL icon

* Translation updates:
 Catalan
 Czech
 French
 Indonesian
 Lithuanian
 Norwegian bokmål
 Slovak
 Spanish
 Thai
 Turkish


Overview of changes in GLib 2.45.4
==================================

* Bugs fixed:
 727829 win32: glibconfig.h.win32 updates
 741901 Clang cannot know that g_error don't return
 746339 GSocket kills process when fd is not a socket
 747676 gio/tests/socket fails: test_fd_roundtrip
 748610 Some tests fail with non-English locales
 749911 g_inet_address_to_string broken on XP/2003
 749912 g_inet_address_new_from_string broken on XP/2003
 750625 Should dismiss Software Updates Available notification after...
 750807 G_BREAKPOINT doesn't work as intended on Darwin
 751160 gtask does unnecessary work
 751672 -Wduplicate-decl-specifier in glib/tests/keyfile.c
 751731 GFile/DirectoryMonitor emit move events with other_file=NULL
 751737 gio/tests/appmonitor test fails in 2.45.3
 751798 Wrong enum type used in some test-cases
 752089 make gsocketservice::active a property
 752293 small cleanup: use list_free_full

* Translation updates:
 Greek
 Hebrew
 Portuguese


Overview of changes in GLib 2.45.3
==================================

* Improve performance of g_signal_handler_disconnect for signals
  with many handlers

* GDBus has gained a new call flag to allow interactive authorization

* GSettings:
 - New API: g_settings_schema_list_keys
 - Deprecated: g_settings_list_keys

* OS X:
 - Implement GNotification
 - Bump the OS X requirement to 10.9

* Windows:
 - Add registry reading API
 - Reimplement GAppInfo using registry information

* Bugs fixed:
 666831 Support URI opening on W32
 728489 property action with inverted boolean state
 730168 Incorrect annotation on g_action_group_get_action_state_type return...
 733325 Several regex tests fail with pcre3 8.35
 734888 GLib has no helper functions to work with W32 Registry
 737009 signal handler lookup doesn't scale
 738185 Misleading language about "file name encoding" in the docs on g_env...
 738504 Optimize UTF-8 decoding by unrolling branches and expressions
 739122 glib not handling -1 return ("no limit") from sysconf (_SC_THREAD_S...
 739424 gnome-shell crashes when files are added, deleted, or modified in $...
 739616 DBus; Add new call flag to allow interactive authorization
 740308 Add g_settings_schema_list_keys() method
 740516 RFE: please provide an introspectible version of g_log_set_handler
 741788 Document GSettings build system integration
 745013 GBinding not thread safe
 747146 Implement GNotification on OSX
 747941 try XDG_RUNTIME_DIR/bus before falling back to X11 autolaunch (dbus...
 748727 Filechooser dialog shows no icons for directories on W32
 749693 GActionGroupExporter: flush queue on requests
 750203 GNetworkMonitorNetlink hangs in user namespace
 750322 gapplication: Make sure --help output is translated
 750344 GTlsInteractionClass is missing from doc
 750369 Various GBinding cleanups
 750386 Race condition in g_io_condition_get_type
 750399 Typo "equilalent" in glib documentation's glib-Error-Reporting.html...
 750573 GTlsDatabaseClass is not documented
 750918 genmarshal: silence register storage class warnings
 751122 gsocket: avoid unnecessary g_socket_cond_wait() in _send_messages()
 479730 The "g_key_file_set_comment" interface prepends '#' character to...

* Translation updates:
 Hungarian
 Spanish


Overview of changes in GLib 2.45.2
==================================

* Improve error reporting in glib-compile-schemas.

* Add introspection annotations to GListStore.

* Bugs fixed:
 696749 win32 : failed to compile because of careless mistake in the code
 723394 const parameter to GtkPopover gtk_popover_set_pointing_to
 724113 gdbus-connection-loss test can fail on slow machines
 725981 tap-driver.sh: internal error getting exit status
 733325 Several regex tests fail with pcre3 8.35
 744895 Unknown or unsupported transport 'this-should-not-be-used-and-will...
 747882 gtype: Bump allowed number of children
 748534 gtest: if a subprocess assertion fails, print its stdout and stderr
 748612 de_DE locale used in option-context test is not supported by FreeBSD
 748614 Double unref in g_socket_listener_add_inet_port
 748834 glocalfilemonitor: Emit notification on rate limit change
 749079 gdbus-peer test: TCP tests can fail with ECONNRESET due to a race...
 749080 gdatetime test: fails if close to rollover between seconds
 749180 gnetworkaddress: add return type annotation to parse methods
 749352 g_binding_unbind() fails when source is also the target
 749353 GBinding does not connect to the detailed notify signal

* Translation updates:
 Catalan
 French
 Slovak
 Thai


Overview of changes in GLib 2.45.1
==================================

* The GSettings schema compiler, glib-compile-schemas has been changed
  to reject schema xml that has duplicate <summary> or <description>
  elements. Such elements typically occur when translations are merged
  into the schema, with xml:lang attributes. This is not the correct
  way to translate schemas. Instead keep the translations in the .mo
  file and set the gettext-domain attribute on the <schemalist> element.

* The file monitoring infrastructure has been rewritten, and all backends
  have seen major improvements.

  The inotify backend is reporting events with less delay (no event will
  be delayed more than 10ms) and wakeups due to file monitoring have been
  significantly reduced. A CHANGES_DONE event will also be sent when new
  files appear.

  The poll implementation is now using the thread default main context.

  The fam implmentation is now running in the worker thread.

  The fen implementation has been removed, since it was unmaintained.

* The GSettings schema compiler, glib-compile-schemas, is more strict
  about rejecting schemas with xml:lang style merged translations.
  Schema translations should be done by specifying the gettext domain
  in the xml, and keeping the translations in gettext. To avoid breaking
  already-installed schemas, this change is only taking effect when
  you use the --strict option.

* The hardcoded 10-thread limit of GTask's thread pool has been removed,
  since it was prone to causing deadlocks. The thread pool is now allowed
  to grow dynamically and will shrink back over time.

* GSimpleAsyncResult has been deprecated in favor of GTask.

* The algorithm used by GAppInfo to find default handlers for mime types
  has been tweaked to prefer apps that handle the specific subtype over
  default handlers for a generic supertype.

* Bug fixes:
 627285 inotify file monitor hardwired delay
 631597 Segmentation fault in append_escaped_text
 661767 merge/improve various bits of run-in-thread functionality
 687223 cleverer GThreadPool management
 711547 win32: silence some build warnings
 719966 glib: Add missing (nullable) and (optional) annotations
 726447 Possibly an error in text string
 728663 W32: wrong stat struct is used when built with MinGW-w64
 728669 W32: GLocalFile can't measure size of files larger than 2^32...
 730188 gsocket: Document FD ownership with g_socket_new_from_fd()
 733325 Several regex tests fail with pcre3 8.35
 738207 Add a way to set SO_SENDBUF and SO_RECVBUF on listener (and...
 739850 GClosure: add valgrind hints
 741791 gmain: Save errno when handling unix signals
 744282 gvfs-open for application/x-virt-viewer changed behaviour bet...
 745255 Add support for copying sessions between GTlsClientConnections
 745745 gdbus: fix out-of-bound array access
 745821 Don't use __alloc_size__ attribute with clang
 746749 GLib-GIO:ERROR:inotify-kernel.c:327:ik_source_dispatch: ass...
 746753 Glib-compile-resources --generate-header not using ".h" as ...
 747209 glib-compile-schemas ought to reject repeated <summary> and...
 747349 Conversion of gdbus to use GTask causes deadlocks
 747363 gatomic: Add missing new line in API doc comment
 747472 Don't ignore already-installed schemas with multiple <summa...
 747541 gdbus segfaults with invalid --dest
 747772 Having hardcoded utf8 strings in the source code does not p...
 748019 gsocketconnection: Fix copy-pasto in documentation
 748177 not all test schemas are distributed, "make distcheck" fails

* Translation updates:
 Basque
 Czech
 Danish
 Finnish
 German
 Hebrew
 Icelandic
 Norwegian bokmål
 Russian
 Turkish


Overview of changes in GLib 2.43.92
===================================

GLib is now considered frozen.  We do not expect any major changes
before the release of 2.44.0.

 * GUnixMountMonitor now properly supports multiple main contexts

 * many documentation improvements and cleanups.  We are now
   approaching a point where the documentation is 100% complete and the
   xml will build without warnings.  This will probably be enabled by
   default in the next cycle.

 * new support for HTTP proxies in GIO

 * new GTask:completed property

 * use "private" futexes in order to further improve the performance of
   the contended case of GMutex and g_bit_lock()

Bugs fixed:
 614684 Make various parts of GObject const-correct
 730352 Use inet_pton(), if_nametoindex() and if_indextoname() for newer versions of Windows
 733876 Proxy protocol 'http' is not supported.
 741442 threads: use FUTEX_WAIT_PRIVATE and FUTEX_WAKE_PRIVATE if possible
 742599 Clean up GUnixMountMonitor
 743636 gtask: Add a GTask:completed property
 743661 g_win32_check_windows_version() is missing from doc
 744722 docs: Expand introduction to mention using async calls over sync ones
 745589 [Patch] gio: add some missing autocleanup
 745634 [GNotifications] Use themed icon as icon-name

Translations updated:
 Bosnian
 Bulgarian
 Catalan
 Czech
 French
 German
 Greek
 Hungarian
 Italian
 Kazakh
 Korean
 Latvian
 Lithuanian
 POTFILESin
 Polish
 Russian
 Serbian
 Slovak
 Slovenian
 Spanish
 Swedish
 Vietnamese
 pa  for Gnome

Overview of changes in GLib 2.43.91
===================================

We have now added 'g_autofree' as a libgsystem-style autocleanup macro
that calls g_free() on the content of a local variable when it leaves
scope (working only on GCC and clang).

GApplication now has an "is-busy" property, allowing one to query the
effective busy state.

There have been various other bugfixes and cleanups.

Bugs fixed:
 661554 GIO's use of GError is wrong
 744263 Fix format specifier for __LINE__ in G_OBJECT_WARN_INVALID_PSPEC
 744565 gapplication: add bind_busy_property()
 744747 Add g_autofree
 744756 Can't find out if gapplication is marked as busy
 744830 autocleanups: Add GArray and GPtrArray
 744876 Unclean exit from from g_application_run
 745239 g_property_action_new missing type annotation

Translations updated:
 Chinese (Taiwan)
 French
 Galician
 Lithuanian
 Slovak

Overview of changes in GLib 2.43.90
===================================

* new GSimpleIOStream class to construct a GIOStream from an arbitrary
  GInputStream and GOutputStream

* GApplication: new API for marking 'busy' state according to the value
  of a boolean property on another object

* GOptionGroup: add binding support (boxed type, annotation fixes, etc.)

Bugs fixed:
 739724 Test functions should have async scope
 741024 glist: Mention that g_list_length() is bad for checking list emptiness
 741630 Add GSimpleIOStream class
 743349 goption: Add boxed type for GOptionGroup
 743990 GDBus connection closing is broken
 744565 gapplication: add bind_busy_property()

Translations updated:
 Greek
 Italian
 Norwegian bokmål
 Russian
 Slovenian
 Swedish

Overview of changes in GLib 2.43.4
==================================

* GType now has type declaration macros G_DECLARE_DERIVABLE_TYPE,
  G_DECLARE_FINAL_TYPE and G_DECLARE_INTERFACE, which significantly reduce
  the boilerplate needed for GObject types and interfaces.

* g_autoptr and g_auto are macros for declaring variables with automatic
  cleanup. They only work with gcc and clang.

* GListModel is a new interface that represents a dynamic list of GObjects.

* GListStore is a GSequence-based implementation of GListModel.

* Support thread names on OS X

* g_simple_action_set_state_hint: New function to set the state hint
  of GSimpleActions

* g_win32_check_windows_version: New function to check Windows version

* g_settings_schema_list_children and g_settings_schema_key_get_name
  are new functions to complete the GSettingsSchema API.

* Bugs fixed:
 389585 G_DEFINE_TYPE hack for header files
 729351 Add GListModel
 736914 Docs: various fixes and improvements
 741807 Add thread name support on OS X and iOS
 741895 gwin32: Add Simple API to check whether we are on at least a v...
 742456 object: Add g_steal_pointer() convenience function to mark own...
 743508 polkitd fails to start: patch for gio/gcredentialsprivate.h
 743517 GSettings API is missing some introspection functions
 743521 GSimpleAction: add g_simple_action_set_state_hint
 743596 G_DECLARE_DERIVABLE_TYPE() should allow additional typedef for...
 743640 add __attribute__((cleanup)) support
 743827 Fix build of GListModel (on Visual Studio)
 743927 GListStore: add sorted insert function
 743936 glib: handle unsigned modifier for long long in internal printf
 744012 Add GMutexLocker
 744190 Fix build on Compilers That Do Not Use inline for Plain C Code


Overview of changes in GLib 2.43.3
==================================

* add g_set_object() convenience function

* GNetworkMonitor: check if NM is not running and don't crash

* fix some races with g_mkdir_with_parents

* fix some warnings in MSVC

* avoid use of G_STRLOC in G_OBJECT_WARN_INVALID_PSPEC in order to save
  on static strings

* fix some content type vs. mime issues

* documentation improvements

* Bugs fixed:
 719455  g_file_make_directory_with_parents() can erroneously throw G_IO_ERROR_EXISTS
 732439  GSocket: avoid unnecessary g_socket_wait_condition() for blocking sockets
 734946  Implement GContentType on OSX
 741589  gobject: Add g_set_object() convenience function to set GObject pointers
 741653  gnetworkmonitornm: Check if network-manager is running
 741654  [patch] gobject: don't use G_STRLOC in G_OBJECT_WARN_INVALID_PSPEC() macro
 741707  Gsocket blocks trying to send data
 741788  Document GSettings build system integration
 742548  configure.ac: stay out of autoconf's namespace
 742851  avoid MSVC warnings in G_STMT_END
 742972  ggettext: Include an example of setlocale() and friends in the i18n docs
 743014  gtestutils: Add an example of using test fixtures 

* Translations updated:
 Basque
 Brazilian Portuguese
 Spanish

Overview of changes in GLib 2.43.2
==================================

* New function: g_strv_contains

* New function: g_network_address_new_loopback

* New function: g_socket_send_messages

* A new GNetworkMonitor implementation using NetworkManager provides
  more detailed connectivity information

* Bugs fixed:
  11059 Linux poll issue
 664562 captive wifi portal support for GNetworkMonitor
 685880 Add g_strv_contains()
 712570 Hang in g_threaded_socket_service_func
 719646 GSocket: add g_socket_send_messages() to send multiple messages...
 728928 Provide separate error code for "Connection reset by peer"
 732317 Support GSocketConnectable for loopback addresses
 740814 "make check" should ensure that every symbol is documented
 740848 Backend subscription fails when connecting to a signal with a d...
 741016 gio: add G_IO_ERROR_NOT_CONNECTED
 741226 keyfile: Add "in group" to GError message consistently

* Translation updates:
 Gujarati
 Hebrew
 Hungarian
 Kannada
 Turkish
 Vietnamese


Overview of changes in GLib 2.43.1
==================================

* GQueue now accepts NULL as a sibling in g_queue_insert_before() and
  g_queue_insert_after()

* Bugs fixed:
  11059 Linux poll issue
 726037 Add G_PARAM_READWRITE value to the GParamFlags enumeration
 727988 GMemoryOutputStream hangs when writing more than 1GiB
 729739 tlscertificate: add support for loading certificate chains
 733791 GSettings: delay backend subscription
 736286 Clarify g_file_replace behavior with etags
 736620 GQueue: accept NULL sibling for insert_before() and insert_after()
 737150 GLib-GIO-WARNING **: Failed to parse translated string 'visible-name...
 737160 unhelpful error message
 738259 GDBusInterfaceVTable: clarify memory handling for the method() virt...
 738551 'interface' variable conflicts with Windows defines
 738633 Need to disable SSLv3 in glib-networking
 740157 <app> --help doesn't work even when options were added
 740309 Fix docs in g_strfreev
 740413 Fix the GSettings Registry Backend 

* Translation updates:
 Norwegian bokmål


Overview of changes in GLib 2.43.0
==================================

* GObject gained a debug option to provide instance counts. To use it,
  set GOBJECT_DEBUG=instance-count and call g_type_get_instance_count().

* GOption now has a strict POSIX mode in which it stops parsing arguments
  as soon as a non-option argument is encountered.

* Bugs fixed:
 354457 Feature Proposal: Per-Type Statistics for Instantiable GTypes
 695082 g_hash_table_remove_all is not save against a call to g_hash_table_remove
 723160 GOption: add strict posix mode
 728256 gcredentials: add NetBSD support
 729739 tlscertificate: add support for loading certificate chains
 733338 Don't segfault in GNetworkMonitor when IPv6 support is unavailable
 736273 gdesktopappinfo: Use symbolic names in the code
 736284 Keep only one list of signal emissions
 736806 gtask: Fix reference count loop causing leaks
 736914 Docs: various fixes and improvements
 737143 Include <stdint.h> in glib/valgrind.h
 737259 gcancellable: Clarify that GSources hold references to GCancellables
 737338 gmain: Unref child sources when finalising a GSource
 737446 tests: Fix some minor leaks in the unit tests
 737451 Provide api to read_all_async
 737741 g_datalist_id_get_data assertion fails for non-existant keys
 737869 GApplication command line handling breaks --help
 738170 g_byte_array_new_take() doesn't initialize array->alloc
 738197 g_cond_timed_wait() doesn't time out on Mac OS X
 738374 gfile: g_file_equal (x, x) is TRUE
 738675 GSubprocessLauncher is missing some data on the docs 

* Translation updates:
 Bengali (India)
 Bulgarian
 Gujarati
 Italian
 Telugu


Overview of changes in GLib 2.42.0
===================================

All changes in this release are trivial in nature.

 - introspection warning fixes

 - g_application_add_main_option now uses an enum instead of an 'int'
   for the type of a parameter

 - added a G_OPTION_FLAG_NONE so that people don't need to use 0

 - gresource: Use GError in more places

 - gresource commandline tool: improve extraction from multiple sections

 - GSource now takes the context lock (if any) in g_source_set_name()

 - new documentation to clarify the use of some APIs related to
   GVariant, GSource, GApplication

 - other minor updates to docs

* Bugs fixed
 736683 Thread safety issues with g_main_context_find_source_by_id
 736975 [patch] please document that GVariant serialization needs an
        out-of-band length field

* Translation updates
 Danish
 Hindi
 Marathi
 Punjabi
 Serbian
 Simplified Chinese

Overview of changes in GLib 2.41.5
==================================

* Bug fixes:
 735819 single native credential struct used for two purposes
 735915 glib-building.html uses --enable-gcov instead of --enable-coverage
 736350 GDesktopAppInfo: avoid polling on missing desktop dirs
 736351 Don't use issetugid() on Android
        Fix the default application logic in GDesktopAppInfo
 736458 Only use rand_s() when targetting Visual Studio >= 2005

* Translation updates
 Galician
 Hungarian
 Indonesian
 Kannada
 Latvian
 Polish
 Russian
 Slovenian
 Tamil


Overview of changes in GLib 2.41.4
==================================

* GApplication now has binding-friendly API to handle
  commandline options: g_application_add_main_option

* G_GNUC_BEGIN_IGNORE_DEPRECATIONS works with clang

* Bugs fixed:
 583330 poll list of mounted file systems (no mtab support)
 727455 Command line option parsing from bindings
 734126 add G_GNUC_BEGIN_IGNORE_DEPRECATIONS macro for clang
 735179 gsocketclient: Handle cancellation between CONNECTING...
 735297 Docs claim that GThread struct is deprecated 

* Translation updates:
  Assamese
  Catalan
  Catalan (Valencian)
  Czech
  French
  German
  Greek
  Hebrew
  Korean
  Oriya
  Traditional Chinese


Overview of changes in GLib 2.41.3
==================================

* g_clear_pointer and g_clear_object no longer use atomics

* Bugs fixed:
 711547 win32: silence some build warnings
 725511 Compiled resource files should have the same /-separators everywhere
 725513 Some tests fail to build on W32
 725514 W32: gfileutils does not preserve errno correctly
 725515 test-printf fails on W32
 728730 gsocket: Set SO_NOSIGPIPE on sockets on Darwin
 729703 Leaks a GError in g_file_move
 730932 statically assert that reasonable assumptions about enums are true
 732085 gtype: Fast-path for g_type_is_a
 732754 GDBusMessage: optimise (de)serialisation of fixed arrays
 733345 ginetaddress: Add a precondition to g_inet_address_new_from_string()
 733576 Patches from static analysis run on 2.40
 733715 glib's configure.ac makes accidentally use of nested function
 733934 win32: improve the package installation dir lookup
 733960 W32: spawning a console process creates a new window when stdout...
 733969 Remove atomic aspects of g_clear_pointer/object
 733982 Do not crash when checking whether an instance type is of a given...
 734035 gedit hangs up when there's no GSettings key in the registry 

* Translation updates:
 Basque
 Brazilian Portuguese
 Lithuanian
 Slovenian
 Spanish


Overview of changes in GLib 2.41.2
==================================

* The Unicode support has been updated to version 7.0
  of the Unicode standard

* GNotification now supports priorities for notifications

* GCredentials has gained NetBSD support

* GMutex now uses a faster, native implementation on Linux

* Bugs fixed:
 699132 Pluggable event loop backends
 720708 g_assert_warning(): number of arguments doesn't match for...
 722092 Add GtkApplication resources support
 724986 Change gio/data-to-c.pl to /usr/bin/env perl.
 727974 Fix up failure-to-see-expected-message logging
 728256 gcredentials: add NetBSD support
 728401 GDateTime: Add guards to g_date_time_new()
 729825 Formatting of g_alloca documentation
 729914 instead of DEBUG_CODE and IF_DEBUG, provide a common macro...
 730293 clang++-3.4: error: 'register' storage class specifier is ...
 731339 giochannel: avoid setting uninitialised length
 731424 #ifdef spaghetti for load_user_special_dirs() implementations
 731623 GNotification: add support for a priority setting
 731929 update tables to unicode 7.0.0
 731950 gvalue: New g_value_from_instance
 731986 GLib: implement GMutex natively on Linux
 732184 GObject: warn on use of deprecated properties
 732357 Docs: various fixes and improvements
 732429 GActionEntry: improve documentation
 732465 Fix build on x64 Visual C++ builds
 732704 Docs: various fixes and improvements
 732739 ginetsocketaddress: Explicitly initialise flags for getaddr...
 732754 GDBusMessage: optimise (de)serialisation of fixed arrays
 732984 g_object_ref(NULL) in g_dbus_object_manager_client_finalize
 733084 Typos in g_bytes_hash() and g_time_zone_find_interval() docs
 733146 spawn helper does not use correctly the parameters 

* Translation updates:
 Lithuanian


Overview of changes in GLib 2.41.1
==================================

* Bug fixes:
 697229 Custom Interface implementations will be broken with glib 2.37/38
 698614 GObject: prevent installing properties after init
 729269 gvariant: Fix confusion between type and format strings in the docs
 730198 broken valgrind.h leads to crashes in g_type_free_instance on mingw64
 730807 GMutex performance regression
 730963 gconvert: mention that the g_convert len should be in bytes
 730984 Faster instance type check for fundamentals
 731050 <structname> tags appear in documentation
 731200 unconditional 'notify' during g_object_set() is problematic
 731335 gtype: guard uses of new fundamental type check
 731341 gparam: change value of G_PARAM_EXPLICIT_NOTIFY
 731366 run-assert-msg-test.sh gdb leaves assert-msg-test zombie
 731425 giomodule protects function-call with different token than function...
 731513 clang: build failure: implicit declaration of function '__atomic_load_4'
 731584 gbookmarkfile: Cleaner error handling code to pacify static analysis
 731657 Prevent an invalid @CARBON_LIBS@ from appearing in the .pc files
 731979 docs: Correct param to interface's default_init()
 731996 Return folder as icon for directories
 732002 gwakeup: Clarify buffer sizing in g_wakeup_signal()
 732005 Remove unused assignments
 732019 gtestdbus: Don’t close stdout for dbus-daemon
 732068 gsignal: Add an example to the g_signal_connect_swapped() documentation
 732081 gsocket: Document that g_socket_create_source() holds a socket ref
 732107 gsocketlistener: Reconsider closing sockets on listener finalisation


Overview of changes in GLib 2.41.0
===================================

* Many bugfixes found by static analysis, including potential fd leaks
  and NULL pointer dereferences.

* Increased use of (nullable) attribute on out values and return types
  now that it is supported (mostly from porting Vala metadata).

* use XDG_CURRENT_DESKTOP for OnlyShowIn/NotShowIn handling of desktop
  files, deprecating g_desktop_app_info_set_desktop_env()

* add support for g_desktop_app_info_get_implementations() to find
  desktop files that have an Implements= line for a given interface

* GHmac has gained SHA-512 support

* support the new mimeapps specification (most notably, moving the
  assoications/defaults configuration to ~/.config/mimeapps.list).

* libgobject is now linked -Wl,-z,nodelete when possible to avoid errors
  when gobject is used from a module for a program that does not itself
  use gobject and that module is unloaded/reloaded

* ... and many other bug fixes.

 623552 glib warns if backtrace.py is not present
 667468 glib-2.30.2: ipv6 tests fail when no ipv6 support is available
 668152 -framework Carbon linker flag not passed to pkg-config .pc files
 707298 libgobject should be linked with -Wl,-z,nodelete
 712391 Add g_desktop_app_info_get_implementors()
 722723 Infinite recursion when calling g_io_stream_close_async() from libsoup
 724741 hmac: Fix support for SHA-512 in GHmac
 726040 networkaddress: fix parsing of uri with @ after authority
 726318 gio: Document that GSocket is not thread safe
 726611 socketclient: Leak on cancellation
 726872 gio: Add names to idles and timeouts
 727119 wrong IN6_IS_ADDR_MC_LINKLOCAL usage break android build
 727123 GNotification: Some small documentation fixes
 727320 docs: Remove escaping '\' from literals
 727551 Check use_count of GApplication in g_application_release()
 727559 g_file_copy: Don't set GError when we intend to ignore errors
 727692 gio/gtlscertificate.c -- broken PEM-file processing (affects local CA root stores, for starters)
 727890 soup_content_sniffer_real_sniff segfault
 727900 gio: Add newer dbus UnknownXxxx and PropertyReadOnly errors
 727928 gapplication-tool fixes
 727939 INTLLIBS are always appended in configure checks
 727964 g_io_extension_point_get_extension_by_name: Warn, but don't crash, for NULL inputs
 728040 Implement new mimeapps spec
 728066 Deal with startup notify id being NULL
 728280 platform_get_argv0: fix sysctl(3) use on OpenBSD
 728285 docs: Use markdown links in .h files, too
 728350 gaction: Minor clarifications in the GAction documentation
 728380 docs: Remove <!-- --> comment before plural s
 728565 gfile: More explicitly document the context for GFileProgressCallback
 728983 Docs: various fixes and improvements
 729167 gobject: Document that classes/objects/interfaces are zero-filled
 729563 GOption: A short option's value is included in G_OPTION_REMAINING
 729813 AppInfo: use XDG_CURRENT_DESKTOP for OnlyShowIn
 729875 gio: cleanup gdbusmessage.c file
 730045 Avoid overeager warning about deprecated properties
 730189 gtestutils: Fix a very unlikely FD leak in test fork handling
 730190 gsocket: Add missing preconditions to g_socket_send_message()
 730277 gthread: Fix use of a local variable after it went out of scope
 730278 gsubprocess: Add a missing va_end() call
 730295 gdbus-tool: Remove dead variables
 730493 Port annotations from Vala metadata

Translations updated:
 Basque
 Brazilian Portuguese
 Catalan
 Czech
 Danish
 Greek
 Hebrew
 Hungarian
 Punjabi
 Serbian
 Slovenian
 Spanish
 Ukrainian

Overview of changes from GLib 2.39.91 to GLib 2.39.92
=====================================================

This is a release candidate for 2.40.0.

There are no major changes in this release, but a few serious bugs have
been fixed.

* Bugs fixed:
 710367 Crash in g_settings_backend_dispatch_signal()
 723899 G_DEFINE_TYPE() causes compiler warnings with clang due to foo_get_instance_private
 724859 Let the test_wait_until() test also run on non-*nix
 724916 gio unmount code makes XFCE's Thunar crash
 725651 GSubprocessLauncher: Does not copy the calling process environment.
 725656 Unskip GVariantDict
 725891 gio tests: add codegen to BUILT_SOURCES
 726046 Recent commit created symbolic icons issues

* Translations:
 Chinese
 French
 Korean
 Latvian
 Norwegian bokmål
 Portuguese
 Russian
 Traditional Chinese

Overview of changes from GLib 2.39.90 to GLib 2.39.91
=====================================================

This release introduces a hard dependency on present and functioning
clock_gettime() and CLOCK_MONOTONIC.  It also introduces a dependency on
pthread_condattr_setclock() unless your system happens to have
pthread_cond_timedwait_relative_np() (as do Mac OS and Android).  This
release is known to be broken with at least GNU/Hurd, pending addition
of working pthread_condattr_setclock(CLOCK_MONOTONIC) there.

New API: g_str_to_ascii()

* Fixed bugs:
 670144 unconditional use of CLOCK_MONOTONIC is broken
 673607 invalid assumption in g_cond_wait_until() / g_get_monotonic_time() API
 710142 Add more impressive transliteration to GLib
 722360 make check fails
 722604 (partial) Various tests are failing with 2.39.3
 723316 g_hash_table_iter_remove() should be explicit whether or not it is safe while iterating the table
 724609 Fix build of GIO on Windows
 724687 gmain: make monotonic time really monotonic, everywhere
 724706 gsource: document priority of child sources
 724707 some GSocket source improvements
 724839 GMainContext: some source ID cleanups
 724858 Dist gtranslit-data.h
 724994 Missing icons for bookmarks in file chooser
 725023 Can no longer find apps by executable/desktop file name

* Translations:
 Lithuanian
 Polish
 Thai

Overview of changes from GLib 2.39.4 to GLib 2.39.90
====================================================

* Fixed bugs:
 625408 make GVariant dictionaries more useful
 660809 document that if you fail a precondition check, documented guarantees do not apply
 661576 fix handling of constructors that destroy half-constructed objects
 679957 g_inet_address_new_from_string is not able to handle dots and numbers IPv4 addresses
 712837 gvariant: Document the need to cast varargs when constructing GVariants
 721458 g_simple_async_result_is_valid has a NULL check for the wrong source_tag
 721977 improve split handling of command line arguments
 722033 win32: fixup lib.exe invocation
 723422 Fix g_socket_get_available() with TCP on Windows
 723616 gio/tests: fix race when generating code
 724001 gsubprocess: Fix a broken link in the documentation
 724124 glib/tests/collate.c fails if no en_US locale
 724126 intermittent GApplication test failure: /gapplication/local-actions: lines of output permuted
 724233 gsocketservice: Note g_socket_listener_close() for closing open sockets
 724239 soup_session_queue_message - Connection terminated unexpectedly
 724278 gsocketconnection: Document closing connections with g_io_stream_close()
 724330 configure.ac: tweak inotify check
 724385 gtestutils: make the new assert messages more detailed
 724401 gsubprocess: Mutex leak
 724417 glib master build broken on OpenBSD
 724434 Build failure in gio/gresolver.c

* Updated translations:
 Brazilian Portuguese
 Galician
 Indonesian
 Italian
 Kannada
 Norwegian bokmål
 Spanish
 Thai

Overview of changes from GLib 2.39.3 to GLib 2.39.4
===================================================

* Fixed Bugs:
 139699 Correction for g_main_context_unref()
 583036 g_strchomp and g_strchug are not declared const
 683388 improve documentation for application developers
 685204 ./configure fails to add the '-g' flag to CFLAGS
 688406 GStaticMutex broke ABI on at least ARM EABI during 2.31.x
 693299 cannot compile on Solaris: error in gbitlock.c
 707111 Clarify type transformability and compatibility
 711547 win32: silence some build warnings
 719344 Fix the various test programs (or GLib itself) on Windows
 722025 cleanup/clarify command line argument encoding on Windows
 722323 remove unused include 'gslist.h' in 'gbookmarkfile.c'
 722326 gstringchunk: Use g_slist_free_full() where possible
 722357 gio: fix small memory leak on local xattr
 722436 Adjust doc to Makefile.decl renaming
 722503 GSimpleAction: add default activate handler
 722526 glib/deprecated/gthread.h error on FreeBSD
 722591 [documentation] broken link to GtkAction from GAction.html
 722973 Broken example in GApplication reference
 723048 'network-access' test can fail to guess interface index
 723360 gmain: Note that g_source_destroy() can be called multiple times 

* Updated Translations:
 Assamese
 Tamil
 Traditional Chinese


Overview of changes from GLib 2.39.2 to GLib 2.39.3
===================================================

No major changes this release -- mostly lots of small fixes and
improvements in test coverage.

 * fix a crasher in code from gdbus-codegen

 * improvements to gobject gdb helper script

 * portability:

   - fix a deadlock issue with kqueue on FreeBSD

   - work around a quirk in the sunstudio compiler

   - rename a variable to avoid clashing with a macro definition of
     'environ' on some platforms (like mingw)

   - use POSIX-specified <poll.h> over <sys/poll.h>

   - many improvements to Visual Studio projects and and some build
     fixes for Windows

 * tests
   - a very large number of improvements in test coverage

   - don't report skipped tests as failures

   - return 77 if we skip all tests in an executable

   - improve gtest documentation and fix some minor issues

   - fix g_test_trap_reached_timeout() return value

   - remove some dead code uncovered during test coverage expansion

   - Use tap mode for installed tests too, when using tap

 * fix races in unix signal handling

 * make our GVariant-based commandline tools (glib-compile-schemas,
   gdbus, gapplication) print out GVariant parse errors in context

 * GApplication now has a --gapplication-service command line switch to
   turn any GApplication into a service

 * improve compatibility of GApplication and GOptionContext

 * fix gsettings.m4 wrt. builddir != srcdir with non-recursive make

 * use a directory monitor in GKeyfileSettingsBackend

 * improve robustness of some GIcon classes

Bugs fixed
 141251  poll(2) is in <poll.h>, not <sys/poll.h> per SUS standard
 613732  [PATCH] gobject.py: Don't install frame filters when GDB does not support them
 708212  g_variant_parser_error_get_quark() has unexpected name.
 710965  GApplication: add --gapplication-service switch
 711090  periodic failure of spawn-multithreaded async testcase
 712171  gsettings.m4: @GSETTINGS_RULES@: Support srcdir != builddir with nonrecursive make
 712630  Revert "gsettings m4: check for .xml in src/builddir"
 715028  GVariant: add way to print context of parse errors
 719344  Fix the various test programs (or GLib itself) on Windows
 720263  gtestutils: skipping a test should count as success, not failure
 720539  gdbus-codegen: Fix crasher in goa-using apps
 720635  Make gdb pretty-printers compatible with Python3
 720891  g_settings_get_child does not inherit the backend
 721034  glib 2.38.2 cannot be compiled with SunStudio Compiler under Solaris
 721059  g_subprocess_launcher_set_environ vs "environ"
 721074  kqueue: deadlock
 721087  Missing -lselinux in pkg-config --libs --static gio-2.0
 721324  Error message is printed to stdout
 721624  Regression in GTest framework reorders existing test cases
 721625  backwards NEWS entry about g_source_remove change
 721796  insufficient escaping in g_dbus_annotation_info_generate_xml()
 721947  Improve GApplication ⇔ GOptionContext compatibility 

Translations updated:
 Brazilian Portuguese
 Galician
 Greek
 Hebrew

Overview of changes from GLib 2.39.1 to GLib 2.39.2
===================================================

* Portability

  - Remove alleged support for OS/2

  - Remove alleged support for BeOS

  - Remove alleged support for last-millennium Unixes

  - Require C90 compliance

  - Require POSIX.1 (1990) compliance on Unix

  - Require GNU make

* Bugs fixed:
 113075 support "nonnull" attribute
 159528 g_ptr_array_remove_range()
 307947 The check for growing stack pointer in configure can fail
 607016 docs should mention property notification order
 671557 Fun with integers and g_key_file_load_from_data()
 676761 don't use g_critical for a runtime error
 690525 g_file_replace_contents_async doesn't copy its @conten...
 691608 Support compilation with clang 3.2
 697585 g_variant_builder_add's doc example is leaking
 697828 g_hash_table_add() should return a boolean
 702862 gdbus-codegen : look for deps in default install path
 703522 Reference leak in GvariantBuilder documentation
 705902 g_get_current_dir() should check PWD env var and retur...
 708274 Added GObject Introspection annotations to genums.c
 710519 Portability schmortability
 710741 some mainloop instrumentation
 710983 Test failures on powerpc
 711047 Enable the build of the various test programs on Windo...
 711051 Add basic test for the GNotification gtk backend
 711088 gbacktrace: Don't close stderr when running gdb
 711103 gmessages: Add g_info macro for G_LOG_LEVEL_INFO
 711178 appinfo test problems
 711546 utf8: report allocation error
 711640 gdesktopappinfo: Rank Keywords matches higher than Gen...
 711751 Fix memory leaks in libglib tests
 711753 gthread-posix: Don't use gslice allocated GRecMutex
 711796 glib-tap.mk: fix to actually use the TAP driver
 711800 fix g_test_set_nonfatal_assertions()
 711801 giomodule: Allow overriding source directory gio modul...
 711805 gdbus-connection: Fix race condition in test
 711806 gtestdbus: Don't destroy GSource twice
 711807 gtestdbus: Properly close server connections
 711871 Broken and misleading configure check for growing stack
 712136 'O_CLOEXEC' undeclared (first use in this function)
 712148 Add system bus support to GTestDBus
 712171 gsettings.m4: @GSETTINGS_RULES@: Support srcdir != bui...
 712314 AIX port: splice(); major()/minor(); libtool library order
 712315 GSettings: More docs for deprecated _list_schemas()
 712393 gobject: Box GMappedFile
 712547 GSocketClient "event" not useful for determining resol...
 715164 Clang static analysis fixes
 719395 GPtrArray add g_ptr_array_insert
 719402 Crashes when startup
 719472 leak in generated proxy-side property-setter
 719687 fix or remove g_trap_object_ref
 719809 Signal connection ids are always > 0 if successful
 719837 gdbus-connection: Work around race in connection tests
 719884 Fix documentation typos in GTask and GCancellable examples
 719979 g_settings_get: check validity of format string
 720080 Truncating a GMemoryOutputStream to a larger size cause...
 720210 gdataset: Remove unused define
 720236 Allow clean simple use of g_test_trap_subprocess() 

* Translations updates:
 Italian
 Lithuanian
 Simplified Chinese
 Spanish


Overview of changes from GLib 2.39.0 to GLib 2.39.1
====================================================

 * GSettings fixes/improvements

   - GSettingsSchema API is now more powerful and consistent

   - new GSettingsSchemaKey API allows accessing metadata for keys:
     type, default value, range and the long-awaited support for summary
     and description

   - GSettingsSchemaSource gains support for listing schemas within a
     source.  Deprecate the global API that did this for the default
     source.

   - 'gsettings list-schemas' now works properly with --schemadir

   - deprecate a bunch of now-redundant functionality on GSettings

   - add API to GSettings for getting the default value of a key (as set
     by the sysadmin)

   - add API to GSettings for determining if the user has assigned a
     particular value to a key (ie: we are not just reading the default)

   - ignore qualified tags and attributes appearing in schema files

 * Applications/Actions

   - make GSimpleAction a bit more strict with respect to state changes
     that would violate the interface (ie: by changing the state type
     after construction)

   - throw an error when attempting to 'Describe' a non-existent action
     via D-Bus instead of returning a bogus description

   - throw an error when attempting to invoke unsupported methods on an
     Application (eg: 'Open' on an app that doesn't HANDLES_OPEN)
     instead of emitting a g_critical() in context of the app (which is
     not itself at fault for the errant call)

 * Appinfo

   - substantially rework GDesktopAppInfo to reduce the amount of disk
     accesses that are performed in common situations

   - add a new class: GAppInfoMonitor for discovering when applications
     are installed/removed

   - add a new g_desktop_app_info_search() API for searching for
     installed applications by name, keywords, etc.

 * GMarkup: add new G_MARKUP_IGNORE_QUALIFIED flag for skipping over
   "qualified" tags and attributes (those with a colon in the name, such
   as 'my:tag')

 * GDBus

   - ignore qualified tags, as above

   - GTestDBus: unset all D-Bus addresses (such as STARTER) to ensure
     that test programs don't pick them up

   - add new session_bus_run() convenience in the tests and use it

 * GRand: use real random data as a seed on win32 and use the
   timestamp/pid/uid fallback only on UNIX machines where we can't open
   '/dev/urandom'.  This may cause issues with older mingw32 releases
   due to a missing prototype for the rand_s() API.

 * Many win32 (and particularly MSVC) portability fixes.  Many
   additional tests are now runnable when building with MSVC.

 * Due to early testing of the (soon to land) GCleanup framework, a very
   large number of memory errors have been found and fixed (mostly in
   the testcases, but some in glib itself).

 * GIO:

   - some more seeking cleanups: particularly on GLocalFileInputStream

   - don't leave a .trashinfo file around if trashing a file fails

   - Add a request_certificate virtual method to GTlsInteraction

Translations updated:
 Assamese
 Galician
 Greek
 Spanish
 Tamil

Bugs fixed:
 635641 schema compiler should ignore unknown attributes
 637257 g_tls_client_connection_gnutls_retrieve_function needs to be able to block
 637956 GKeyfileSettingsBackend should ignore file deletions
 645453 keys from base schema missing from extended schema
 665634 g_dbus_node_info_new_for_xml() errors on unknown attributes in XML files
 668232 Unable to get description and summary for a key
 668233 Unable to determine if a key is set to the default / what the default value is
 680838 Need g_settings_schema_source_get_schemas()
 683017 API for accessing GSettings Schema metadata
 687185 org.gtk.Actions.Describe doesn't return an error for non-existing action names
 687202 If trashing fails, the ".trashinfo" file is not removed
 695558 The --schemadir option has no effect
 696424 GSimpleAction.state property is not right
 697348 GTestDBus should unset DBUS_STARTER_ADDRESS, DBUS_STARTER_BUS_TYPE
 710133 Emit backward compatible code with gdbus-codegen
 710691 glib-networking: locking during implicit handshake
 710738 GRand has lame fallback for Windows
 710859 Typo in gio docs
 710885 Two fixes for GApplication
 710962 error: 'F_DUPFD_CLOEXEC' undeclared (first use in this function)
 710964 Add g_hash_table_get_key_array()
 710991 test: g_debug messages shouldn't affect g_assert_expected_messages
 711016 g_settings_list_keys () segfaults for empty schemas
 711048 glocalfileinputstream.c allows skip past end of file
 711049 Fix build of GLib-GIO 2.39.x on Windows/MSVC
 711064 Adding child source to blocked source can cause a segfault
 711070 Copying a symlink over another one segfaults
 711099 gapplication test failure
 711520 GDesktopAppInfo: allow more than one level of legacy folder prefixes
 711556 Add GAppInfoMonitor
 711557 Add g_desktop_app_info_search()
 711600 trivial portability fix
 711632 The desktop-app-info test fails during make check
 711754 gmain: Fix use of uninitialized memory in sigaction structure
 711755 private: Use threading primitives correctly in private test
 711756 gthreadpool: Don't pass bad data to GThreadPool sorter
 711768 Fix memory leaks in libgmodule tests
 711775 utils: Don't free memory owned by glib in test
 711782 boxed: Fix double free in boxed unit tests
 711803 gsubprocess: Fix a number of leaks and a segfault
 711808 gtestdbus: Fix leak of GMainLoop 

Overview of changes from GLib 2.38.0 to GLib 2.39.0
====================================================

 * prep for the 2.40 series (version macros, docs index, etc.)

 * GNotification

   - new API for sending persistent notifications via the desktop shell

   - notifications persist when the application has quit and clicking on
     them can restart the application with an action (via
     DBusActivatable)

 * GSubprocess

   - new API for launching subprocesses

   - nice GIO integration like async functions, cancellability, etc.

   - a convenient communicate() API inspired by the same API in Python

   - related: the gspawn API now has a CLOEXEC flag for the created
     pipes for stdin/stdout/stderr

 * New gapplication(1) commandline tool

   - intended to be used with DBusActivatable apps

   - can be used for launching apps, opening files, invoking application
     actions and listing apps and actions

   - bash tab completion is supported

 * GDesktopAppInfo changes:

   - g_file_get_path() can implicitly cause a FUSE mount so don't call
     it until we know we need it (for an app that doesn't support URIs)

   - don't crash when trying to load from a keyfile with
     DBusActivatable=true

   - remove some dead code, refactor the search path handling a bit and
     do a large-scale whitespace cleanup (prep work for the pending
     desktop file index)

 * File monitors

   - fix broken handling of mount point monitoring

   - remove some strange use of GObject::constructor() from the base
     class and inotify backend

   - fix GFileMonitor to work in the non-default main context even when
     the main context is not running (or is blocked)

   - add internal private API for easily creating a file monitor in the
     GLib worker thread

 * GSettings

   - g_settings_list_children: only list viable schemas.  This fixes a
     longstanding issue where 'gsettings list-recursively' will crash
     when there are invalid schemas installed

   - don't accept invalid paths on g_settings_new_with_path, etc.

 * GIO

   - GFile now has a thumbnail::is-valid attribute to check if the
     thumbnail in thumbnail::path needs to be regenerated

   - GDBusProxy now has a flag to control autostarting of services at
     construction time

   - for GSeekable, properly introduce the concept of "resizable" vs.
     "fixed-sized" streams in the docs, explaining the expected
     semantics of the interface in each case

   - fix some cases in GMemoryOutputStream that were violating the above
     expectations (which may cause a slight API incompatibility)

   - clean up GCredentials code and add support for Hurd and Solaris

   - improve splicing by using different codepaths for the case where we
     have real _read_async() and _write_async() implementations on the
     stream vs. the case where they are internally emulated (via
     dispatching the sync variant of the call in a thread)

 * GKeyFile

   - fix a leak in g_key_file_get_(u)int64 when we fail to parse the
     value as an integer

   - add long-requested API g_key_file_save_to_file()

 * Portability improvements

   - avoid using O_DIRECTORY on platforms that don't have it

   - be careful about systems that define SOCK_CLOEXEC but don't
     actually support it (like Hurd)

   - only use SA_RESTART if it exists

 * Other small API changes/additions

   - a pair of functions to support matching strings for the type of
     search functionality that you'd expect to have with things like
     GtkSearchBar.  This will also be used by the desktop file index.

   - g_str_is_ascii() with obvious purpose

   - g_test_expect_message() no longer appears to allow you to catch
     G_LOG_ERROR messages

 * GMainContext/GSource

   - fix handling of overflowing the 'next source id' counter

   - g_source_remove() will now throw a critical in the case that you
     try to remove a non-existent source.  We expect that there is some
     code in the wild that will fall afoul of this new critical but
     considering that we now reuse source IDs, this code is already
     broken and should probably be fixed.

   - simplify handling of the 'current dispatching source' to not
     require use of a linked list

 * GObject

   - the long-broken (and leaky) pattern of destroying a just-allocated
     object from inside of a custom GObject::constructor is now
     officially completely illegal and will abort the program

 * Unicode: update to 6.3.0

 * Bug fixes

   - g_file_copy() now falls back to pathname queryinfo.  This should
     clear up the bugs with copying from some GVfs backends (afp,
     gphoto, archive, at least).

   - fix an out-of-bounds read in the xdgmime code

   - fix a typo in the /org/freedesktop/DBus path on the object manager
     client

   - skip emitting path_namespace='/' in match rules in order to
     workaround a bug in the D-Bus daemon and fix our own implementation
     (which shared exactly the same bug)

   - fix crashes on precondition violations for GParamSpec constructors

   - many other small fixups (see bug list)

  * Many documentation improvements

Bugs fixed:
 309224 g_key_file_save_to_file missing
 583321 QNX: no SA_RESTART
 661576 fix handling of constructors that destroy half-constructed objects
 672102 GSubprocess class
 684842 Seeks on GMemoryOutputStream don't have opaque semantics
 688492 Add a notification API
 691581 g_output_stream_real_splice_async doesn't use overriden read/write_async functions
 702516 gfileutils: Make -Werror=format-nonliteral happy
 704218 New gapplication(1) tool
 704593 g_setenv: on some systems (BSD, OSX…), setting a variable to NULL crashes the system
 704882 GLocalDirectoryMonitorClass mount_notify field is useless
 704887 file monitoring improvements
 705029 Support for Solaris credentials
 705688 g_settings_list_children: only list viable schemas
 706254 Afp backend cannot copy files
 707887 Attempting to create GObject Property with underscore prefix segfaults
 708042 gapplication: don't rely on cmdline being finalized immediately
 708265 add support for GNU/Hurd in GLib D-Bus Library
 708266 fix error code checks when SOCK_CLOEXEC is defined but not supported
 708529 xdgmime: valgrind warns about invalid reads
 708677 incorrect object path 'deskop' used in gio/gdbusobjectmanagerclient.c
 708714 Typo in docs of GLIB_VERSION_2_40 macro.
 708753 gdesktopappinfo: Call g_file_get_path() on demand
 708793 glib build fails with clang < 3.1: error: expected ';' after top level declarator
 708828 GDBusProxy: add the ability to call methods on non autostarted proxies
 708860 glib-2.38.0 doesn't build on Solaris 10
 708972 gnetworking.h in tarball screws up out-of-source builds
 709113 [PATCH] Main loop dispatch path has needless linked list
 709227 Update to unicode 6.3.0
 709301 goutputstream: Add clear warning about short writes to _write_bytes() and async version
 709326 GDesktopAppInfo crashes creating a DBusActivatable app without a filename
 709440 Fix overloading of "source" and "target" terminology in GBinding
 709615 Cannot use g_test_expect_message with g_error
 709753 Add helpers for string matches when using GtkSearchBar-like widget
 709898 Expose thumbnail validity in GFile attributes
 709966 Remove outdated documentation
 709994 Minor fix for HACKERS doc to direct hackers to proper help file
 709995 Obsolete makefile rules
 710002 G_MAXUINT may be assigned as duplicate source id
 710313 Memory leak in g_key_file_get_(u)int64 with invalid integer values
 710345 [Patches] Fix some redundant-decls
 710496 g_locale_to/from_utf8() doc updated.
 710625 g_file_error_from_errno: Remove unneeded breaks
 710666 Frame clock related bug fixes
 710724 gmain: Warn when g_source_remove() fails
 710726 Work around D-Bus bug with path_namespace='/' match rules

Translations:
 Assamese
 Brazilian Portuguese
 Indonesian
 Russian
 Tamil
 Traditional Chinese

What's new in Glib 2.38
========================

 * Application support

  - GIO now provides an implementation of Desktop Actions from the
    desktop entry specification

  - GApplication now implements the org.freedesktop.Application
    interface as per the desktop entry specification, allowing for
    standards-based D-Bus launching of GLib-based applications

  - GDesktopAppInfo now supports DBusActivatable as per the desktop
    entry specification, allowing GLib-based applications to use D-Bus
    to launch other applications

  - GApplication now has a "busy" flag that can be set on an application
    to allow the shell to show that it is busy

 * GObject

  - the private offset for a given class type is now always constant.
    This was done by reorganising the memory layout of instances so that
    the private data comes before the "official" pointer for the object
    (ie: at a negative offset).  Valgrind macros were added to mitigate
    any problems that this may have caused.

  - a new G_DEFINE_TYPE_WITH_PRIVATE has been added along with a
    generated function *_get_instance_private() that can now serve as an
    equally-performing alternative to ->priv pointers in instances
    (allowing memory savings)

  - new G_PRIVATE_FIELD, G_PRIVATE_FIELD_P and G_PRIVATE_OFFSET macros
    provide a convenient method of converting between named variables in
    private structures and their (now constant) offsets

  - installing properties on a GObjectClass must now be done from
    class_init.  It is no longer valid to install them after class_init
    has returned.

  - it is now possible to manually break a GObject property binding
    without destroying one of the objects involved

 * Icons

  - the requirements for implementing the GIcon interface have changed
    in order to make it possible to consume all implementations of GIcon
    with a finite number of cases

  - a new GBytesIcon type was added for an icon represented by an
    in-memory binary blob in a known image format (ideally png).

  - new APIs g_icon_serialize() and g_icon_deserialize() replace the old
    to/from_string APIs and will always work, irrespective of which
    types have been initialised in the calling process, allowing for a
    serialised GdkPixbuf to be deserialised in a process that doesn't
    have GdkPixbuf

  - support for icons has been added to GMenuModel using the new APIs

 * Actions and menus

  - GPropertyAction provides a convenient way of creating a stateful
    property corresponding to a property on a GObject, such as the
    "visible-child-name" property of a GtkStack

  - new API g_menu_remove_all()

  - we now have established rules about what is a "valid" action name
    and an API to check them

  - a new API for converting detailed action names to and from the
    split-out name and parameter value (as GVariant)

  - for backwards compatibility, invalid action names can still be used
    with most functions, but this is not recommended

 * Other GIO

  - GDBus now supports services that wish to handle some of all
    properties on an interface asynchronously, without requiring the
    service to reimplement the entire org.freedesktop.DBus.Properties
    interface

  - GFile now has a new _measure_disk_usage() (and async) API for
    recursively determining the amount of disk space used by a
    particular directory (akin to 'du').

  - asynchronous version of g_file_trash() and g_file_make_directory()
    have been added

 * Other new API

  - GRegex has a new function to query the maximum lookbehind length to
    allow for regexp matching on streams

  - GVariant has two new APIs for constructing strings that allow
    avoiding copies in some cases: g_variant_new_take_string() and
    g_variant_new_printf()

 * Testing

  - we can now generate TAP output

  - new support functions for simplifying the process of dealing with
    data files for srcdir != builddir and installed test cases

  - g_test_trap_subprocess() provides a portable alternative to
    g_test_trap_fork()

 * Other

  - GLib now builds on Android against the bionic C library

Overview of changes from GLib 2.37.93 to 2.38.0
================================================

* fix the documentation for GSourceFuncs

* fix compilation on OS X/ppc64

Bugs fixed: 708445, 647145

Translations updated:
 Danish
 French
 Portuguese
 Punjabi

Overview of changes from GLib 2.37.92 to 2.37.93
================================================

* a couple of bugfixes in the new g_file_measure_disk_usage() API

* updated Traditional Chinese translation

Overview of changes from GLib 2.37.7 to 2.37.92
===============================================

* new API g_file_measure_disk_usage() similar to du(1)

* minor fixes

* Translation updates:
 Assamese
 Belarusian
 Brazilian Portuguese
 Catalan
 Czech
 Galician
 German
 Hungarian
 Indonesian
 Italian
 Korean
 Korean
 Latvian
 Lithuanian
 Polish
 Serbian
 Slovenian
 Spanish

Overview of changes from GLib 2.37.6 to 2.37.7
==============================================

* GDateTime now supports %:z formatting variations
  for timezones. This is a GNU date extension.

* Bugs fixed:
 685387 Segfault with GObject.signal_handler_is_connected()...
 686786 g_socket_get_available_bytes() returns wrong value ...
 705027 GSocket GSource not threadsafe on Windows
 706469 Fix G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE documentation
 706706 Fix Gir annotations on g_loadable_icon_load_finish
 706888 gtype: fix a no-op assertion
 706958 configure.ac: fix atomic opts detection
 707092 "File Utilities" page for GLib documentation doesn'...
 707151 gdatetime: Extend the '%z' timezone format

* Translation updates:
 Catalan
 Hungarian
 Japanese
 Polish
 Slovak
 Tamil


Overview of changes from GLib 2.37.5 to 2.37.6
==============================================

* Tests using the g_test facilities can now generate TAP output

* Bugs fixed:
 680926 generic type fallback logic is broken for -symbolic
 684327 setting null icon to icon list
 689245 GSocket unable to reuse (address,port) on Mac OS X
 692125 Support TAP as GTest output format
 693335 build: fix dtrace-related warnings
 696633 gdbus-codegen trips over unicode chars when using python 3.x
 696970 Compiling 2.36.0 for win64 fails
 697185 GSocket – Allow specifying the multicast interface from...
 700268 Add support for using the clang analyzer
 701318 Add G_SPAWN_DEFAULT to GSpawnFlags
 701529 glib/tests/gdatetime: use UTC time in test_GDateTime_diff()
 701800 a new approach to reporting critical errors
 702674 g_date_time_new_utc crash
 704165 GLib.IOChannel read_unichar() fails
 705075 Simplify g_get_tmp_dir()
 705152 Race in glib/task.test
 705398 gtype: Fix typo in g_type_class_add_private() error message
 705570 Check ref_count in g_object_notify_by_pspec
 705600 Deprecate GSimpleActionGroup functions?

* Updated translations:
 Assamese
 Brazilian Portuguese
 Czech
 Dutch
 Galician
 Gujarati
 Hebrew
 Italian
 Lithuanian
 Marathi
 Norwegian bokmål
 Russian
 Slovenian
 Spanish
 Thai
 Traditional Chinese


Overview of changes from GLib 2.37.4 to 2.37.5
==============================================

* Implement the Desktop Action specification: In the case that the
  application is a GApplication and DBusActivatable, actions from the
  desktop file are translated into GActions that have been added to
  the  application with g_action_map_add_action().

* GPropertyAction is a new type of GAction that represents the value
  of a property on an object, and allows to change the value when
  activated.

* GNetworkMonitorNetlink can now handle default routes via a device.

* The gsettings tool now reports failure to write a key (e.g. because
  the key was locked down)

* Miscellaneous new api:
 - g_variant_new_printf
 - g_action_print_detailed_name
 - g_regex_get_max_lookbehind

* Bugs fixed:
 664444 Support additional application actions in .desktop files
 684123 glib build only tries -D_GNU_SOURCE if glibc is detected
 689794 support incremental matching
 699259 add org.freedesktop.Application support to GIO
 700460 rewrite tests to not rely on precise timing of timeouts
 701511 updates to various GSource types
 701609 gnetworkmonitornetlink: handle default route via device
 703270 add GPropertyAction
 704157 GAction: add function for printing detailed names
 704250 Doc: various fixes
 704267 regression gsourceclosure: segfault in gedit file chooser
 704322 glib-unix: fix handling of multiple signal source for the...
 704424 No error when failing to override a locked key
 704447 Fix build/use of g_child_watch_closure_callback on Windows
 704523 g_thread_create_full() can dereference NULL pointer
 704543 Add implementations for G_GNUC_*_IGNORE_DEPRECATIONS for ...
 704567 gdbusnameowning: Don't spew an error if we're releasing a...
 704585 libc printf can give mixed-case strings for NaN and Inf
 704587 FTBFS: statfs_result is undeclared for statvfs()
 704699 gmain: Reset signal handlers to default when source is
 704704 AI_NUMERICSERV cannot be used with ai_socktype = 0
 704873 inotify: don't assume mainloop is running
 704999 glib/convert.test crashing due to lack of iconv cache
 704931 GMenuModel: add annotations to virtual functions

* Translation updates:
 Assamese
 Czech
 German
 Gujarati
 Spanish
 Tamil


Overview of changes from GLib 2.37.3 to 2.37.4
==============================================

* Bugs fixed:
 701283 g_source_add_child_source() segfault
 702147 inconsistency of G_STRFUNC
 703191 new private macros interact poorly with versioning macros
 703254 Doc: various fixes
 703407 g_spawn_async() keeps child_pid_report_pipe open in child process
 703437 GDBusConnection: be more careful with async GetAll
 703478 Missing G_BEGIN/END_DECLS in gsettingsschema.h

* Translation updates:
 Catalan

Overview of changes from GLib 2.37.2 to 2.37.3
==============================================

* add a new API for instance private data: G_DEFINE_TYPE_WITH_PRIVATE

* fix timestamps in tarball to prevent automake from being required to
  build the unmodified source

* add new D-Bus API for async property handling

* add back fsync() on ext4 for g_file_set_contents() after it was
  discovered that despite statements in the ext4 documentation
  suggesting that this is safe, it is not safe.

* Translations:
 Italian
 Norwegian bokmål

* Bugs fixed:
 698375 - D-Bus async properties
 700350 - timestamp issue
 701560 - fsync issue (fixed again)
 700035 - new API for instance private data

Overview of changes from GLib 2.37.1 to 2.37.2
==============================================

* The GLib test utilities have grown some file-related APIs
  to support tests that can be used installed and uninstalled.

* Installing properties after class initialization is deprecated,
  and will trigger a warning.

* GApplication:
 - Support org.freedesktop.Application, including D-Bus activation
   from desktop files
 - Set prgname to appid for services

* Bugs fixed:
 549783 gtester lacks framework for tests with data files
 692848 Fix property example in gobject tutorial
 698018 Add an explicit g_binding_release()
 698614 GObject: prevent installing properties after init
 699259 add org.freedesktop.Application support to GIO
 699959 g_file_copy(): Ensure we create private files by default
 700123 Test failure: g_inet_socket_address_get_scope_id
 700725 GIcon: NULLify the `type' out param in the sync methods too
 701401 gtest: add function for testing for WINE
 701456 Error in gnome/glib/gio/tests/file.c
 701474 Error building glibmm due to extra comma in glib/gtestutils.h
 701560 various improvements for g_file_set_contents()
 701680 GFileEnumerator: Add some documentation about ordering
 701878 Check wakeup() before iteration(TRUE) doesn't block

* Translations:
 Assamese
 Czech
 Galician
 Gujarati
 Kannada
 Marathi
 Odia
 Polish
 Slovenian
 Spanish
 Telugu


Overview of changes from GLib 2.37.0 to 2.37.1
==============================================

 * add support for installed tests:
   https://live.gnome.org/GnomeGoals/InstalledTests

 * add a new g_test_trap_subprocess() that works on Windows as a
   replacement for the (now deprecated) g_test_trap_fork()

 * support for explicitly cancelling a gobject property binding

 * performance improvements for signal argument handling

 * stop using `quotes' in very many log messages generated by GLib, for
   favour of 'this style'.  This may cause testcases in other packages
   to fail if they were matching on the previous text.

 * improve manpages: add missing arguments and flags

Translations: 
 Aragonese
 Assamese
 Gujarati
 Hindi
 Kannada
 Norwegian bokmål
 Odia
 Slovenian
 Spanish
 Tamil
 Telugu

Bugs fixed:
 679683 replace g_test_trap_fork()
 694380 Improve signal argument collection performance
 695233 Strings require plural forms
 697849 spelling fixes in cross.xml and running.xml
 698877 GProxyAddressEnumerator calls g_network_address_parse_uri without port
 698981 [PATCH] test /gdbus/connection/large_message could hang forever
 699079 Prototype support for installed tests
 699485 [PATCH] tests/mappedfile: Also handle ENOMEM
 699493 SOCKS5 proxy code crashes if it cannot authenticate
 699500 gbitlock: fix this to not unconditionally use futex emulation
 699779 [PATCH] G_GNUC_FORMAT: documentation error
 700263 m4macros/glib-gettext.m4: Don't use AC_HEADER_STDC
 700714 [PATCH] gtestutils: Ensure test subprocesses don't dump core
 700746 Use 'dumb quotes' rather than `really dumb quotes'

Overview of changes fron GLib 2.36.0 to 2.37.0
==============================================

* The syntax for detailed action names has been documented,
  and a parser API for them is now provided

* GApplication has gained a busy state. This feature is intended for
  clients that want to signal a desktop shell their busy state, for
  instance because a long-running operation is pending.

* GLib can now be built with the bionic C library

* GIcon can now be serialized to a GVariant

* Bugs fixed:
 548353 Finish implementing GFile interface (mostly asynchron...
 645881 Full port of glib-2.28.1 onto Android-ARM
 665445 Glib mistakes nl_langinfo() from plibc for the real t...
 672018 Need API to set global application state (busy, count...
 687659 drop support for adding interfaces after class_init
 688820 GIcon is a bad interface
 688954 extend 'detailed action' syntax, provide parser
 689223 Fix compilation on Android with the bionic C library
 695156 Add support for arg0namespace matching in signal_subs...
 696108 gdbus-codegen: avoid warnings in generated code
 696629 fix sed(1) usage
 696652 GTask won't free its error member variable on finalize
 696857 GThreadedResolver: set an error if no records could b...
 696973 Compiling 2.36.0 for win64 fails in gdbusmessage.c
 697131 No --version
 697160 [PATCH] gmacros: Mark G_UNAVAILABLE() functions as de...
 697229 Custom Interface implementations will be broken with ...
 697250 Documentation glitch of G_DEFINE_TYPE_EXTENDED causes...
 697365 Fix usage of hasmntopt in gunixmounts.c
 697367 Remove warning on gio/gunixmounts.c
 697386 Except const argument with atomic is not lock free
 697595 g_main_context_unref unlocks a mutex twice
 697601 reduce GMenuModel D-Bus traffic
 697626 Allow posix threads to be used on w32
 697652 Help options generated even when help disabled
 697771 fix a typo of "fo" to "of" in building.xml
 697887 GVariant: fix transfer annotation
 697942 abicheck.sh fails on mips
 698056 rewrite g_object_new()
 698081 Pidgin hangs in g_spawn_command_line_sync
 698455 GVariant: add new g_variant_new_take_string() API
 698457 g_variant_get_data_as_bytes() always returns toplevel...
 698478 gactionmap: don't require GActionGroup
 698595 the valgrind/priv-before-instance bug
 698655 desktop-app-info test relies on true being in /usr/bin/
 698686 GUnixSocketAddress: fix construct parameter issue
 698716 Use of g_mem_set_vtable() breaks after gobject automa...
 698999 bytesicon: fix a memory leak
 699001 bytesicon: don't use g_object_unref() on GBytes
 699361 gio: fix small leak

* Translation updates:
 Assamese
 Gujarati
 Hungarian
 Italian
 Kannada
 Norwegian bokmål
 Polish
 Spanish
 Tamil


Overview of changes fron GLib 2.35.9 to 2.36.0
==============================================

This release contains only small bugfixes and translations updates.

 - g_file_copy(): fix bug where attributes were not applied properly to
   the destination file

 - fix some 'available since' annotations

 - fix gdbus-codegen to produce more pedantically-correct code

* Bugs fixed:
 696108 gdbus-codegen: avoid warnings in generated code
 696014 g_file_copy(): Ensure G_FILE_COPY_OVERWRITE preserves permissions

* Translations updated:
 Basque
 Czech
 Gujarati
 Hindi
 Hungarian
 Japanese
 Malayalam
 Marathi
 Odia
 Punjabi
 Russian
 Tadjik
 Tamil
 Telugu

Overview of changes from GLib 2.35.8 to 2.35.9
==============================================

This release drops the old codepage ABI from gutils.c. This is a
source-compatible change and only breaks ABI with respect to truly
ancient binaries (and those binaries are already broken for other
reasons).  This change only affects Windows.

* Bugs fixed:
 682896 glib doesn't build on mingw32
 693204 split up g_get_{hostname,username,realname,home_dir} etc.
 694181 Handle GNetworkAddress better in g_network_monitor_base_...
 694253 occasional /gdbus/unref-pending test failure
 694350 Add type names to gsignal warnings
 694757 Use separate GLIB_WARN_CFLAGS that can be overridden ext...
 568405 Which is the correct replacement for g_strncasecmp, if...
 630284 g_hash_table_get_keys docs
 659428 docs: Small clean-up of howto subsection headers
 675333 Cannot forget association in Open With dialog: program...
 694669 consider unicode corrigendum #9
 694843 g_base64_decode_step () produces invalid data
 695147 Don't use PATH_MAX as it's not guaranteed to be defined
 695191 Commit f641699 broke /appinfo/mime/api test case
 695339 Swapped msgid plural forms for translation
 695376 GDBusMethodInvocation leak and potential crash
 695425 Untranslatable message in gsettings-tool
 695887 Improvements to GObject API documentation
 695925 GUINT32/64_SWAP_LE_BE macros do not enclose val argume...
 696015 PATCH Add doc warning to g_base64_decode()

* Translation updates:
 Assamese
 Belarusian
 Brazilian Portuguese
 Catalan
 Catalan (Valencian)
 Danish
 French
 Galician
 German
 Greek
 Gujarati
 Italian
 Korean
 Latvian
 Lithuanian
 Polish
 Portuguese
 Punjabi
 Serbian
 Simplified Chinese
 Slovak
 Slovenian
 Spanish
 Thai
 Traditional Chinese
 Uyghur
 Vietnamese


Overview of changes from GLib 2.35.7 to 2.35.8
==============================================

This release contains one major change that may cause problems: type
modules are now never unloaded.  This is implemented by (effectively)
leaking the last reference on dynamic types.  Some testcases that check
for unloading of types have been observed to be broken by this change,
but we know of no actual cases of "real code" breaking.  Please report
any problems.

Other changes:
 * A couple of build fixes for Solaris
 * Fix signal emission for GDBusObjectManagerClient
 * annotations fixes
 * new API: g_dbus_address_escape_value()
 * GSocketClient: add proxy-resolver property
 * GSimpleProxyResolver: new simple GProxyResolver class
 * documentation fixes
 * gnetworkaddress: preserve IPv6 scope ID in IP literals

Bugs fixed:
 691105 Allow GSocketClient to override GProxyResolver for per client proxy settings.
 692827 configure test fails for arpa_nameser.h
 692829 new Btrfs support causes build failure on Solaris
 693285 GDBusObjectManagerClient: won't emit object-added|removed if name-owner arrives later
 693502 Cross-compiling documentation: typo (np -> no)
 693673 add g_dbus_address_escape_value()
 693694 gio: Fix annotations on g_[async_]initable_new() and friends 

Translations:
 Dutch
 Galician
 Polish
 Serbian

Overview of changes from GLib 2.35.6 to 2.35.7
==============================================

This is a quick follow-up release with a few bug fixes.

* Fix the build on systems with strict linkers by adding -pthread back
  to the LDFLAGS for a testcase.

* Re-enable native atomic operations on some buggy versions of clang
  that ship as part of the MacOS X SDK.

* Make G_IO_FLAG_IS_WRITEABLE an enum again (the #define broke bindings)

* a small docs fix

* Bugs fixed:
 657045
 636683
 682818
 693105

* Translations:
 Italian

Overview of changes from GLib 2.35.4 to 2.35.6
==============================================

* GUnixFdSource is a new way to add file descriptors
  to the mainloop

* g_source_set_ready_time lets you mark a source to become
  ready at a specified monotonic time

* The internal visibility handling of GLib has been reworked

* GFileMonitor will now automatically use fam instead of inotify
  if $HOME is on NFS

* The file monitor implementation can now be overridden with
  the GIO_USE_FILE_MONITOR environment variable

* Bugs fixed:
 570572 2 make check errors on
 592211 No monitoring over NFS mounts
 625552 wrong behaviour of GVolume GVolumeMonitor related func...
 657729 modernise GMainLoop
 658020 GSource for a single GPollFD
 678223 g_mutex_free
 682560 leak fixes
 682819 EINTR-harden all the things
 684404 When using g_network_address_address_enumerator_next()...
 686853 new GSource fd API
 688169 G_DISABLE_DEPRECATED doesn't cover deprecated/gthread....
 688681 build: Make .symbols file canonical on all platforms
 690118 Crash when closing last tab of a window using Ctrl-w
 691624 glib/gtester.c: missing include
 691812 gioinputstream - give task as callback_data not task_data
 691866 fails out of source build directory - gnetwork.h not f...
 692029 Add new API checking utility
 692034 Install an invalidation notifier for GClosure in g_sou...
 692058 Broken makefile for gio tests
 692079 build failure in gmarkup.c when using gcc 4.8 and buil...
 692201 inotify: fix a memleak
 692202 gfile: don't report completion twice on g_file_load_co...
 692229 Incorrect string formatters in a translation string
 692332 GNetworkMonitorNetlink: make the netlink socket cloexec
 692360 possibly non-threadsafe code in g_content_type_guess()?
 692404 tester: Use FD_CLOEXEC when creating pipes
 692408 nautilus SIGSEGV in g_file_info_get_size()
 692544 [PATCH] gfile: Ensure we create internal pipe with FD_C...
 692583 atomic get doesn't accept a const argument on architect...
 692618 Use g_timeout_add_seconds
 692815 Using g_hash_table_insert() when using a hash table as ...
 692865 Invalid docbook generated by gdbus-codegen
 692928 Document G_MENU_{ATTRIBUTE,LINK}_*

* Translation updates:
 Hebrew
 Kannada
 Lithuanian
 Norwegian bokmål
 Polish
 Serbian
 Slovenian
 Spanish
 Uyghur


Overview of changes from GLib 2.35.3 to 2.35.4
==============================================

* New features:
 - New API: g_get_num_processors
 - New API: g_application_command_line_get_stdin
 - New GFileMonitor flag: G_FILE_MONITOR_WATCH_HARD_LINKS
 - Parse more timezone offset formats
 - Better timezone support on Windows
 - Make GParamSpec constructors introspectable

* Removed or deprecated features:
 - Disallow adding interfaces after class_init

* Bug fixes:
 532815 gio + inotify support for hardlinks
 614930 add g_get_num_processors (), return the max concurrent...
 626497 Btrfs clone/reflink ioctl support in g_local_file_copy
 633117 glib fails stests if /etc/localtime is not properly set
 661767 merge/improve various bits of run-in-thread functionality
 668210 Add g_application_command_line_get_stdin()
 675856 Use GDbus via gobject-introspection instead dbus-python
 684103 make glib work with python3
 684723 run-assert-msg-test.sh fails
 686058 OpenBSD: disable ipv6_v4mapped test
 686128 GTimeZone should be able to parse POSIX format for...
 687223 cleverer GThreadPool management
 687659 drop support for adding interfaces after class_init
 687920 GCredentials should have an accessor for the process ID
 688681 build: Make .symbols file canonical on all platforms
 688829 Variable overflow in utils.c test on 32-bit machine
 689324 Variable scoping in gunixmounts.c
 689810 Include guard optimization
 690043 Broken link for gsettings tutorial: gnome-utils in...
 690084 gmarkup: Make GMarkupParseContext a boxed type
 690388 Check if CMSG_FIRSTHDR() returns NULL when there is...
 690538 gschema DTD is invalid
 690543 Add test coverage for testing in-tree DBus services...
 690670 local_command_line not introspectable/annotated
 690902 G_END_DECLS needs to be at the end of gutils.h
 690970 Unhelpful deprecation message for g_value_array_get_nth
 691001 building docs is broken on master branch
 691011 Automake-1.13 errors on obsolete AM_PROG_CC_STDC
 691077 gio-querymodules crashes with SIGSEGV
 691110 g_cond_wait() docs incomplete
 691489 Crash in Oscars 2013 page
 691558 Only check for .hidden files if standard::is-hidden...
 691608 Support compilation with clang 3.2

* Translation updates:
 Assamese
 Bulgarian
 Estonian
 Galician
 Greek
 Hebrew
 Norwegian bokmål
 Polish
 Slovak
 Slovenian
 Spanish
 Tamil


Overview of changes from GLib 2.35.2 to 2.35.3
==============================================

* This release contains an incompatible change to the g_get_home_dir()
 function. Previously, this function would effectively ignore the HOME
 environment variable and always return the value from /etc/password.
 As of this version, the HOME variable is used if it is set and the
 value from /etc/passwd is only used as a fallback.

* We now install a public "gnetworking.h" header that can be used to
 include the relevant OS-dependent networking headers. This does not
 really abstract away unix-vs-windows however; error codes, in
 particular, are incompatible.

* Bugs fixed in this release:
 142568 Allow $HOME to override passwd entry if the user really wants
 587806 The file selector should honor .hidden files
 602715 [GChecksum] Please add support for SHA512
 623187 provide some support for arbitrary setsockopt()s?
 629301 .goutputstream files left behind when cancelling I/O
 652650 Optimize GDBusMessage serialization
 664627 /gapplication/basic test intermittently fails: cmdline re-or...
 675516 Win32: Don't start a DBus server when built as static library
 679683 replace g_test_trap_fork()
 684145 Current Git sources fails to cross-compile for Windows in Li...
 686895 file-info: catch thumbnail files in large directory as well
 687092 IPv6 <-> IPv4 mismatch when subscribing to multicast (send)
 688180 GObject: Minor error in description of floating reference
 688319 gthread: add missing AVAILABLE_IN_2_32 annotations
 688377 configure: add missing square bracket in AS_IF for memmove
 688419 gtask: source_object arguments and return values not annota...
 688497 AppInfo: Add sufficient api to port gnome-session from Egg...
 688681 build: Make .symbols file canonical on all platforms
 688704 Add boxed GType for GThread
 688886 Improve the i18n documentation
 688931 GMemoryOutputStream: Add new _resizable() constructor usab...
 689037 need helper for creating a GFile from a remote commandline...
 689377 Fix a compiler warning in GDBus
 689538 Source object tag set too late in gsocketlistener
 689800 Treat lost+found directory as a hidden file
 689847 Add fast repeated typename -> GType resolver
 689982 Make GChecksum more fully introspectable
 690069 g_unix_open_pipe: Add missing F_SETFD
 690083 gfileenumerator: Add a g_file_enumerator_get_child method
 690163 Add a pre-configured gio/gnetworking.h for Visual C++ builds
 690346 Remove an unneeded escaping in NAMESER_COMPAT_INCLUDE
 690348 Fix g_type_add_class_private() name in g_warning

* Translation updates:
 Assamese
 Galician
 Hebrew
 Hindi
 Kannada
 Odia
 Polish
 Spanish


Overview of changes from GLib 2.35.1 to 2.35.2
==============================================

Note that the incompatible change to the ->constructed() vfunc that was
made in the last unstable release (2.35.1) has been reverted due to
causing regressions in applications.

A new incompatible change has been introduced in this version: it is no
longer permitted to add interfaces to a class after the first
instantiation (or more strictly: after g_type_class_ref()).  Bug #687659
is tracking this.

Two private symbols (g_menu_{attribute,link}_hash_iter_get_type) which
were accidentally exported have also been properly hidden.  This may
cause some tools to issue warnings about ABI mismatch.

The remaining changes should be relatively harmless: 

 * GIO now has kqueue support for GFileMonitor (BSDs, Mac OS)

 * New g_variant_new_from_bytes() API

 * UNIX signal sources now allow watching SIGUSR1 and SIGUSR2

 * Many pedantic cleanups to adhere to a higher level of -W use

 * GTask changes to avoid a deadlock

 * many cleanups/fixes for Windows

 * Boxing for GPollFD, GIOChannel, GBytes, GByteArray

 * Fix URL-encoding of trashed files

 * Many other docs and annotations fixes

Translations:

 Galician
 Gujarati
 Lithuanian
 Serbian
 Slovak
 Slovenian

Bugs closed:

 649302 Add support for GNU/FreeBSD
 668842 [GSocket] Add caching for the sender address in g_socket_receive_from()
 672924 Add annotations for g_filename_from_uri()
 673229 glib: Use Returns:, not @returns
 677062 (partial) GVariant: Make g_variant_new_from_bytes() public, add more GBytes API
 686185 g_date_time_format Transcoding Fails on OSX      
 686191 g_mutex_get_impl() should use g_atomic_pointer_get()
 686797 Box GPollFD to make it introspectable
 686810 [regression] Infinite wait in g_task_run_in_thread_sync()
 686822 possible dlopen()/dlclose() issue with automatic g_type_init()
 686839 mkinstalldirs: Move to glib-mkinstalldirs
 686895 file-info: catch thumbnail files in large directory as well
 686898 g_unix_signal_source_new: Allow SIGUSR1 and SIGUSR2
 686920 gdbus: Allow GDBusObjectManagerClient to work on peer connections
 686921 Remove some of the repetition from gio/tests/Makefile.am
 687075 g_spawn_sync diagnostic incorrectly complains about SIGCHLD
 687089 g_dbus_connection_export_menu_model(): fix a crash
 687098 Repeated g_timeout_add* use can lead to guint overflow
 687385 Add some stricter CFLAGS, fix up the code
 687441 ABI break in master: g_menu_attribute_hash_iter_get_type, g_menu_link_hash_iter_get_type removed
 687516 typo in string: KB should be kB
 687540 In Trash folder, Nautilus misinterprets "\n" in filename as a line break
 687541 GSignalQuery param_types field needs array annotation
 687600 gfileutils.c performs invalid cast of (varargs) open to non-vararg type
 687698 plural forms needed
 687700 ending spaces
 687742 Add support for internal linkage to glib-compile-resources
 687801 tests/buffered-input-stream: Fix size of parameter passed
 688109 win32 warning/error fixes
 688255 'make check' regressed in 138f4c1 because GMarkup error messages changed
 688338 [PATCH] gobject/gtype.c: Fix spelling of »exceed«
 688370 GDBusError documentation improvement for client-side
 688378 g_socket_join_multicast_group not working
 688518 gio-kqueue: use O_EVTONLY on MacOS



Overview of changes from GLib 2.34.0 to 2.35.1
==============================================

These two changes in particular may be slightly incompatible.  Please
give feedback if they cause trouble:

  * Signal handlers connected with g_signal_connect_object() are now
    automatically disconnected on target object destruction

  * The ->constructed vfunc is now called after all properties are set

The remaining changes should not cause problems.

  * g_type_init() is no longer necessary and has been deprecated

  * GTask (the new GAsyncResult implementation) has landed 

  * GLib version macros updated

  * Update to Unicode 6.2

  * Thread safety fixes for GFileMonitor in non-default main contexts

  * GTimeZone support for old-format zoneinfo database (as on Mac OS)

  * g_settings_bind() now works with non-canonical property names

  * Fix crashes related to NULL connection passed to
    GBusNameVanishedCallback and document this situation

* Bugs fixed:
 118536 Make g_signal_connect_object'ed handlers disconnect when the data object is destroyed
 661767 merge/improve various bits of run-in-thread functionality
 682950 GFileMonitor crashing on high event count when running in different thread
 683642 Missing g_content_type_get_symbolic_icon
 684882 Gsettings should spaw a warning when binding against a low_underscored_property
 684909 codegen: Explicitly close output
 684912 Update to Unicode 6.2
 685037 g_strcmp0: Returns shall include values less and greater than zero
 685069 Leak in glib-compile-resources
 685208 missing g_return_if_fail
 685608 [Patch] Port gio tests from pygobject to pygi
 685697 Documentation typo in g_dbus_interface_skeleton_has_connection()
 685733 Call ->constructed() after all properties are set
 685787 gtestdbus: correct documentation typos
 685995 Crash in g_menu_exporter_name_vanished
 686091 Invalid reads in g_bytes_unref_to_data
 686119 dtrace, gobject_probes.d, the last three probes - semicolon missing
 686161 Deprecate g_type_init()
 686231 GBusNameVanishedCallback: document NULL connection
 686458 slightly increase poll duration in test_timed_wait 

* Translations updated
  Catalan (Valencian)
  Czech
  Danish
  Italian
  Lithuanian
  Norwegian bokmål
  Slovenian

Overview of changes from GLib 2.33.14 to 2.34.0
===============================================

* Bug fixes:
 654239 g_type_init()'s docs have no statement about how to...
 674620 Update GSettings migration guide for intltool updates
 676034 Fix doc annotation for g_ptr_array_ref()
 684278 Fix GIO build on Windows

* Translation updates:
 Brazilian Portuguese
 British English
 Bulgarian
 Catalan
 Galician
 German
 Hebrew
 Hindi
 Hungarian
 Kannada
 Latvian
 Marathi
 Spanish
 Telugu


Overview of changes from GLib 2.33.12 to 2.33.14
================================================

 * CVE-2012-3524: don't run dbus-launch from setuid binaries

 * g_content_type_get_generic_icon_name():
     new API for getting the icon name for a mime type

 * Introspection fixes:
  - GDBusConnection nullability fixes
  - give a box type to GTimeZone

 * Drop GVFS_INOTIFY_DIAG

 * Add a new "Writing GLib Applications" section to the reference
   documentation with general info on security, threads, etc.

 * gwin32mount.c: Fix syntax error

 * gresource tests: srcdir != builddir fixes

 * tests/gvariant: Fix test on big endian architectures

 * Fix regression in g_shell_parse_argv()

Bugs fixed:
 562907 g_shell_parse_argv() mishandles # (hash)
 683167 g_time_zone_new not introspectable
 683384 /gvariant/checksum-basic failure on big endian machines
 683641 Typo in gwin32mount.c
 683744 have a way to get the generic icon name for a mime type

Translation updates:
 Assamese
 Belarusian
 British English
 Czech
 Danish
 French
 Galician
 German
 Greek
 Hebrew
 Indonesian
 Indonesian
 Korean
 Lithuanian
 Marathi
 Marathi
 Polish
 Portuguese
 Punjabi
 Russian
 Serbian
 Slovenian
 Traditional Chinese

Overview of changes from GLib 2.33.10 to 2.33.12
================================================

* Add a G_DEFINE_QUARK macro

* Add symbolic icon support to drive, volume, and mount, file
  and content types

* Add API to allow thread-safe access to the same qdata item

* Bugs fixed:
 562907 g_shell_parse_argv() mishandles # (hash)
 627240 add G_DEFINE_QUARK
 672329 memory leaks in gutils.c and glib tests
 673012 Stable byte-level specification for normal form
 674805 gdbusproxy async test is broken
 679835 gvariant format string parsing (and assertions)...
 682075 gdbus: Fix double free and use after free of ob...
 682101 Provide a way to get a symbolic icon for a device
 682222 test_method_calls_on_proxy: assertion failed (e...
 682284 mount-op: use gint64 instead of guint64 for tim...
 682386 "make check" fails due to sys/resource.h not be...
 682560 leak fixes
 682586 gsettings-tool: make list-recursively really re...
 682819 EINTR-harden all the things
 682833 Handle EINTR for open()
 682849 drop the global lock for g_object_weak_ref
 682965 gdbus-tool: Check return value of strrchr()
 683088 gdbus-codegen: fix error when wrong interface n...
        Fix the build with gtk-doc-stub
        Don't crash if set_app_info is called before ad...

* Translation updates
 Assamese
 Galician
 Greek
 Indonesian
 Japanese
 Latvian
 Lithuanian
 Norwegian bokmål
 Polish
 Portuguese
 Punjabi
 Russian
 Spanish
 Traditional Chinese
 Vietnamese


Overview of changes from GLib 2.33.8 to 2.33.10
===============================================

* New GTest API for testcases where log output is expected:
  g_test_expect_message()

* GMenuItem now has 'get' accessors and a construct-from-GMenuModel API

* GVariant now has a function to check a format-string for type
  compatibility

* win32: We now use overlapped IO to support multiple asynchronous
  operations (ie: reading and writing) at the same time.

* GMappedFile: Add g_mapped_file_get_bytes()

* The problems with g_file_make_directory_with_parents() should be
  resolved.

* The long-standing issues with placeholder generation of manpages are
  now resolved.

* gtlscertificate: Add GBytes based certificate and private-key props

* build: Switch back to using AS_IF for conditionals

* test coverage improvements, documentation improvements, leak fixes

* Bugs fixed
 326931 Better docs for G_GNUC_*
 550433 g_test_init doesn't recognize --help
 600751 GCompletion should better document if and how items memory is managed
 628193 Miscellaneous string fixes
 637460 man glib-genmarshal is hard to use
 674483 broken configure results when cross-compiling with gcc >= 4.5
 677065 GMappedFile: Add g_mapped_file_get_bytes()
 679288 win32: use overlapped events for streams
 679556 it's hard to use gtest when g_warning() is expected
 680823 g_file_make_directory_with_parents: Fix error propagation
 681319 gtlscertificate: Add certificate-bytes and private-key-bytes props
 681336 man pages not built if --enable-gtk-doc not specified
 681413 build: Switch back to using AS_IF for conditionals
 681501 gmem: array only partially filled with memcpy
 681854 Documentation fix for Howto compile a program with glib
 682025 Documentation correction
 682067 Fix problems with CLEANFILES and automake-1.11.1 

* Translations updated:
 Lithuanian
 Spanish
 Galician
 Telugu
 Serbian
 Assamese
 Marathi
 Indonesian
 Traditional Chinese

Overview of changes from GLib 2.33.6 to 2.33.8
==============================================

* GIO now has a g_file_delete_async function

* The defaults for GThreadPools max_unused_threads
  and max_idle_time values have been changed to
  2 and 15*1000, respectively.

* Bugs fixed:
 661767 merge/improve various bits of run-in-thread functionality
 680074 undefined symbol "get_C_locale"
 680121 g_cancellable_source_new: don't use a file descriptor
 680148 gthread: check for definition of PR_SET_NAME
 680310 Sorting of access points by strengh not working
 680704 g_utf8_strup() crash
 68076a0 GFile: Add g_file_delete_async()
 680787 Add .dir-locals.el to tell Emacs users not to use tabs...
 680823 g_file_make_directory_with_parents: Fix error propagation
 680994 STATIC_ASSERT in GDBusError docs don't have much utility
 681116 gtlscertificate: Add g_tls_certificate_equal() function
 681118 gtlsdatabase: Don't complain if no callbacks for async...
 669331 try to get gio tests working a little better on win32
 674314 Make gtk-doc not a hard dependency of GLib
 674800 gclosure: generic marshaller leaks return value
 675524 gsocket: FIONREAD undeclared (needs sys/filio.h)
 679509 use after free in g_dbus_action_group_describe_all_done()
 679996 gobject docs minor cleanup
 680459 Extra newline char in local implementation of g_applic...
 680505 object_path memory leak in gdbusobjectproxy.c
 680831 Deprecate and remove g_slice_[sg]et_config.*
 680912 gchecksum: Add g_compute_checksum_for_bytes()
 681151 checksum: Use functions instead of macros when buildin...
 681158 gtlscertificate: Don't confuse certificate and public ...

* Translation updates:
 Galician
 German
 Gujarati
 Hebrew
 Norwegian bokmål
 Serbian
 Slovenian


Overview of changes from GLib 2.33.4 to 2.33.6
==============================================

* GAsyncInitable: partially revert the init_finish changes,
  some applications were found to rely on behaviour that
  was broken by these changes

* Bugs fixed:
 679617 win32: fix g_get_environ()
 679968 Add some annotations to GBytes, GVariantType...
 680111 GIOScheduler assumes GCancellable "cancelled...

* Translation updates:
 Spanish

Overview of changes from GLib 2.33.3 to 2.33.4
==============================================

* GMainContext: the source list has been reorganzied to
  avoid O(n) behaviour

* GRegex: Update included PCRE to 8.31 and expose new
  functionality in 8.x versions of PCRE

* GMountOperation gained a ::show-unmount-progress signal
  which provides information about slow unmount operations

* Bugs fixed:
 616892 gio: Add a boxed type for GFileAttributeMatcher
 619329 g_source_attach() O(n) in number of sources
 639771 g_dir_read_name() can also return NULL on error
 661767 merge/improve various bits of run-in-thread fun...
 667375 GAsyncInitable subclassing (and async subclassi...
 671545 Constify collect and lcopy strings in GTypeValu...
 674452 SEGFAULT in gio contenttype test
 674898 Deal with GLIB_VERSION_MIN_REQUIRED/MAX_ALLOWED...
 675504 Fix up GObject interface documentation
 677064 GString: Tweak documentation, add g_string_free...
 677578 error in PCRE error code conversion
 677579 update GRegexError for newer PCRE error codes
 678066 gdbus codegen does not work with python3
 678273 unicode othercasing is wrong in gregex
 678576 GIOScheduler performance enhancements
 678758 GTlsInteraction unlocks an unlocked mutex
 678808 GTestDBus issues
 678881 Test failures in /socket/timed_wait in some cas...
 678941 /contenttype/guess test case failure
 678944 gio returns the wrong default applications for ...
 678949 wrong definition of ulong_bool for 64 bit big e...
 678959 /mainloop/timeouts race condition: assertion fa...
 679193 update included pcre to 8.31
 679258 The 'Since' tag for G_SOURCE_CONTINUE and G_SOU...
 679473 Don't generate invalid property names
 679691 Add g_spawn_check_exit_status()
 679671 GDBusNodeInfo: the XML string must contain exac...
 676111 mount-operation: add show-unmount-progress signal
 679691 win32: fix build g_spawn_check_exit_status() wi...
 679813 Documentation bug on http://developer.gnome.org...

* Translation updates:
 Assamese
 Belarusian
 Bulgarian
 Galician
 Greek
 Norwegian bokmål
 Polish
 Spanish
 Traditional Chinese
 Vietnamese


Overview of changes from GLib 2.33.2 to 2.33.3
==============================================

This release contains mostly bugfixes, cleanups and performance
improvements (including many fixes contributed by Colin on the advice of
Coverity).  There are a few notable externally-visible changes:

* Thumbnails are now in XDG_CACHE_HOME

* new GDBus API: per-thread g_dbus_connection_get_last_serial()

* GUnixOutputStream now has a can_poll() implementation

* New deep copy APIs for G(S)List: g_(s)list_copy_deep

* Bugs fixed:
 518309 Incorrect data*dir path in glib-gettextize output
 566994 Safer passing of -framework flag
 672889 GLib.utf8_validate does segfault
 673253 Not strict enough autconf test for libelf
 675024 adds g_list_copy_deep() and g_slist_copy_deep
 675168 prepare for thumbnails to move to XDG_CACHE_HOME
 675966 gresolver: More robust parsing of DNS responses
 676594 [Patch] fix g_reload_user_special_dirs_cache
 676825 Implement g_dbus_connection_get_last_serial ()
 677235 Clarify the comment at the top of gmarshal.list
 677527 OS X: gthread/spawn-async selftest failure
 677718 GDBusProxy: treat org.freedesktop.systemd1.Masked error as non-fatal
 677770 GUnixOutputStream does not implement can_poll
 677782 Install bash completion files in /usr/share
 677817 g_key_file_to_data adds extra blank lines in some cases
 677952 Missing annotation for GDBusConnection signal "closed"
 678052 g_wakeup_acknowledge is called too often.
 678273 unicode othercasing is wrong in gregex
 678333 gdbus-codegen code causes warnings under -Wfloat-equal

* Translations updated:
 Arabic
 Assamese
 Galecian
 Greek
 Spanish
 Telugu

Overview of changes from GLib 2.33.1 to 2.33.2
==============================================

* GLIB_VERSION_MIN_REQUIRED now defaults to the current stable version

* GIO input and output stream classes have grown GBytes-based methods

* GApplication now has hooks to register D-Bus objects before the bus
  name is taken

* Bugs fixed:
 605976 add g_type_ensure(), to ensure that a type has...
 660851 Breakage of code due to changes in the GThread...
 666386 Empathy doesn't open Redirect URI with particu...
 671139 need (transfer async) for io stream buffers
 672329 memory leaks in gutils.c and glib tests
 672548 g_utf8_validate: @str shouldn't end up annotat...
 674111 Provide an accessor for MimeType desktop entry...
 674483 broken configure results when cross-compiling ...
 674634 Add g_clear_pointer()
 674777 What's the (transfer) of g_variant_lookup()?
 675309 gkeyfile: Fix annotations for g_key_file_load_...
 675446 gfile: Plug memory leak in g_file_make_directo...
 675509 add extra dbus hooks
 675832 Incomplete gsettings bash auto-completion
 676208 The tmpl parameter to g_file_new_tmp can be NULL
 676265 GNetworkMonitor leaks a lot of memory
 676277 Document that g_app_info_create_from_commandli...
 676397 g_environ_* should work with NULL envp
 676398 g_spawn_* should take PATH from the passed env...
 676478 Broken gzip decoding
 676594 [Patch] fix g_reload_user_special_dirs_cache
 676816 Add more GLIB_AVAILABLE_IN_*
 676937 Document notify signal deduplication with free...

* Translation updates:
 Czech
 French
 German
 Greek
 Japanese
 Russian
 Slovenian
 Spanish


Overview of changes from GLib 2.32.1 to 2.33.1
==============================================

* GApplication
 - can now have a NULL application ID
 - add accessors for determining dbus connection and object path

* g_clear_object: fix warnings when using it on C++ (due to lack of
  ability to implicitly cast void*)
* add g_clear_pointer as a generic form of g_clear_object

* GDBus:
 - add our own implementation of the message bus for use on Windows only
 - fix up a few bugs that use of this bus uncovered in GDBus
 - escape nonce files in dbus addressess (think 'c:\')
 - support initial underscores in dbus codegen namespace (for private)
 - add GTestDBus for bringing up a session bus for testing purposes
 - gdbus-codegen: Avoid warnings in generated code
 - GDBusAuthObserver: Add a way to control what authentication mechanisms to use
 - 

* Fix misdetection of GNUstep as Cocoa (for the MacOS GSettings backend)

* make sure configure fails if AC_CHECK_ALIGNOF cannot detect the alignment

* GAppInfo
 - overwrite the DISPLAY only if it is set in the launch context
 - add accessor for StartupWMClass

* glib/tests/date: force US locale running the GDateTime tests

* Resources:
 - fix broken use of GVDB on big endian machines
 - set a 'display name' so that pretty file names appear in Gtk CSS
   warning messages

* GMainContext:
 - block child sources when blocking the parent
 - introduce more testcases for child sources

* GResolver: add support for MX, TXT, NS and SOA records

* GSocketControlMessage: Don't warn about unknown messages

* GIO:
 - implement GSeekable for the data and buffered stream classes
 - implement GPollable for many more classes as well
 - fix GConverterInputStream infinite loop when fill_buffer returns an error
 - fileinfo: document the correct type for trash::orig-path

* test coverage improvements and general fixes

* new 2.34 stuff: version macros, docs index section, etc.

* Build:
 - add --disable-modular-tests build option
 - don't require host binaries if tests are not enabled for cross-builds

* Translations updated
 Brazilian Portuguese
 Bulgarian
 Czech
 French
 Galician
 German
 Hebrew
 Hindi
 Italian
 Norwegian bokmål
 Polish
 Russian
 Russian
 Serbian
 Simplified Chinese
 Slovenian
 Spanish
 Telugu

Overview of changes from GLib 2.32.0 to 2.32.1
==============================================

* Bugs fixed:
 670254 glib-2.30.2: Fails /GDateTime/new_from_unix test
 672541 glib-compile-resources prepends --sourcedir to absolute paths
 673139 URL to mailing lists in README incorrect
 673174 g_input_stream_read[_finish]: document returning 0 on EOF
 673191 glib/gchecksum.c warning: dereferencing type-punned pointer...
 673216 [W32] gtestutils does not use path separators consistently
 673439 Properly deprecate g_value_{set,get}_char
 673612 Fails to decode dictionaries wrapped in two layers of array
 673803 gclosure: Support return values of GVariants
 669285 glib/tests/markup-parse fails under non-english locale
 673911 gio-2.0.pc lists full path to executables, breaking cross com..
 673762 gnextstepsettingsbackend.c:343: error: parse error before 'in'

* Updated translations:
 Belarusian
 British English
 Bulgarian
 Catalan
 Czech
 French
 German
 Hebrew
 Hindi
 Hungarian
 Italian
 Japanese
 Kannada
 Latvian
 Lithuanian
 Marathi
 Norwegian bokmål
 Odia
 Polish
 Serbian
 Slovenian
 Spanish
 Swedish
 Telugu


Overview of changes from GLib 2.31.22 to 2.32.0
===============================================

* Bugs fixed:
 671988 Quickly registering / unregistering objects on bus...
 672095 glib needs stable sort function
 672406 glib/tests/include.c fails to build on FreeBSD

* Updated translations:
 Telugu


Overview of changes from GLib 2.31.20 to 2.31.22
================================================

* Bugs fixed:
 531901 Use __builtin_bswap* for GUINT*_SWAP_LE_BE if building...
 653167 Out of tree build is broken on windows
 668973 Test /gvariant/parser fails on Solaris 10
 669797 gvfs now lists its fuse mounts
 670846 deadlock: GStreamer-WARNING **: wrong STREAM_LOCK count 0
 671664 gio-querymodules: unlink instead of writing empty cache
 671676 Glib can't be cross-compiled any more after merge of...
 671918 gnome-shell is inaccessible unless started while an AT...
 671942 GSocketMsgFlags: annotate as a flags
 671997 Unix signal handling assumes that volatile 1-byte writes...
 672013 GSimpleAsyncResult: support reliable cancellation
 672026 default log output should include pid and/or prgname
 672095 glib needs stable sort function
 672201 G_SPAWN_SEARCH_PATH should continue on ENODEV and ETIMEDOUT
 672239 request NO_REPLY from g_dbus_connection_call() with no as...
 672249 gdbusproxy leaks asyncresult in an error case instead of...

* Translation updates:
 Assamese
 British English
 Catalan
 Catalan (Valencian)
 Danish
 Esperanto
 Finnish
 French
 German
 Hungarian
 Korean
 Lithuanian
 Norwegian bokmål
 Polish
 Portuguese
 Russian
 Traditional Chinese


Overview of changes from GLib 2.31.18 to 2.31.20
================================================

* Update to Unicode 6.1

* Update PCRE to 8.30

* Deprecations are now versioned, and new API is
  marked with the version it was introduced.
  Use these with GLIB_VERSION_{MIN,MAX}_REQUIRED

* The performance of signal emissions has been
  improved for simple cases

* Bugs fixed:
 529806 Cannot build in 64-bit Mac OS X due to libiconv
 580873 Documentation of register type functions incomplete
 592666 Document how to unset an attribute
 597785 g_type_class_add_private code snippet is a bad example
 621368 glib-2.24.1: FAIL: run-assert-msg-test.sh when updating...
 622149 --disable-regex breaks glib2 build
 639873 GBinding: Crash when binding two properties on the same...
 640202 For GLIB v. 2.23.6 and above: impossibility to build mu...
 668295 Need a way to classify GVolume instances
 669670 gasyncqueue: don't use deprecated g_cond_timed_wait()
 670542 Add version information for deprecations
 670557 gvaluetransform: Fix an infinite loop with GFlagsValue...
 670721 global variable for signal ID should be hidden
 670751 IceWM build fails due to the G_DEPRECATED_FOR macro
 670909 g_dbus_connection_call leaks when it receives an error...
 670922 Include path to gdbus-codegen in the pkgconfig file
 670969 GSequence lookup may fail if there was no sort prior to...
 671025 Constants and identifiers starting with a number are no...
 671270 make distclean failures
 671281 glib-compile-resources.xml is missing from the dist tar...

* Translation updates:
 Basque
 Belarusian
 Brazilian Portuguese
 Bulgarian
 Galician
 Hebrew
 Lithuanian
 Persian
 Punjabi
 Serbian
 Simplified Chinese
 Slovenian
 Telugu
 Traditional Chinese
 Uyghur
 Vietnamese


Overview of changes from GLib 2.31.16 to 2.31.18
================================================

* GDBusProxy has now a flag, G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
  which can be set to make GDBus automatically reload
  changed properties even if the propertychanged signal
  does not contain the new values.

* GApplication puts non-unique applications on the bus

* GApplication now has g_application_quit()

* g_async_queue_timed_pop has been deprecated in favor of
  the new g_async_queue_timeout_pop, which uses relative
  delays in microseconds instead of a GTimeVal.

* a huge number of API documentation fixes

* Bugs fixed:
 647986 put non-unique apps on D-Bus
 658484 vpn connection vs NetworkSecretDialog
 664237 GDateTime falls back to UTC if TZ is set
 669329 gthread-win32: update for g_get_monotonic_time() changes
 669330 glocalfile: fix error code when opening a directory on win32
 669372 glib/tests memory leaks.
 669412 mem leak in g_environ_unsetenv
 669538 Fix compilation of glib-compile-resources.c on Windows
 669544 gdbus-codegen example introspection XML is not complete
 669595 glib-mkenums: fix handling of forward enum declarations
 669670 gasyncqueue: don't use deprecated g_cond_timed_wait()
 669671 gobject: use #pragmas to avoid deprecated function warnings
 669689 Retrieve cwd and environ in local GApplicationCommandLine
 669810 socket/win32: flush pending read before signaling HUP
 669865 g_regex_fetch()
 670085 memory leak in g_output_stream_write_async
 670138 gbytes.h is missing the G_BEGIN/END_DECL guards
 670485 Simplify session API (shared bug with gtk+)

* Updated translations:
 Belarusian
 Danish
 Galician
 Serbian
 Telugu
 Hebrew


Overview of changes from GLib 2.31.14 to 2.31.16
================================================

* GResource:
 - The resource compiler can now convert pngs into
   pixel data that can be used without parsing at runtime
   (requires gdk-pixbuf-pixdata to be present)

* Bugs fixed:
 669123 resource compiler: failing to-pixdata should...
 669173 resource: fix xml preprocess entity handling
 669224 Cross-compilation broken by data-to-c
 669253 gsettings set buggy on array values
 669334 fix memory leak in bookmark file parser

* Translation updates:
 Norwegian bokmål
 Spanish


Overview of changes from GLib 2.31.12 to 2.31.14
================================================

* GResource:
 - GLib now includes a commandline utility, gresource,
   to explore resources in ELF files
 - The resource compiler can now optionally strip
   ignorable whitespace from XML resources
 - The resource compiler can now generate build dependencies
 - The resource compiler will now autoselect output formats

* GApplication:
 - The menu markup parser API has been dropped, the
   menu XML support lives in GTK+ now

* GValueArray has been deprecated

* Bugs fixed:
 626258 N-ary Trees - 'nodes' can be inserted before and after...
 634232 Core Dump / Aborted using g_key_file_to_data
 639099 schema compiler chokes on valid schema
 667228 Deprecate GValueArray
 667243 Add an element clear function to GArray
 667929 glib-compile-resources: xml resources doesn't need to...
 668250 g_date_time_format() produces a non-UTF8 string
 668468 'IP_ADD_SOURCE_MEMBERSHIP' undeclared
 668532 resources: add dependency generator to the resource compiler
 668539 resources: compiler should autoselect output format...
 668561 gresource-tool not internationalized
 668572 glib_cv_g_atomic_lock_free config.cache setting not honored...
 668650 GRealArray->clear_func should be initialized
 668756 GKeyFile: allow loading from empty strings
 668857 fix couple of typos in comments
 669024 goption: implement platform_get_argv0() for OpenBSD

* Updated translations:
 Galician
 Norwegian bokmål
 Spanish
 Traditional Chinese

Overview of changes from GLib 2.31.10 to 2.31.12
================================================

* GApplication:
 - Drop support for exporting menus - this functionality
   will be provided in GtkApplication
 - Add a way to create actions that change settings

* Bugs fixed:
 629503 Add async versions of g_unix_connection_{receive,send}_credentials
 656301 glib-compile-schemas should not create an empty file
 668071 mingw-gcc build fails on gio/gsocket.[c|h]
 668118 the big appmenu switcheroo
 668158 base64 encode and line termination
 668163 GDBusConnection: note that exit-on-close is sometimes TRUE
 668269 gsignal: add g_signal_handlers_disconnect_by_data
 668279 create GAction from GSettings

* Translation updates:
 Norwegian bokmål


Overview of changes from GLib 2.31.8 to 2.31.10
===============================================

* GResource:
 - A new facility to allow linking data files into binaries
   and make them available as resources
 - Resources are compiled using glib-compile-resources
 - GIO supports resource:/// uris to access resources

* Bugs fixed:
 619126 Missing dependency libs
 658315 g_key_file_get_keys() should set length to 0...
 660371 is it ever valid to have 0 as a GError domain?
 666700 Add some missing (allow-none) annotations
 667375 GAsyncInitable subclassing (and async subclassing...
 667447 Missing many introspection annotations
 667790 Protect call to pthread_condattr_setclock with define
 667938 wrong gtypes generated for empty flags enums

* Translation updates:
 Hebrew
 Spanish


Overview of changes from GLib 2.31.6 to 2.31.8
==============================================

* GObject:
 - The type checks for overriding properties have been loosened.
   In particular, it is now possible to add the CONSTRUCT flag
   to an overridden property
 - GWeakRef is a new API for weak references; unlike g_object_weak_ref
   and g_object_add_weak_pointer, it is thread-safe.

* GHashTable has grown new convenience api for use as a set:
  g_hash_table_add, g_hash_table_contains

* GSocketConnection has gained API for managing connection status

* GSettings: a native OS X backend has been added, under the
  name 'nexstep'

* Bugs fixed
 455640 Something fishy with GRegex and unicode
 548954 weak references are not threadsafe
 625751 Add G_FILE_ATTRIBUTE_FILESYSTEM_USED
 658871 gbacktrace: g_get_prgname () isn't called for a NULL argu...
 664069 gvariant: Never break out of g_variant_iter_loop
 664830 g_strescape doesn't natively handle \v (vertical tab)
 665211 GDBusConnection singleton access can race with disposal
 665805 Add GSocketClient::action, for tracking socket client status
 666116 some tests provoke undefined behaviour, which is undesira...
 666422 Unreachable code in gio gnetworkmonitornetlink.c
 666551 Crash in g_thread_xp_SleepConditionVariableSRW
 666595 menu parser disallows id='' on submenu and section
 666615 loosen property override flag restrictions
 666616 gobject: fix property override type checks
 666803 g_utf8_validate() fails to validate strings with known size
 666804 g_ateaxit deprecation warning in devhelp points in wrong ...
 666951 g_mkdtemp: Since version incorrect in docs
 666978 Fails to compile glib applications with ISO C90 compiler
 667098 ginetaddressmask leaks its address property
 667225 GSocket: add missing type checks to public methods
 667226 GSocket: fix an error return value
 667279 Sometimes crashes when launching commandline-crea...
 667285 Wrong keyname listed in documentation for g_deskt...
 667331 Use g_queue_free_full() convenience function
 667420 GHashTable GDB pretty printing is broken

* Updated translations
 Belarusian
 Bulgarian
 Hebrew
 Norwegian bokmål
 Norwegian Nynorsk
 Spanish
 Vietnamese


Overview of changes from GLib 2.31.4 to 2.31.6
==============================================

* GApplication no longer has APIs for setting menus.  Those have been
  moved to GtkApplication.

* the GActionGroup import/export functionality has been decoupled from
  GApplication by the introduction of a new interface for the purpose of
  handling platform data: GRemoteActionGroup.  This allows Gtk to
  properly deal with platform data (and gdk threads) on window actions.

* lots of documentation improvements

* bug fixes and a huge number of memory leak fixes

* the test suite now passes on ARM and some of the GDBus testcase hangs
  we've been seeing have been resolved (although others could remain)

* g_bytes_get_data() API changed: now includes 'size' out parameter

* new g_queue_free_full() API similar to g_[s]list_free_full()

* desktop files: use standard "Keywords" now, not "X-GNOME-Keywords"

* gsettings commandline tool now has --schemadir option for schemas not
  installed in the usual place (ie: as part of plugins)

* Bugs fixed:
 643736 GApplication doesn't emit dbus signals on action updates
 657433 g_queue_free_full() missing
 664699 glib: documentation fixes
 665737 acquire/release gdk threads lock on incoming dbus
 665879 GBytes: add a size argument to g_bytes_get_data
 666113 various leaks in GLib, GIO are visible in the regression tests
 666115 various tests leak memory, obscuring real leaks in the library
 666145 Doc could be more explicite that g_thread_init calls can be droped
 666173 Configure warning - linux/netlink.h usability... no
 666296 Race condition in g_thread_xp_get_srwlock
 666415 Settings tools should allow specifying a schema directory 

* Translations updated:
 French
 Spanish

Overview of changes from GLib 2.31.2 to 2.31.4
==============================================

* EXPERIMENTAL: Menu support has been added to GApplication.  Menus
  are exported on the bus, alongside the actions that are already there.
  There have also been many related improvements to action group
  functionality.

  These new APIs are subject to changes in the coming releases.  In
  particular, it seems somewhat likely that the APIs for registering
  menubars may change in order to accommodate windows with different
  types of menubars.

* GDBusConnection previously directly dispatched destroy notifies when
  unregistering objects if the current main context was the same context
  the object was exported on.  It now unconditionally dispatches these
  through an idle on the context.

* Clean up Requires in pc files. Linking against GIO no
  longer drags in gmodule. This may require dependency
  fixes here and there.

* Introduce GBytes, a data type for immutable, fixed-size
  byte sequences. This makes the pre-existing GBuffer
  API available outside GLib

* GDBusInterfaceSkeleton can now be exported on multiple
  connections

* Bugs fixed:
 600161 Do not use static GTypeInfo and GInterfaceInfo
 640077 GFileMonitor: Always send CHANGES_DONE_HINT after a move...
 641720 Misleading definition for local_command_line() in GApplic...
 648516 Little comment error and 2 useless lines of code
 651997 Dummy backend for gapplication
 652560 Test for g_ascii_strtod is failing
 662208 failure to initialize a GInitable should be considered...
 662718 GDBusInterfaceSkeleton should be able to export on multi...
 663291 GBytes: Immutable, refcounted sequence of bytes
 664406 Need context for a proper translation
 664455 Build fixes for GLib GIT master (2.31.x)
 664558 GDBusWorker.frozen has a value > 1 in a gboolean
 664559 sys/wait.h not available on windows
 664617 gdbus segfault error 4 in libgio-2.0.so.0.3102.0
 664635 GMemory{Out,In}putStream _async functions break sub-class...
 664809 Add command line option to gtester to allow skipping tests
 665067 cryptic assertion failure if nonsensical flag combinations...
 665184 Check ref. count before reffing/unreffing
 665298 Add 'Requires.private: libpcre' to glib-2.0.pc
 665391 update documentation around mainloops
 665607 ./configure is there for fiddling with cross-compile enviro...
 665634 g_dbus_node_info_new_for_xml() errors on unknown attributes...
 665685 Add a #define for the max length of a Unicode decomposition
 665733 GDBusConnection holds lock while calling destroynotify

* Translation updates:
 Norwegian bokmål
 Spanish


Overview of changes from GLib 2.31.0 to 2.31.2
==============================================

* Monotonic time is now properly supported on Windows

* glib-mkenums: fix @ENUMPREFIX@ with /*< underscore_name=... >*/

* EXPERIMENTAL: introduce new GSettingsSchema and GSettingsSchemaSource
  APIs for the convenience of plugin system authors and those who wish
  to introspect the contents of schemas.  This API may change.

* Improve the performance of GObject property notifies.

* GDBus:
 - fix a race when unowning a name immediately after owning it
 - thread safety improvements on GDBusConnection
 - fixes for exit-on-close functionality

* Deprecations:
 - add G_SIGNAL_DEPRECATED
 - don't use G_DISABLE_DEPRECATED masking for functions anymore

* docs
 - tmpl/ is finally dead for glib

* GIO:
 - GInetAddressMask: new type for internet address range matching
 - various GIO file and stream fixes
 - improvements to attribute and fileinfo handling

Overview of changes from GLib 2.29/2.30 to 2.31.0
=================================================

This release contains a huge number of changes (500 commits worth).  The
list below attempts to summarise, but not every change is listed.

* Major changes to threading and synchronisation
 - threading is now always enabled in GLib
 - support for custom thread implementations (including our own internal
   support for errorcheck mutexes) has been removed
 - a whole lot of dead code (to deal with the non-threaded case) has
   been ripped out.  This includes the racy path of GMainContext that
   caused deadlocks with respect to child process exits in
   single-threaded programs (such as gtester).
 - libgthread is now an empty shell and g_thread_init() is no longer
   required (and has been deprecated)
 - GMutex and GCond can now be statically allocated without explicit
   initialisation.  Dynamic allocation for these types is deprecated.
 - new types GRecMutex and GRWLock can also be statically allocated
   without explicit initialisation.
 - GPrivate can now be statically allocated and has an improved API.
   Dynamic allocation of GPrivate is deprecated.
 - GStaticMutex, GStaticRecMutex, GStaticRwLock, GStaticPrivate are
   deprecated.
 - GCond now uses monotonic time internally and a new API takes
   monotonic time for timed waits, deprecating the wallclock API
 - removal of the insane macro indirection used in the previous
   implementation of threading and synchronisation APIs
 - use SRWLock and CONDITION_VARIABLE APIs when available on Windows
   (Vista and later) and emulate them on XP
 - leaks of G(Static)Private-allocated data on some cases of thread exit
   have been fixed
 - simplified new thread creation API with the old API deprecated.  The
   concept of joinability has disappeared (all threads are joinable) as
   have priority levels, 'bound'ness (ie: kernel vs. userspace threads)
   and ability to manipulate the stack size.
 - GThread is now a refcounted type
 - other implementation details changed

* Move headers for some deprecated functionality to a separate
  deprecated/ directory.

* New support for attribute-based deprecations to issue compiler
  warnings instead of breaking the build and/or giving warnings about
  implicit declarations (and possibly miscompiling).

* GCache has been deprecated (after its last use was removed from our
  platform over a year ago).

* It is no longer possible to include individual headers (like
  "ghash.h") -- you must #include <glib.h>.

* The misguided experiment of allowing the program to stumble along with
  missing GSettings schemas is now over -- the abort is back.

* Clarify that fork() is not valid while using GMainContext.  This is
  because the internal resources of the GMainContext end up being shared
  by both processes.  We had an assert here but it was breaking existing
  (valid) use cases as well, so it has been removed for now.

* GApplication
  - add ::shutdown signal as logical dual to ::startup
  - don't use a GMainLoop: iterate the GMainContext directly (improves
    quit logic)

* Several portability fixes for Windows, OpenBSD, Solaris

* Add new GValue API to specifically deal in signed chars (in case the
  platform defines 'char' as unsigned)

* some new API to mitigate the problems associated with calling setenv()
  in a multi-threaded program

* Use CLOCK_MONOTONIC unconditionally if the libc has support at compile
  time (ie: stop checking for kernel support at runtime).

* pkg-config files:
  - drop -uninstalled variants
  - remove gobject dependency on gthread

* New macro G_ATOMIC_LOCK_FREE is defined if the atomic operations are
  implemented without use of a mutex.  Cleaned up atomic-related
  compilation issues with mingw compilers on win32 systems.

* SOCKS proxy and resolver improvements

* Fix the spelling of G_IO_FLAG_IS_WRITABLE (was WRITEABLE) and
  introduce a macro for backwards compatibility.

* GDBus:
  - many code generation updates and improvements
  - some race condition fixes, including testcase hangs

* GVariant:
  - new g_variant_new_from_fixed_array() API
  - substantial docs improvements/clarifications

* GKeyFile is now refcounted and boxed

* mount monitoring is now based on /proc/mounts (where available)
  instead of mtab

* new macros G_SOURCE_CONTINUE and G_SOURCE_REMOVE for returning from
  GSourceFunc (so you don't have to remember what TRUE and FALSE mean)

* use xlocale functions where available to avoid too much heavy lifting
  in functions like g_ascii_strtod()

* GMappedFile can now be created from an fd

* error message strings grammar/i18n fixes

* many docs updates

* Partial list of bugs closed:
 70598  Unify GStaticMutex and GMutex.
 320888 optimization for g_main_context_wakeup
 398418 GChildWatch race condition?
 527214 g_timer_elapsed() returns random values
 580505 add a way to set/get name for a thread
 583511 race condition means g_main_loop_quit() does not work
 590808 GKeyFile should have a refcount and a boxed type in GObject
 592715 Document that g_str_hash() and g_int_hash() are not NULL safe
 631413 Add macros for GSourceFunc return values
 632049 not immediately clear what g_variant_get_fixed_array expects
 640212 "Error stating file" is not a friendly message
 640293 Use xlocale functions to implement g_ascii_strtod()
 640975 Check that error exists before trying to set it
 643934 GApplication lacking a logical dual for the ::startup signal
 651268 assertion failed in GDBus worker thread
 653987 g_key_file_get_integer cannot interpret trailing spaces
 654412 Documentation for g_variant_get_child_value unclear
 654563 info capplet: Failed to calculate disk space
 655366 missing GSettings schemas lead to obscure crashes
 656621 g_spawn_*() calls executables in current directory
 656679 [gi] Add two annotations to gio
 657992 Add glib__private__() API to share between glib,gio
 658188 _set_as_last_used_for_type generates a broken mimeapps.list
 658206 gsocks5proxy.c has invalid gettext use
 658207 glib-compile-schemas says "can not"
 658558 simpleaction: Fix documentation of :enabled
 658683 clean up charset/language threading issues
 658692 add introspection annotations to g_time_val_from_iso8601()
 658715 Duplicite strings
 658769 Invalid reuse of GError in GThreadedResolver
 658806 sign error in string hash implementation
 658976 gdbus-codegen's C namespace option needs to support Ugly_Case
 659070 gdbus-codegen generated code segfaults when property changes
 659082 gdbus-codegen: Single letter namespaces get dropped from names
 659212 GMappedFile should fail on non-regular files
 659324 _SPLICE_CLOSE_TARGET doesn't mark the output stream as closed
 659423 Use adaptive mutexes when available
 659427 Move deprecated code to a separate directory
 659646 gdbus-codegen produce code that warnings at build
 659690 Possible build warning in code generated by gdbus-codegen
 659699 property name collision when generating code for "Connection"
 659754 Add API to GMappedFile that allows to pass FD
 659838 incorrect types in introspection for g_object_bind_property
 659866 pthread_rwlock_t requires defined __USE_UNIX98
 659870 gvalue: Fix signedness of g_value_get_char()
 659889 glib-2.29.92/gio-2.0.pc.in has a wrong line.
 659916 GObject size of 64K is not actively enforced
 659920 Missing setter for read/write property 'closed' of GIOStream
 659923 Add g_variant_new_fixed_array() function
 660013 Remove old g_atomic configure cruft
 660096 glib/rwlock tests failure (tests asserted)
 660130 Possible loss of user data when updating mimeapps.list
 660147 tracker causes g_critical in "gsettings list-recursively"
 660413 Make G_ASSERT_STATIC work with clang
 660498 Generated test code fails when the codegen changes
 660511 Use /proc/mounts for monitoring mounts, not /etc/mtab
 660536 Expose options for /etc/fstab entries
 660635 Deprecate g_thread_foreach
 660637 Pending dbus method calls not canceled on connection loss
 660739 kill off g_{mutex,cond}_{new,free}()
 660740 make GThread more standard
 660741 g_cond_timedwait is a disaster
 660743 macro wrappers for g_once_init_enter/leave
 660744 finish killing g_thread_init()
 660745 GPrivate leaks on Windows
 660791 [gio] Improve doc for g_file_make_directory_with_parents()
 660843 asyncqueue-test is broken
 660849 Remove cruft from g_strerror and g_strsignal
 660886 GDBusProxy: don't drop/complain about unknown props/signals
 660887 g_slice_set_config() is broken
 660994 Add g_main_context_ref_thread_default()
 661255 gio: enable test_peer regression test for OpenBSD
 661257 giomodules.c uses ":" instead of G_SEARCHPATH_SEPARATOR_S
 661318 tests use pthread without appropriate compiler/linker flags
 661421 Applications fail to initialize on GNU Hurd - commit
 661438 Implement G_GNUC_DEPRECATED/G_GNUC_DEPRECATED_FOR on Visual C++
 661711 Sorting keys for GDrive, GVolume and GMount instances
 661763 desktop-app-info: Add support for X-GNOME-Keywords
 661896 /gdbus/connection/life-cycle is racy
 661914 Gstreamer/Totem locks up
 662100 regression: g_dbus_connection_close() triggers exit-on-close logic

* Translations updates:
 Belarusian 
 Brazilian Portuguese
 British English 
 Bulgarian 
 Catalan 
 Catalan (Valencian)
 Czech 
 Danish 
 Esperanto
 French 
 Gujarati
 Hebrew 
 Hungarian 
 Italian 
 Japanese
 Lithuanian
 Norwegian bokmål
 Oriya
 Polish 
 Russian 
 Serbian
 Simplified Chinese
 Slovak 
 Slovenian
 Spanish 
 Tamil
 Vietnamese

Overview of changes from GLib 2.29.18 to 2.29.90
================================================

* API/ABI changes:
 - unix signal watches now match the API of all of the other sources
 - revert the addition of g_date_time_source_new () from last release

* networking and other fixes for Solaris
 - we no longer support symbolic port names (ie: from /etc/services)
 - check if -lsocket is needed
 - fix g_socket_details_from_fd()
 - avoid getmntinfo
 - fix some harmless warnings

* GDateTime improvements:
 - generally improved standards compliance (with C99)
 - support C99-specified format strings: %g, %G, %V, %c, %C, %w
 - consult the locale for the preferred 12-hour time format (%r)
 - drop support for non-standard %N and broken %W
 - better support for formatting non-POSIX (eg: Arabic) numerals
 - locale-related test case fixups, and fix some leaks

* GTlsInteraction: add interaction method invocation guarantees

* gdbus-codegen: post-process all interfaces when parsing >1 file

* make GMainLoop, GMainContext and GSource boxed types

* fix a race condition in the first use of g_get_monotonic_time()

* lots gtk-doc cleanups

* better intltool compatibility when generating pot file

* avoid GCC-specific compiler options when not using GCC

* Translation updates:
 Belarusian
 Brazilian Portuguese
 Canadian English
 Galician
 Indonesian
 Korean
 Lithuanian
 Norwegian bokmål
 Portuguese
 Spanish
 Swedish

Overview of changes from GLib 2.29.16 to 2.29.18
================================================

* GDateTime is now respecting LC_TIME when formatting

* GTimeZoneMonitor has been removed again

* A new API for wallclock functionality has been added:
  g_date_time_source_new(). This API is still experimental
  and may be changed or removed before 2.30.

* Bugs fixed:
 628904 Add credential support for FreeBSD and fix a socket issue
 650763 gdbus-codegen is broken with python 2.7
 655129 GDateTime could provide api for implementing wall clocks
 656341 gtlsconsoleinteraction.c uses getpass() which isn't avail...
 656387 GCancellable can be used concurrently
 656443 Make GTlsInteraction ask_password cancellable
 656675 void functions should not return in glib 2.29.16
 656772 g_variant_compare for uint64 incorrect
 656914 Load GIO_EXTRA_MODULES first, and ignore duplicates
 657083 The header langinfo.h is not available on all systems
 657084 gfileutils: fix docs/annotations for temp file methods
 657138 Some files missing in POTFILES.in
 657206 GInputStream leaked in g_file_icon_load_async()
 657243 g_cancellable_set_error_if_cancelled() documentation
 657274 Use detected PYTHON variable as shebang for gdbus-codegen
 657336 Speling fixes for glib found with codespell
 657452 plural forms needed
 657454 Translation comment needed
 657540 Print out file:// URL to coverage HTML report after building
 657593 g_test_trap_fork calls close(-1)
 646082 Addresses from GSocket should be normalized before returning
 657517 fix gio/tests/gdbus-peer on bsd

* Translation updates:
 Brazilian Portuguese
 Galician
 Norwegian bokmål
 Punjabi
 Russian
 Serbian
 Spanish
 Swedish
 Traditional Chinese
 Uighur


Overview of changes from GLib 2.29.14 to 2.29.16
================================================

* GTlsDatabase: an abstract class that provides support
  or certificate and key lookup. An implementation will
  be provided in glib-networking

* GHmac: Support or HMAC digests

* Misc new API:
 - g_ptr_array_add_full: creates a GPtrArray with
   a preallocated size and a destroy function
 - g_desktop_app_info_get_show_in: checks if a GDesktopAppInfo
   should be shown in a given desktop environment
 - g_mkdtemp, g_mkdtemp_full, g_dir_make_tmp: create
   temporary directories

* Unify thread wakeup implementations of GMainContext
  and GCancellable, and use eventfd for it when available

* Show mounts in $XDG_USER_DIR in addition to /media and $HOME

* Bugs fixed:
 636572 GTlsCertificateDB
 644601 Some tests need a running dbus session
 652284 deal with small key lengths
 652827 glib-2.29.8 no longer builds with mingw.org's toolchain
 653063 PEM parser fails parsing private key when put first
 654078 Fail to static linking with Glib library
 654450 New functions: g_ptr_array_new_full()
 654793 Add G_VALUE_INIT
 655044 GDesktopAppInfo: Add g_desktop_app_info_get_show_in()
 655148 gdbusconnection is broken when compiling with mingw
 655241 glocalfile.c no longer compiles with MinGW GCC
 655598 g_cancellable_get_fd: silently return -1 for NULL cancellable
 655664 gdbus should not abort if no dbus session is available
 655769 Use ZLIB_CFLAGS when compiling gio
 656031 Improve GVariant annotations
 656048 glib-codegen requires Python >= 2.5
 656151 configure test logic inverted, doesn't match comments
 656152 GCC only syntax used, yet other compilers allowed by configure.
 656162 allow use of lcov 1.9 for coverage
 656282 GDBusProxy: uninitialized local variables can be freed
 656283 Failing tls connection cause assertion
 118563 Add g_mkdtemp in the spirit of g_mkstemp
 636405 Add g_return_if_fail() to g_settings_bind_with_mapping()
 656039 race condition between GDBusProxy signals and public API
 656492 g_io_channel_new_file failure (open(2) behavior wrt POSIX)

* Translation updates:
 Bulgarian
 Esperanto
 French
 Galician
 German
 Hebrew
 Indonesian
 Italian
 Norwegian bokmål
 Russian
 Spanish
 Swedish


Overview of changes from GLib 2.29.12 to 2.29.14
================================================

* Unicode improvements
 - add g_unicode_script_{to,from}_iso15924
 - add G_UNICODE_SPACING_MARK define
 - more normalisation improvements
 - stop using deprecated g_unicode_canonical_decomposition()

* GParamSpec:
 - mark the 'name' field as 'const' and add a comment to the header to
   help avoid future problems caused by bad hacks

* Merge some (modified) patches from Debian:
 - 03_blacklist-directories.patch
   - add some blacklisted mount directories
 - 60_wait-longer-for-threads-to-die.patch
   - sleep longer in a test case, if needed to avoid failing

* Units policy change: prefer use of SI units
 - deprecate g_format_size_for_display, add g_format_size(_full)

* GSettings: don't call g_error() when the schema is missing

* GVariant support for arrays of object paths:
 - new g_variant_{new,get,dup}_objv API
 - support for g_variant_{new,get} '^ao' and '^a&o' similar to '^as'

* GDBus:
 - use new improved array-of-objects support and pass 'ao' as char**
   instead of GVariant*
 - improve handling of 'h' type (Unix file descriptor index)

* GIO:
 - fix compilation without USE_STATFS and USE_STATVFS

* Documentation fixes

* Bugs fixed:
 622921 Migrate from dbus-glib to glib's GDBus
 648271 Add g_unicode_script_to_iso15924()
 654948 Stop using deprecated g_unicode_canonical_decomposition()
 654988 g_atomic_int_add should document behaviour change
 655025 #define G_UNICODE_SPACING_MARK G_UNICODE_COMBINING_MARK
 655076 normalization misses some Full_Composition_Exclusion=True. 

* Translations updated:
 Spanish

Overview of changes from GLib 2.29.10 to 2.29.12
================================================

* Add new API to do Unicode (de-)composition in atomic steps,
  for use in Harfbuzz.

* Bugs fixed:
 615895 (indirectly) support non-NULL-terminated regexes in GRegex
 617949 glib trunk fails to compile on Solaris w/ Studio 12...
 620423 Document the possibility to unset attributes
 627974 Floating reference headaches
 644687 Not finding cross-links in current doc set
 649246 g_output_stream_splice() cannot be used on 32-bit machines...
 653841 a helper script to build glib from git master on win32
 653935 g_slist_free_full/g_list_free_full iterates twice in the list
 654017 tests: fix glib_translations_work() in gsettings unit test
 654085 Don't needlessly use "echo -e" when creating .def files
 654195 Add g_unichar_compose() and g_unichar_decompose()
 654232 GCancellable eventfd problems
 654394 suspicious use of floating references in GDBusInterfaceSkeleton
 654536 GSettings: lift key name length restriction to 64
 654627 GParamSpec: intern property names
 654651 Better g_unicode_canonical_decomposition()
 654917 Make g_cclosure_marshal_generic the default signal handler

* Translation updates:
 Belarusian
 Finnish
 Korean
 Latvian
 Lithuanian
 Norwegian bokmål
 Turkish


Overview of changes from GLib 2.29.8 to 2.29.10
===============================================

* New features:
 - g_desktop_app_info_get_nodisplay: a function that is required
   to port gnome-menus to GDesktopAppInfo
 - g_hash_Table_iter_replace: new function to replace a value
   while iterating over a hash table
 - g_utf8_substring: convenience API to extract substrings from
   UTF-8 strings
 - g_action_group_add_entries: convenience API for creating lots
   of actions quickly
 - Use eventfd instead of pipes for waking up main contexts and
   for cancellation when available
 - GMatchInfo is now a refcounted boxed type

* API changes in GAction:
 - the 'set_state' entry in the GActionInterface vtable has been
   renamed to 'change_state
 - g_action_set_state has been renamed to g_action_change_state
 - the 'state' property has been changed to read-only
 - GSimpleAction can no longer be subclassed

* Bug fixes
 647796 g_variant_new_variant is not marked as constructor
 652072 gmain: make use of signalfd()
 652168 Crosscompiling Fails if build<=2.24 and host >2.24
 652750 make dist fails
 652758 GDataInputStream: Clarify g_data_input_stream_read_line docs...
 652822 Add a g_hash_table_iter_replace
 652897 tiny docs clarification for g_utf8_to_ucs4_fast
 653140 gmain: use Linux eventfd() for main context wake up
 653429 drop AM_MAINTAINER_MODE or enable it by default
 653484 GAsyncCallbacks should default to allow-none
        Add missing fundamental types to the generic marshaller

* Translation updates
 Belarusian
 Galician
 Russian

Overview of changes from GLib 2.29.6 to 2.29.8
==============================================

* Bug fixes
 646608 export_symbols variable for gio dynamic library is wrong
 646635 Fix introspection of GLib
 647930 Documentation: GDataInputStream _read_upto() version
 651745 Switch to _ prefixing rather than G_GNUC_INTERNAL
 651920 Improve qsort_r detection
 651959 gbitlock: "asm goto" is not available in gcc < 4.5
 651998 gdbus-codegen: Use relative Python imports
 652000 Fix for gatomic.c on Windows/MSVC
 652002 Proposal to clean up gvaluetransform.c for MSVC
 652025 g_dbus_connection_register_object: error is not set...
 652081 Typos in a GBinding warning message
 652197 Improper handling of double values in GDBusMessage
        Fix a deadlock in gobject finalization

* Translation updates:
 Czech
 Galician
 German
 Hebrew
 Norwegian bokmål
 Spanish
 Uighur


Overview of changes from GLib 2.29.4 to 2.29.6
==============================================

* Atomic operations have been rewritten from scratch to make use
  of gcc builtins where possible. As a side-effect of this, calls
  to g_atomic_ API with explicit casts may now be problematic; if
  that happens to you, try first to remove the casts. Another
  side-effect of the rewrite is that g_atomic_int_exchange_and_add
  has been deprecated in favor of g_atomic_int_add.

* A full set of atomic operations on pointers has been added,
  including bit locks in pointer-size locations.

* Access to quarks is now lockless

* GObject data scalability has been greatly improved

* g_data_time_format now supports alternative digits and padding

* Introspection improvements:
 - Add a boxed type for GVariantBuilder
 - Annotation fixes in GDBus, GVariant, g_base64_

* Bugs fixed:
 502560 g_rand_double_range returns 'inf'
 612729 g_mkdir_with_parents can fail if the directory already exists
 617491 g_once() implementation is inefficient
 619418 Add a performance test for UTF-8 decoding functions
 619435 Make g_utf8_to_ucs4_fast() yet faster
 626549 G_STATIC_ASSERT_EXPR
 631231 bitlock: Fix detection and usage of futexes with Bionic
 632294 g_queue_remove() should return a boolean
 640518 GMainLoop has quadratic complexity when all pollfd's...
 642026 Race condition in g_static_private_free
 646635 Fix introspection of GLib
 648678 g_date_time_format(): support %O flags for localized numbers
 649480 Use MSG_CMSG_CLOEXEC in recvmsg in gio/gsocket.c
 649506 GTestFunc et al lacking Since tag
 649657 Don't return gboolean for functions that throw
 649775 glib-gio-gdbuscodegen-Makefile.patch
 649915 gsettings accepts unquoted strings longer than two characters
 649973 gthread: build unix tests only on unix
 649988 gdbus-codegen: Drop dependency on argparse
 650078 forkbomb building glib/tests/protocol
 650211 Optimization in key file parsing
 650236 Application over DBus implements action state incorrectly
 650345 g_key_file_has_key_full: New function to fix g_key_file_has_key...
 650458 reduce overhead in g_object_set/get_data
 650459 hash table consistency while calling destroy notify funcs
 650688 enforce rules about hash table modification
 650823 expand the set of atomic ops
 650874 codegen chokes on docs
 650882 use stdout instead of stderr for informational messages
 650884 fix compilation with gcc2
 650885 implement glib credentials on OpenBSD (hackish)
 650935 G_GNUC_MAY_ALIAS and atomic ops
 651009 minor documentation fix
 651034 Regarding g_cond_wait after g_thread_pool_push in gthreadedresolver
 651133 race condition in GDBusConnection's emit_signal_instance_in_idle_cb
 651141 hashtable infinite loop
 651219 fix path to true(1) on OpenBSD
 651223 Fix some compile warnings on OpenBSD
 651327 Minor fixes for the gsocket API
 651467 Add pointer sized bitlocks
 651650 gdbus: Avoid busy wait loop
 651725 gmain: Cleanups and a new test case
 651745 Switch to _ prefixing rather than G_GNUC_INTERNAL

* Updated translations:
 Catalan (Valencian)
 Esperanto
 Hebrew
 Hungarian
 Russian
 Spanish


Overview of changes from GLib 2.29.2 to 2.29.4
==============================================

* GDBus:
 - Includes several new types to support modeling D-Bus
   objects and interfaces more fully, and also introduces
   an 'object manager' pattern:
   GDBusInterface, GDBusObject, GDBusObjectManager
   These interfaces have client-side implementations:
   GDBusProxy, GDBusObjectProxy, GDBusObjectManagerClient
   And server-side implementations:
   GDBusInterfaceSkeleton, GDBusObjectSkeleton, GDBusObjectManagerServer
 - The new gdbus-codegen utility uses these new classes
   to generate C code and documentation from D-Bus interface
   descriptions in XML

* GTest:
 - There is now a g_test_fail() function to mark
   tests as failed

* GDesktopAppInfo
 - Now has a binding-friendly filename property
 - Other new API to more fully expose desktop file contents:
   g_desktop_app_info_get_categories(),
   g_desktop_app_info_get_generic_name()

* GHashTable:
 - Several optimizations to reduce space consumption of
   large hash tables, in particular tables that are used
   to store sets.

* Unix-specific APIs:
  GLib now installs a separate header, glib-unix.h, that is
  meant to collect Unix-specific APIs. For now, it contains
  g_unix_open_pipe(), g_unix_set_fd_non_blocking() for dealing
  with pipes and fds, as well as APIs to create mainloop
  sources which can trigger callbacks on certain Unix
  signals (SIGTERM, SIGHUP, SIGINT).

* Bugs fixed:
 631379 GDBus nonce-tcp test failing
 632631 GLib-CRITICAL **: g_variant_new_string: assertion `g_utf8_validate (string, -1, NULL)' failed
 635694 gdbus aborting due to unauthorized socket in DBUS_SESSION_BUS_ADDRESS
 637561 Crash when using G_DBUS_SERVER_FLAGS_RUN_IN_THREAD
 642935 g_date_time_format() prints wrong value for %z and timezone -0800
 643134 g_dbus_message_copy
 644941 glib-unix: New Unix-specific API
 646013 g_hash_table_remove_all_nodes optimization
 646309 glib cannot be cross-compilled for mingw32
 646435 GTimeZone doesn't seem to be thread-safe
 646957 GIO chained calls don't work with a thread default context
 647594 README link to mailing list is broken
 647602 Cannot connect to remote message bus via TCP
 647746 The GSocketService documentation is incomplete.
 647826 API: gtester: Add g_test_fail()
 647903 GDesktopAppInfo: Add g_desktop_app_info_get_categories()
 648416 g_app_info_create_from_commandline ignores SUPPORTS_STARTUP_NOTIFICATION
 648423 Support G_DEBUG=trap-warnings
 648425 GDesktopAppInfo: Add "filename" property for bindings
 648966 Update g_unichar_iswide and g_unichar_iswide_cjk

* Updated translations
 Norwegian bokmål
 Spanish
 Turkish
 Uighur


Overview of Changes from GLib 2.28.0 to 2.29.2
==============================================

* GApplication
 - The documentation has been enhanced and clarified
 - An opt-out for uniqueness has been added: G_APPLICATION_NON_UNIQUE
 - GApplication now syncs settings before g_application_run() returns

* GDBus
 - Interface lookups are now happening in constant time
 - Signature checking and handling of various unexpected
   situations has been improved

* GVariant
 - The format accepted by the GVariant parser has beend documented
 - GVariant accepts G_VARIANT_TYPE_VARDICT for a{sv}

* GDateTime:
 - The return value of g_datetime_compare() has been fixed to
   match strcmp() semantics
 - In order to handle problems with changing timezones, a GTimeZoneMonitor
   has been added to GIO, and g_time_zone_refresh_local() can be
   called to update the cached information about the local timezone

* GOption now uses /proc/self/cmdline to set the program name instead
  and only falls back to "<unknown>" if that is unavailable

* GSettings:
 - The schema compiler now warns about references to non-existing schemas

* Commandline utilities are now fully translated

* Signals can now indicate that collecting their arguments must
  always happen, even in the absence of connected signal handlers,
  using the G_SIGNAL_MUST_COLLECT flag.

* Bugs fixed:
 635099 Memory leak in gdbus introspection when parsing xml
 640489 $ and ^ do not match lines if G_REGEX_MULTILINE|G_R...
 642042 Overriding GDBus org.freedesktop.DBus.Properties im...
 642052 g_timeout_add(_seconds) cannot handle large intervals
 642490 notify_desktop_launch() "g_variant_new_bytestring:...
 613269 g_type_get_qdata() doesn't work as I expected on subtypes
 624943 G_VALUE_NOCOPY_CONTENTS is undocumented
 637738 object_interface_check_properties never actually executes
 638185 GIOCondition should be annotated as "flags"
 639478 GDBusServer's g_dbus_server_new_sync() function should just...
 641755 Add g_settings_get/set_uint() helpers
 641768 dconf gsettings backend silently drops writes if it can't...
 642797 g_app_info_get_default_for_type() broken for subtypes
 642825 Unnecessary assertion failure in g_option_context_parse()
 642944 NULL key lookup using g_hash_table_lookup_extended()
 643074 Incorrect documentation for g_socket_receive() and g_socket...
 643197 g_application_id_is_valid docs imply no valid ids
 643468 GApplication docs: Warn that handling "command-line" means...
 643478 GApplication::local_command_line vfunc documentation seems wrong
 643624 Can g_variant_unref() on an already free'd variant
 643649 g_application_run() should say that argc/argv can be NULL
 643780 shouldn't need to create an action group to use actions...
 643795 g_timeout_add_seconds fires with intervals 1 second longer...
 644309 Program name is not set when using GtkApplication
 644428 Crash in failure section of g_markup_collect_attributes()
 644465 undefined reference to `_usleep'
 644552 g_timeout_add_seconds(1, ...) may have a latency of up to 2...
 644607 Correct internal definition of C_()
 645789 annotations for g_file_*_contents
 646039 g_settings_list_children() returns child that cannot be opened
 646310 Accept range with only min or max
 646420 g_dbus_method_invocation_get_parameters() docs should say...
 646843 occasional abort on autologin
 646985 add G_APPLICATION_NON_UNIQUE flag
 647579 gsettings: Implement reset-recursively
 647600 gsettings description has typo

* Translation updates
 Afrikaans
 Bulgarian
 Bengali India
 British English
 Bulgarian
 Catalan
 Czech
 Danish
 French
 Galician
 German
 Greek
 Gujarati
 Hebrew
 Hungarian
 Italian
 Japanese
 Korean
 Lithuanian
 Polish
 Portuguese
 Romanian
 Serbian
 Simplified Chinese
 Spanish
 Swedish
 Traditional Chinese
 Uighur
 Vietnamese


Overview of Changes from GLib 2.27.93 to 2.28.0
===============================================

* Bugs fixed:
641363 GInitable documentation isn't clear about that finalize...
641395 Add more data about the origin application to the "Lau...
641411 gdesktopappinfo signals lost if it's the session bus...
641477 glib-mkenums uses unportable #! line
641572 Add @EXEEXT@ to pkgconfig binary name
641688 glib installs GSettings.html and gsettings.html

* Translation updates:
 Galician
 Italian
 Korean
 Punjabi


Overview of Changes from GLib 2.27.92 to 2.27.93
================================================

* Bugs fixed:
 637013 gio/gdbusmessage.c fails to compile on Solaris
 640192 Error creating a Gio.Settings object through py...
 640261 Minimum version for external pcre needs to be..
 640262 GActionGroup contains redundant TYPE macros
 640436 Make load_user_special_dirs() resistant to non...
 640695 g_key_file_load_from_file() mishandles a CR-LF...
 640724 can't compile gio due to format string issues
 640725 can't compile tests due to format string issue
 640807 improve GVariant behaviour with invalid pointers
 640823 wrong documentation for g_source_add_child_source

* Translation updates:
 Bulgarian
 Galician
 Hebrew
 Norwegian bokmål
 Spanish
 Traditional Chinese


Overview of Changes from GLib 2.27.91 to 2.27.92
================================================

* Update to Unicode 6.0

* Update PCRE to 8.12

* Bugs fixed:
 637696 g_unix_connection_send_fd() doesn't work
 638872 null settings backend bug
 640042 GtkApplication's warning about not connecting...

* Translation updates:
 Arabic
 Basque
 Estonian
 Greek

Overview of Changes from GLib 2.27.90 to 2.27.91
================================================

* Bugs fixed:
 638838 gdesktopappinfo: Don't crash if we don't have a desktop filename
 638894 Splitting on \s* gives no result
 639064 Update gschema.dtd
 639084 Copy/paste error in GSettings::writable-changed signal
 639177 SIGSEGV for GApplications with G_APPLICATION_IS_SERVICE

* Translation updates:
 Estonian
 Galician
 Indonesian


Overview of Changes from GLib 2.27.5 to 2.27.90
===============================================

* Test reports created by gtester-report can now
  include revision information

* The g_desktop_app_info_launch_* family of functions
  now emit a DBus signal when an application is launched.
  Additionally, there is a new variant
  g_desktop_app_info_launch_uris_as_manager(), which
  gives more control over the launched process.

* The memory and null GSettings backends are now available
  as public API

* g_get_locale_variants() is a new function that returns a
  list of variants of a locale identifier

* Bugs fixed:
 587898 I/O timeouts for GSocket
 606960 gio: Add extension point for informing parties...
 631980 Handle an optional <revision> node in the report...
 634569 Document that g_variant_builder_add_value consumes...
 635998 Make _g_compute_locale_variants public
 636806 Add g_{memory,null}_settings_backend_get_default
 637262 Need a binary DER version of ::accepted-cas
 637544 Skip fsync() on btrfs
 637720 void functions should not return a value.
 637738 object_interface_check_properties never actually...
 637759 GIOChannel: fix a crash in g_io_channel_read_chars()
 637852 Updates to glib.vsprops file for MSVC 2008 builds...
 637858 Updates to test/testglib.c...
 638349 parameter name of g_variant_new_* may conflict...

* Translation updates:
 Hebrew
 Norwegian bokmål
 Simplified Chinese
 Spanish
 Swedish
 Uyghur
 Vietnamese


Overview of Changes from GLib 2.27.4 to 2.27.5
==============================================

* Network support:
 - Add g_tls_certificate_verify() to verify a certificate
 - Add GTlsConnection:use-system-certdb
 - Other TLS api additions

* GIO:
 - Add g_io_stream_splice_async()/_finish() to splice two iostreams
 - Add g_emblemed_icon_clear_emblems() and make GEmblemedIcon derivable
 - Remove GPeriodic; it did not receive the necessary review and
   integration work to declare it stable

* GSequence:
 - New methods g_sequence_lookup() and g_sequence_lookup_iter()

* Bugs fixed:
 617254 Missing g_sequence_lookup
 632544 g_dbus_connection_send_message can not send a locked message...
 633350 g_hostname_to_ascii() ignores non-ascii dots
 634583 Better error reporting for g_variant_parse()
 635007 gsetting enum rule don't work for out-of-srcdir builds
 635626 GDBus message idle can execute while flushes are pending
 636100 Can't read GSettings:backend property
 636305 Typo on g_queue_remove_all() function description
 636311 appinfo: tweak application positioning for content-types
 636351 g_simple_async_result_is_valid lacks a version tag
 636387 gdb autoload files shadow the "dir" builtin
 636673 g_simple_async_report_error_in_idle should allow object...
 637147 Add a "delay-apply" property to GSettings
 637171 emblemedicon: add g_emblemed_icon_clear_emblems()
 637237 gapplication: plug a memory leak

* Translation updates:
 Estonian
 Galician
 Hebrew
 Norwegian bokmål
 Simplified Chinese
 Spanish
 Traditional Chinese
 Vietnamese


Overview of Changes from GLib 2.27.3 to 2.27.4
==============================================

* GIO
 - Mounts are treated as hidden if they have a path element
   that starts with a dot
 - GAppInfo gained API to differentiate between recommended
   and fallback mime handlers
 - g_cancellable_create_source: creates a GSource that triggers
   when the GCancellable is canceled
 - GPollableInput/OutputStream: Interfaces for pollable streams
 - TLS support has landed, with an extension point that is
   implemented in glib-networking

* GLib
 - Mainloop sources can now have 'child sources'
 - g_get_runtime_dir: New function to return the XDG_RUNTIME_DIR

* Bugs fixed:
 530786 GFileMonitor "changed" signal underdocumented
 588189 TLS support for GSocket*
 630357 g_object_new_valist uses uninitialized memory
 630559 typo in public string in gsocks: 'The SOCKSv5 require...
 632445 Documentation refers to removed GNOME 2.0 porting guide
 634239 Child GSources
 634241 Add pollable input/output streams
 634504 allow passing a NULL emblem to g_emblemed_icon_new()
 634613 unsufficient g_get_user_runtime_dir() documentation
 635640 schema should inherit gettext-domain from schemalist
 635768 Protect g_file_monitor_set_rate_limit() against negative...
 635882 Fix the wrong-category schema test
 635187 Wrong type of GVariant received in an action...

* Updated translations:
 Galician
 Italian
 Norwegian bokmål
 Uyghur


Overview of Changes from GLib 2.27.2 to 2.27.3
==============================================

* The GTimeSpec type that was introduced in the 2.27.2 has been
  dropped again in favour of APIs that return microseconds as
  64-bit integer.
  Affected functions:
  g_source_get_time
  g_periodic_unblock
  g_get_monotonic_time
  g_get_real_time
  The similar GTimeVal struct is still around, but its use is
  discouraged.

* GTimer is now using monotonic time unconditionally

* There are some new functions to facilitate error reporting
  in async GIO APIs:
  g_simple_async_result_take_error
  g_simple_async_result_new_take_error
  g_simple_async_report_take_gerror_in_idle

* There is new convenience API to us GVariant dictionaries:
  g_variant_lookup

* It is now possible to delay sending match rules to the
  D-Bus daemon in GDBus:
  G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE

* Support has been added for XDG_RUNTIME_DIR:
  g_get_user_runtime_dir

* Various fixes for Win64/MSVC builds have been committed

* Bugs fixed:
 620263 Add g_clear_object, g_clear_pointer, g_clear_boxed
 633075 update Project Files and sources for MSVC 2008/C89
 633381 gsettings Makefile rules should handle empty list...
 633685 Use g_simple_async_result_{new_,}take_error
 633686 Add g_simple_async_report_take_gerror_in_idle

* Translation updates:
  Belarusian
  Galician
  Hebrew
  Punjabi
  Spanish


Overview of Changes from GLib 2.27.1 to 2.27.2
==============================================

* GApplication
 - Export actions over DBus and support activating them from remote instances
 - Support environment passing

* GSettings
 - The gsettings utility has a list-recursively command
 - The gsettings utility has commandline completion for enum values

* GLib is now linked against librt and uses monotonic time for
  timeouts and GPeriod sources. GSource has a new g_source_get_time()
  which returns monotonic time, and g_source_get_current_time() has
  been deprecated

* Bugs fixed:
 158725 free linked list with data
 626320 GVariant: Avoid locking in g_variant_get_child_value() if possible
 629247 add gsimpleasyncresult methods to take over a GError
 629274 GNetworkService does not do fallback when there is no SRV record
 631264 gsettings-tool choice/range support
 631482 g_date_time_from_instant: 1000000000000000000
 632169 docs for manual use of gsettings-data-convert
 632571 Add equivalent to gconftool-2's -R option
 633115 GSettings m4 doesn't fail the build for broken schemas
 633206 Default g_application_local_command_line() doesn't set exit_status...
 633339 support more complex gapplication setups
 633356 Make timeout G_MAXINT mean "no timeout"

* Translation updates:
 Catalan (Valencian)
 Indonesian
 Japanese


Overview of Changes from GLib 2.27.0 to 2.27.1
==============================================

* GDateTime now has full week number support.
  New API: g_date_time_get_week_numbering_year

* The GSettings schema compiler will now skip over
  broken .xml schema files instead of aborting altogether

* GSettings now works properly on bigendian systems

* GSettings has more complete support for ranges
  New API:
    g_settings_get_range
    g_settings_range_check
  The gsettings commandline tool supports ranges too.

* GApplication has been rewritten; see the API docs for details
  and examples. The action support is not complete yet.

* The GLib mainloop has gained 'dispatch to context' functionality,
  which can replace manually created idles in many cases.
  New API:
    g_main_context_invoke
    g_main_context_invoke_full

* The gio-desktop-app-info-lookup extension point has been
  removed from GIO. GIO now uses x-scheme-handler mimetypes when
  looking for default applications.

* On win32, make g_get_user_data_dir() return the CSIDL_LOCAL_APPDATA
  folder on Windows, and not CSIDL_PERSONAL. This matches what Qt does,
  and has been widely requested. Also make g_get_user_config_dir() return
  this and not the (roaming) CSIDL_APPDATA folder.

* A periodic event clock has been added in GIO: GPeriodic. Note that this
  API is still experimental and expected to undergo changes before it
  will be incorporated into a stable GLib release. Use at your own risk.

Bug fixes:
 613822 gobject signal connect/disconnect not thread safe
 618737 "dispatch to context" functionality
 620710 g_get_user_data_dir() uses CSIDL_PERSONAL and not CSIDL_APPDATA
 623400 acquire context before dispatching
 627126 gsettings schema files don't get installed on FreeBSD
 627171 g_socket_new_from_fd() doesn't set the right protocol
 628876 Wrong error description
 628937 gracefully handle broken schemas
 629274 GNetworkService doesn't fallback when there is no SRV record
 629289 g_error() used wrong, produces core dump
 629687 leaks class refcount in gsocketcontrolmessage
 629849 GLib-CRITICAL **: g_source_get_context: assertion `!SOURCE_...
 629945 GDBus deadlock in g_bus_get_sync()
 630000 g_date_time_difference
 630077 GDateTime week number support
 630185 Allow NULL strings in g_quark_try_string()
 630797 docs mention non-existent g_object_dispose()
 630968 gschema-compile problems on power g5
 631263 GSettings needs range/choice APIs
 631264 gsettings-tool choice/range support
 631379 GDBus nonce-tcp test failing
 631410 Port gapplookupgconf.c to using x-scheme-handler/
 632884 Possible deadlock in g_object_remove_toggle_ref()

Transation updates:
 Basque
 Brazilian Portuguese
 British English
 Bulgarian
 Czech
 Dutch
 Estonian
 French
 Galician
 German
 Greek
 Hebrew
 Hungarian
 Japanese
 Lithuanian
 Polish
 Portuguese
 Romanian
 Simplified Chinese
 Slovenian
 Spanish


Overview of Changes from GLib 2.25.15 to GLib 2.27.0
====================================================

Build:
  - massive restructuring to reduce #include abuse
  - tweaks to silence some harmless compiler warnings
  - rename gschema-compile.c to glib-compile-schemas.c
  - Windows fixes
  - fix building with zlib < 1.2.4 on win32

GDateTime:
  - better msgctxt for translating month and weekday names
  - API is changed quite a lot, implementation is improved
  - GTimeZone is now exposed

GObject:
  - make ordering for overridden interface properties consistent
  - ->priv structures are limited to 64k but this was not documented,
    and exceeding this limit produced bad results.  Add docs and enforce
    the limit properly.
  - add g_object_class_install_properties() to install multiple
    properties in one go
  - improve debugging output for GValue containing G_TYPE_STRV

GIO:
  - fix priority sorting of GIO extensions
  - add GCredentials support on FreeBSD
  - fix support for IPv6 addresses in URI parsing functions
  - GSocketClient fixes for when g_socket_connect succeeds immediately
  - clarify string encoding for GFile constructors in docs
  - new functions g_data_input_stream_read_upto{,async,finish}
  - tweak confusing documentation for g_output_stream_write()

GDBus:
  - GDBusMessage can now be locked and copied (like in libdbus)
  - GDBusConnection filter function API has changed again
  - GDBusServer: ::new-connection now declares if the connection was claimed
  - add a partial workaround for GObject bug 627724.
  - very many memory leaks fixed

GVariant:
  - check for size == 0 in g_variant_get_bytestring to avoid a crash
    when attempting to get_bytestring() from an empty array
  - improve gobject-introspection annotations

GSettings:
  - add GSettings Windows registry backend
  - some internal tweaks to the backend API
  - remove g_settings_list_items
  - add g_settings_list_children and _list_keys to replace it
  - add schema compiler restrictions for dealing with lists
  - don't automatically emit value changed signals on writability
    changes

Other:
  - constify the 'parser' vtable param to g_markup_parse_context_push()
  - plug many memory leaks in test cases

Bugs closed:
  50076 Time API to go with date API
 584284 g_data_input_stream_read_until_async different from sync version
 624546 Modification of GDBusMessage in filter function
 626919 Let g_object_class_install_property() return the installed GParamSpec*
 628029 GDateTime missing get_week_of_year method
 628253 Interface properties not listed in a consistent order
 628331 Plug lots of mem leaks in gio test suite
 628345 Plug a mem leak
 628436 Plug a mem leak
 628505 Fix building with zlib < 1.2.4 on win32
 628839 [PATCH] datetime: Rename shadowing variables
 628904 [PATCH] Add credential support for FreeBSD and fix a socket issue
 628952 incorrect glib_major_version and other variables on cygwin.
 629192 g_strdup_value_contents(): dump GStrv more usefully
 629251 g_socket_client_async_connect_complete: assertion failed
 629259 Failed to connect to "::1"
 629328 g_markup_parse_context_push doesn't respect const structs
 629429 month "May" short and full form same with "GDateTime" msgctxt
 629689 GDBusConnection leaks its GCredentials
 629698 Segfault in g_variant_get_bytestring() 

Updated translations:
  Arabic
  Armenian
  Basque
  British English
  Czech
  Finnish
  Galician
  German
  Hungarian
  Indonesian
  Japanese
  Lithuanian
  Norwegian bokmål
  Polish
  Portuguese
  Punjabi
  Simplified Chinese
  Slovenian
  Spanish
  Swedish
  Swedish
  Traditional Chinese

Overview of Changes from GLib 2.25.14 to GLib 2.25.15
=====================================================

 * GIO
  - Memory leak fixes
  - The GZip(De}Compressor can now process header information
  - Support for network proxies has been added, with the GProxy
    interface and the gio-proxy-resolver extension point. GIO
    includes SOCKSv4 and SOCKSv5 implementations, and libproxy
    is also going to provide an implementation of this extension
    point.
  - There are GAction and GActionGroup interfaces now, which will
    be used in GApplication in the near future.

 * GObject
  - There are now convenience macros for defining boxed and
    pointer types

 * GDBus
  - Memory leak fixes
  - GDBusProxy for well-known names can now auto-restart
    the service if the name owner disapperas
  - Filter functions are now allowed to modify messages

 * GLib
  - GDateTime is a replacement for GDate that supports time
    and timezone information.

 * Bugs fixed:
  50076 Time API to go with date API
 449565 Add G_DEFINE_BOXED_TYPE()
 617691 Add GZIP header processing to GZlibCompressor/GZlibDecompressor
 622184 add g_memory_output_stream_steal_data
 624546 Modification of GDBusMessage in filter function
 627088 Build failure in gdbus-peer.c on FreeBSD
 627181 save a memdup
 627182 Plug a mem leak in the gdbus-connection test
 627187 Plug some gdbus mem leaks
 627188 gdbus-non-socket test occasionally fails
 627252 G_OPTION_FLAG_NO_ARG is only for callback options
 627392 gdbus commit 8a3a4596 breaks win32 compile
 627407 FTBFS on !linux UNIX platforms
 627604 String error: 'that' twice in a row
 627969 ABR in g_file_open_tmp
 628084 gdbus-peer fails with assertion
 628193 Miscellaneous string fixes
 628296 abort() in gsocketconnection.c
 628309 Plug a mem leak in GConverterOutputStream
 628317 GEmblemedIcon:equal implementation is buggy
 628323 Fix invalid reads
 628327 Plug a mem leak
 628328 Plug a mem leak
 628329 Don't leak the FD list
 628324 Invalid reads in gdbus-export test

 * Updated translations:
  British English
  Danish
  Galician
  Hebrew
  Punjabi
  Serbian
  Spanish
  Traditional Chinese


Overview of Changes from GLib 2.25.13 to GLib 2.25.14
=====================================================

* GDBus
 - Make the closure variants of GDBus apis work
 - Make error unregistration work
 - Use async IO in the IO thread (626748)

* GIO
 - Make g_simple_async_result_is_valid work without source (626208)
 - GSocketClient: add a timeout property
 - Fix memory leaks in GSocketClient
 - Handle async vs. sync correctly in GSocketConnection stream (616458)
 - Declare stream base classes as abstract
 - Clarify semantics of g_output_stream_write() (627071)

* Other
 - Improve test coverage for GDBus, GRegex, GAsyncResult
 - Drop dead code in pcre, xdgmime
 - Fix a race condition in gtester (578295)
 - Avoid an extra allocation in GAsyncQueue (626704)
 - Add test case for non-socket GIOStream (626841)
 - More explicit GVariant docs (622770)
 - Imroved docs for GAsyncInitable and GSimpleAsyncResult (602417)

* Translation updates:
 - Galician
 - Norwegian bokmål
 - Punjabi
 - Simplified Chinese
 - Swedish


Overview of Changes from GLib 2.25.12 to GLib 2.25.13
=====================================================

+-------------------------------------------------------------------+
|   WARNING: There have been no breaks in API or ABI.  Weird, eh?   |
+-------------------------------------------------------------------+

The primary purpose of this release is to fix a serious problem with
glib 2.25.12: glibconfig.h (as generated on a Fedora amd64 system) was
being distributed in the tarball.  It was being used to build some parts
of glib on other systems (eg: 32bit ones).  This was causing some very
serious problems.

There have been many other improvements, however:

 Build and testing:
  - vastly improved test coverage
  - old tests moved to the gtester framework
  - gtester Makefile modified so that the tests only run once
  - cleanup of how we handle includes while building glib

 GVariant:
  - add a g_return_if_fail (utf8) to g_variant_new_string()

 GDBus:
  - perform extra sanity checks when serialising messages
  - add API to query and set the byteorder of a GDBusMessage
  - improve debug output, add some extra options
  - if exiting due to the bus disconnecting us, print an error message
    explaining why
  - sort property names correctly
  - don't bother sending RemoveMatch when we will close the connection
    anyway
  - use effective uid/gid for credential passing

 GSettings:
  - add G_SETTINGS_BIND_INVERT_BOOLEAN for inverting boolean bindings
    without mapping functions
  - mark all strings in the schema compiler for translation

 Binding:
  - improve closure support for bindings
  - copy GSettings INVERT_BOOLEAN flag

 Other:
  - fix another complicated GCancellable deadlock possibility

Bugs closed:
 599590 glib build doesn't look for correct pkg-config
 619026 avoid warning in gutils.h when using gcc with -Wconversion
 624739 Please fix POTFILES.in
 625472 Valgrind claims uninitialized bytes used
 625500 g_date_set_time_val documentation doesn't mention local time
 625628 GDBusProxy: wrong property name sorting
 625753 Incorrect flags used in g_dbus_connection_call_sync()
 625827 Expand documentation about error quark naming
 625988 builddir != srcdir issues
 626107 glibconfig.h is being disted

Updated translations:
 French
 Galician
 Hebrew
 Norwegian bokmål
 Spanish


Overview of Changes from GLib 2.25.11 to GLib 2.25.12
=====================================================

+-------------------------------------------------------------------+
| WARNING: There have been many API changes in GDBus -- sending     |
| messages, subscribing to signals, closing connections and         |
| registering subtrees are affected.  The ABI for GSettingsBackend  |
| has also been changed.  For both reasons, a new dconf release is  |
| required (and will be along soon).                                |
+-------------------------------------------------------------------+

Build:
  - cleanup automake setup
  - rename configure.in to configure.ac
  - various docs fixups
  - move glibconfig.h to glib/
  - disable dtrace support on Mac OS (which has incompatible 'dtrace')

GSettings:
  - add support for vendor override files (to change the default values
    in a schema)
  - change GSettingsBackend vtable
  - add g_settings_reset()
  - support binding to G_TYPE_STRV properties

GDBus:
  - many bug fixes, including a serialisation fix
  - stop handling incoming connections as soon as stop() is called
  - proper support for file descriptor passing
  - new flags parameter for sending messages
  - new flags parameter for subscribing to signals
  - always reset the message serial when sending a message unless
    G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL is given
  - constness fixes for introspection structures
  - clean ups to subtree registration API

Other:
  - fix divide by zero bug in g_malloc_n functions
  - GIO: don't blindly assume that SOCK_CLOEXEC is supported
  - make GObject property notify freezes threadsafe
  - GIO: clean up credentials passing
  - GApplication: make default-quit not apply if register=FALSE
  - GIO: add annotations for gobject-introspection

Bugs closed:
 166020 use GAtomic for refcounting
 617483 Credentials passing
 622005 [GApplication] no way to modify the "default-quit" property
 623293 vendor override files
 623810 Message serialization bug
 623815 Don't check sender for GDBusProxy objects where name is not set
 624473 GDBusSubtreeIntrospectFunc return type
 624483 GDBusSubtreeEnumerateFunc clarification
 624484 GDBusSubtreeDispatchFunc clarification
 624754 gdbusaddress.c missing sys/wait.h
 624968 div by zero in g_malloc_n family
 624991 GSettings mapping for G_TYPE_STRV 
 625383 Add missing GI annotations

Updated Translations:
 Armenian
 Galician
 German
 Hebrew
 Kazakh
 Romanian
 Simplified Chinese
 Spanish

Overview of Changes from GLib 2.25.10 to GLib 2.25.11
=====================================================

+-------------------------------------------------------------------+
| WARNING: There have been minor API changes in GDBus and GVariant. |
| These API changes will not affect many users, but they do require |
| a new version of GTK+ to be installed.                            |
+-------------------------------------------------------------------+

Build:
  - add a --disable-Bsymbolic configure flag to disable linking with
    -Bsymbolic-functions
  - this release sees the complete removal of the old 'g*alias' hacks
  - honour the NOCONFIGURE environment variable from autogen.sh
  - use proper feature test macros for isnan
  - use pkg-config to check for zlib
  - add ACLOCAL_AMFLAGS to Makefile.am

GDBus:
  - hide Class and instance structures for all GDBus types except
    GDBusProxy.  This breaks API by preventing subclassing, but probably
    nobody was doing that.
  - add new GDBusConnection call to support flushing all pending
    outgoing messages
  - change the register_object API to add a reference to the
    GDBusInterfaceInfo object so the caller need not keep it alive
    themselves
  - don't rewrite the serial number when sending messages that already
    have a serial number
  - better error checking for DBUS_SESSION_BUS_ADDRESS environment
    variable
  - switch to g_parse_debug_string for G_DBUS_DEBUG and add a lot of new
    flags
  - add support for temporarily freezing a freshly created
    GDBusConnection.  Do this until after the ::new-connection signal
    has finished running on GDBus services.
  - never require non-closed connections (the user is incapable of doing
    this due to the obvious race)
  - remove weird/misleading redundant check on NameOwnerChanged signal
  - emit GDBusProxy::g-properties-changed on NameOwnerChanged

GVariant:
  - the 'g_variant_{new,get}_byte_array' APIs have been removed
  - g_variant_{new,get,dup}_bytestring has been added, with different
    arguments and different behaviour
  - g_variant_{new,get,dup}_bytestring_array has been added, doing
    essentially the same thing as the 'strv' functions, but with byte
    strings instead of utf8 strings
  - G_VARIANT_TYPE_BYTESTRING ('ay'), BYTESTRING_ARRAY ('aay') and
    STRING_ARRAY ('as') constants have been added
  - the undocumented behaviour that g_variant_get_strv() deserialised
    arrays of object paths or signature strings has been dropped
  - additional varargs support for converting bytestrings or bytestring
    arrays with ^ay ^aay ^&ay and ^a&ay
  - improved gobject-introspection annotation
  - fix a problem with GBuffer calling g_slice_free for the wrong type
  - fix leaks in the type inferencing code of the parser

GSettings:
  - improved documentation
  - updated schema XML DTD, now xincluded into the docs
  - added support for schemas that extend other schemas (using the
    'extends=' attribute).  Values of keys in the base schema can be
    overridden using <override>.
  - added theoretical support for lists (using the 'list-of=' attribute)
  - lots of new tests
  - add support for flags (implemented similarly to enums)
  - add support for generating .enums.xml files to gsettings.m4:
      gsettings_ENUM_NAMESPACE = org.example.myapp
      gsettings_ENUM_FILES = ../path/to/*.h
    will generate org.example.myapp.enums.xml with mappings for all
    enums and flags in the specified .h files.
  - warn with g_message() if the 'memory' backend is used by default
    (ie: because no other GSettings backends are installed)
  - fix get_property() for GSettings::schema
  - command line tool: fix a bug that prevented non-basic values from
    being set due to a premature free
  - command line tool: bash completion support
  - chain up in _finalize
  - add a new g_settings_get_mapped API to read settings that require
    post-processing
  - retry with the translated or schema default value if the
    GSettingsBindGetMapping function fails
  - schema compiler: never fail due to empty schema directories (but
    warn)
  - peek rather than ref/unref the GEnumClass in the mapping function
  - schema compiler: compile *.enums.xml before *.gschemas.xml to ensure
    that we have all the enums that the schemas may reference
  - schema compiler: improve accuracy of line numbers in error reports
  - fix crashes in the keyfile backend caused by invalid group names in
    the keyfile

Other:
  - always intern GBinding prop names
  - base64: remove asserts preventing conversion of empty strings
  - document NULL special-cases for GValueArray
  - GNode docs improvements
  - improve detection of 'system internal' mounts
  - fix leaks in the inotify GFileMonitor implementation
  - annotate all custom GIO GSources to improve debugging (e.g. using
    SystemTap)

Tests:
  - Turn on glibc malloc checking features for make check
  - improvements for GSettings tests, plus new tests
  - improved tests for GKeyfile
  - new tests for GDir, GSList, GSList, GAppLaunchContext,
    CharsetConverter, GIcon, ...
  - move some tests to GTester (tree tests, uri tests)
  - generally, really an awful lot of new tests
  - don't try to allocate 2gigs of memory anymore for the array test

 552363 g_value_array_{insert,prepend,append}'s special cases for NULL
 561248 Improve return value description from g_node_prev/next_sibling()
 570036 Add ACLOCAL_AMFLAGS to Makefile.am
 576833 g_sprintf add a reference to g_strdup_printf
 576854 g_strconcat() documentation should provide a hint about bad l10n
 582227 reference: add other URI functions to 'URI Functions' section
 599223 should provide g_spawn_* variants that take a GAppLaunchContext
 610784 array test failing
 613057 Leak in inotify GFileMonitor implementation
 620536 Annotate all custom GIO GSource using g_source_set_name
 620913 More control with G_DBUS_DEBUG
 622124 implement flags
 622127 GSettings extended key validation
 622128 retry with default value for failed mapping
 622294 More annotations for GVariant
 622565 glib-compile-schemas fails when no schemas
 622600 Fix missing prototype warning
 622813 gsettings mapping & enum buglet
 623142 Ensure ::new-connection runs before processing D-Bus messages
 623143 Never require non-closed connections
 623319 use g_parse_debug_string for dbus debug flags
 623401 process enums first
 623402 schema compiler reports wrong line numbers
 623407 g_keyfile_settings_backend_new crashes with the key "/"
 623473 zlib should be checked with pkg-config
 623537 GDBusProxy has weird checking on NameOwnerChanged
 623538 GDBusProxy::g-properties-changed emission for corner cases
 623692 directory with file at multiple MLS levels may display empty
 623720 gschema.dtd does not contain enum definitions
 623770 quoting of expand_macro in gdesktopappinfo.c
 623772 gdesktopappinfo.c, function child_setup
 623780 g_unix_is_mount_path_system_internal
 623954 g_settings_finalize
 623955 Dubious return values

Updated translations:
 Galician
 Hebrew
 Norwegian bokmål
 Spanish

Overview of Changes from GLib 2.25.9 to GLib 2.25.10
====================================================

+----------------------------------------------------------------+
| WARNING: There have been API changes in GDBus. Users of these  |
| APIs will need to be adapted.  In particular, a new release of |
| dconf is required to go along with this one.  There has also   |
| been a change in the GSettings backend API used for keyfiles.  |
+----------------------------------------------------------------+

* GDBus:
 - add direction parameter to filter functions (API change)
 - allow calling other interfaces with a GDBusProxy
 - padding added to class struct fields (ABI change)
 - fixes for closures-based functions

* GVariant:
 - new is_floating() call
 - add g_value_take_variant() call (required for marshallers)

* GSettings:
 - support for binding GParamSpecEnum properties
 - ifelse-style condition support for GLIB_GSETTINGS m4 macro
 - remove gsettings-schema-convert tool (now in GConf)
 - allow introspection of all installed schemas
 - allow introspection of the keys in a schema
 - rewrite keyfile backend (API change)

* GNIO:
 - don't implicitly close GSocket until it is destroyed
 - windows fixups

* Other:
 - allow GChecksum to take (NULL, 0) for data/length
 - GRelation and GCompletion are now deprecated
 - introduce G_PARAM_DEPRECATED and G_ENABLE_DIAGNOSTIC
 - add working directory to GApplication platform data
 - lots of documentation cleanups
 - PCRE updated to 8.02

* Build:
 - the IA__g_* style symbol aliasing has been disabled and replaced with
   the -Bsymbolic-functions linker flag on platforms that support it.
   Please be on the watch for portability issues and report them to us.
 - many test cases have been moved to the GTester framework
 - lcov support has been added for tests
 - many windows fixes

* Bugs fixed:
 501057  lcov coverage suite and GLib integration
 551271  deprecate GRelation
 601686  Implement diagnostic mode
 603309  GSocketOutputStream broken on Windows (?)
 616718  GLIB_GSETTINGS macro can't be used conditionally
 616855  GSocketConnection: don't close the socket if it's still reffed
 618866  g_ptr_array_remove_index_fast memory leak
 619878  keyfile backend calls keys_changed with invalid argument
 619879  keyfile backend doesn't make use of expected_type
 621092  Add with_closures() variants for bindings
 621172  Cross compiling fails
 621838  Actually add cwd to platform data
 621945  Filter outgoing messages in GDBusConnection
 621947  add g_value_take_variant
 622038  GSettings: "It is a programmer error" documentation is unclear
 622154  [patch] update documentation for g_application_new
 622281  binding: Add SYNC_CREATE to the flags
 622480  Improve documentation for g_strcmp0()
 622554  g_error called if schema not installed
 622601  Return interned strings from g_settings_list_keys

* Translation updates:
 - Galician

Overview of Changes from GLib 2.25.8 to GLib 2.25.9
===================================================

+----------------------------------------------------------------+
| WARNING: There have been API changes in GDBus, GSettings and   |
| GApplication. Users of these APIs will need to be adapted. In  |
| particular, a new release of GTK+ is required to go along with |
| this one.                                                      |
+----------------------------------------------------------------+

* GDBus
 - Use Gio's default async implementation
 - Fix proxy construction for objects with no properties
 - Fix error handling in synchronous initialization
 - Do not dispatch calls to unregistered objects
 - Add _with_closures alternative functions
 - Allow constructing GDBusProxy with well-known names
 - Remove GType parameters from GDBusProxy constructors
 - Nuke g_bus_watch_proxy API
 - Add --xml to gdbus-tool to print raw introspected XML

* GSettings
 - schema file format change: store (default, options) in gvdb
 - Add g_settings_sync()
 - Add support for enums and ranges
 - 'context' support has been replaced by direct use of
   GSettingsBackend

* GApplication
 - Switch to using variants for timestamps
 - Use GInitable

* GObject
 - Introduce g_object_notify_by_pspec
 - Add GBinding
 - The GVariant gtype G_TYPE_VARIANT was changed from boxed
   to fundamental. We believe there were no existing users
   of the boxed type, so this should not cause any applications
   to break.

* Test framework
 - Add package and version to the test report XML
 - Use optparse to parse gtester-report commandline
 - Add subunit support to gtester-report
 - Prevent division by zero if no tests

* Bugs fixed:
 621782 Crash using gbinding
 619945 GConverterOutputStream triggers assertion and corrupts data
 621319 more leaked GVariants in GSettings
 621168 GKeyFile memory leak on Windows platform
 621002 Switch to using variants for timestamps, split out signals
 620953 tiny docs addition
 618904 Lies in gunixmounts documentation
 621702 Correctly initialize GError
 611778 minor cleanup of gtester-report
 621213 GDBusProxy and well-known names
 621034 Rewrite apps test to ensure children are killed
 620954 gapplication gvariant simplifications
 611869 add subunit out feature to gtester-report
 621119 GDBusProxy and objects with no properties
 620990 Use Gio's default async implementation again
 620952 g_application_register_with_data is an ugly API
 621252 GSettings leaks context
 618715 fork() in GSettings test cases is problematic 618715
 621905 Assume a ref when doing async work
 621266 GSettings "context" clarification

* Translation updates:
 Chinese


Overview of Changes from GLib 2.25.7 to GLib 2.25.8
===================================================

* Initial support for dtrace and systemtap profiling:
 - mainloop sources can be named
 - probes for memory allocation with g_malloc and gslice
 - gquark name tracking
 - type creation
 - object life-cyle (creation, finalization, ref, unref)
 - signal creation and emission

* GVariant
 - has been fixed to work with the FreeBSD malloc
 - added introspection annotations
 - new function: g_variant_builder_add_parsed

* GSettings:
 - g_settings_set/get_strv functions have lost their length parameter
 - g_settings_set_strv accepts NULL
 - added introspection annotiations

* GPermission: an abstract interface for representing permissions,
  with a minimal implementation named GSimplePermission

* GApplication: a basic application support class, with a D-Bus based
  implementation

* Bugs fixed:
 619585 glib-compile-schemas asserts on FreeBSD
 620384 Annotate GVariant and GSettings _strv() functions
 606044 Add support for dtrace/systemtap static markers
 620350 add g_variant_builder_add_parsed() API
 620349 utf8ify GVariant printer
 620767 Typo in GSettings documentation: "INTLTOOL_NOMERGE_RULE"
 620312 Fix g_settings_[gs]et_strv() API
 620519 GPermission
 620582 GPermission needs a simple implementation
 620496 GSettings schema compiler should reject invalid paths
 620173 missing single header inclusion guards
 620265 g_assertion_message_error should take const GError *

* Translation updates:
 Esperanto
 Galician
 Hebrew
 Indonesian
 Norwegian bokmål
 Slovenian
 Spanish


Overview of Changes from GLib 2.25.6 to GLib 2.25.7
===================================================

* NOTE: API/ABI breaks since 2.25.6 release:
  - g_dbus_connection_sync{,_sync} takes a new 'reply_type' argument
  - GSettingsBackendClass 'list' virtual function changed

  GSettings backends and things using GDBus may need to be rebuilt.

* GDBus: many build-related fixes

* GDBus (service): return a DBus error when receiving a method call for
  an unknown interface.

* GSettings: fix 'make install' bug in gsettings.m4 for generated schema
  files

* GSettings: avoid non-portable use of LC_MESSAGES

* better approach to handling man pages


* Bugs fixed:
 619527 please improve docs on g_file_make_symlink
 619391 send-with-reply should have expected result signature
 618616 Use stack-allocated GVariantBuilders
 617004 Build with "--disable-nls" fails under MinGW/Win32
 619142 Build fixes (GDBus)

* Updated translations:
 Estonian
 Galician
 Norwegian bokmål

Overview of Changes from GLib 2.25.5 to GLib 2.25.6
===================================================

* GDBus: introspection improvements
* GDBus: build fixes

* GSettings: GSettingsBackend ABI changed               **** NOTE ****
* GSettings: --uninstall option for schema compiler
* GSettings: new m4 macro with more power
* GSettings: thread support

* rework of file notification on Solaris
* fixes for gold linker

* Bugs fixed:
 619038 increase gsettings.m4 power
 619031 method-calls-in-thread test failing
 618839 Typo at translation message
 616864 GSETTINGS_CHECK_RULE doesn't work with multiple files
 618730 gunixcredentialsmessage.c doesn't compile on GNU/kfreebsd
 616314 Make GSettings (partially) threadsafe

* Updated Translations:
 Indonesian
 Galician
 Spanish

Overview of Changes from GLib 2.25.4 to GLib 2.25.5
===================================================

* GDBus: Fix serialization of empty arrays

* GDBus: Plug various memory leaks

* GSettings: Fix problems with GSETTINGS_CHECK_RULE

* Bugs fixed:
 616731 GSETTINGS_CHECK_RULE doesn't work in non-srcdir builds
 616864 GSETTINGS_CHECK_RULE doesn't work with multiple files
 618615 mem leaks in parse_value_from_blob
 618622 Plug some mem leaks in gdbus
 618650 Plug a mem leak in gdbusauth
 618663 Plug mem leaks in gdbus tests & examples

* Updated translations:
 Spanish


Overview of Changes from GLib 2.25.3 to GLib 2.25.4
===================================================

* GDBus D-Bus support has been merged. This provides an API
  to replace dbus-glib

* GVariant no requires strings to be UTF-8. You can use byte
  arrays for non-UTF-8 strings.

* GSettings allows to bind string properties to byte arrays

* The schema compiler supports range restrictions

* Bugs fixed:
 618051 socket-server|client.c fail to compile under AIX...
 616102 GSettings ignores <choice> and <range>
 616720 Chunked quark allocation
 616877 Several issues with g_socket_receive_message
 616892 gio: Add a boxed type for GFileAttributeMatcher
 616967 Add g_regex_get_compile_flags() and g_regex_get_match_flags()
 617767 g_settings_[gs]et_strv() 'length' argument has missing docs...
 617914 gtester-report: cope with binaries with no test cases
 617937 output_stream_close vs output_stream_close_async semantics
 615494 Connction timeouts produce partially invalid error messages
 617823 glib-compile-schemas problems with an out of source build
 617947 glib-mkenums: add @valuenum@ support

* Translation updates:
 Galicaian
 Norwegian bokmål
 Shavian
 Spanish


Overview of Changes from GLib 2.25.2 to GLib 2.25.3
===================================================

* New macro: G_GNUC_DEPRECATED_FOR, a variant of G_GNUC_DEPRECATED
  that lets you add replacement information (requires gcc 4.5)

* Rename AM_GSETTINGS autoconf macro to GLIB_GSETTINGS

* Rename gschema-compile utility to glib-compile-schemas

* Add support for timeouts in GSocket

* Bugs fixed:
 589989 Compilation error on Solaris 9
 616648 Change AM_GSETTINGS macro to GLIB_GSETTINGS
 587898 I/O timeouts for GSocket
 614541 Add G_TYPE_ERROR boxed type for GError


Overview of Changes from GLib 2.25.0 to GLib 2.25.2
===================================================

* Include a 'gsettings' utility, for commandline access to GSettings

* Install a AM_GSETTINGS autoconf macro similar to AM_GCONF

* GSettings can bind the writability of a key explicitly

* There is now a predefined boxed type for GError

* Bugs fixed:
 615379 g_new macros crash if sizeof(struct_type) == 0
 616312 Add m4 rule equivalent to GCONF_SCHEMAS_INSTALL
 616295 mapping bug for uint64
 616216 glib compile from remote directory fails
 615960 Fix size passed to connect() for abstract sockets
 616432 Crash in gschema-compile
 616331 gsettings-schema-convert uses imaginary types
 616309 gsettings-schema-convert should output gettext-domain
 616384 Add mention of GConfBridge in conversion docs
 616311 gschema-compile outputs in current directory
 616276 simplify gschema-compile test setup
 616156 keys with unnecessary empty options arrays
 616405 gsettings missing g_return_if_fail's
 616245 Use G_DEFINE_INTERFACE macro
 614541 Add G_TYPE_ERROR boxed type for GError

* Updated translations:
 Catalan (Valencian)
 Galician
 Kannada
 Spanish


Overview of Changes from GLib 2.24.0 to GLib 2.25.0
===================================================

* The GSettings framework has been merged. This provides the API to
  replace GConf. DConf will provide a backend implementation for it.
  GConf will also provide a backend implementation to ease the
  transition. We provide utilities to assist with schema conversion
  and data migration, as well as a porting guide.

* Translation updates:
 Bengali
 Catalan
 Danish
 Gujarati
 Marathi
 Thai
 Traditional Chinese


Overview of Changes from GLib 2.23.6 to GLib 2.24.0
===================================================

* Bug fixes:
 613601 buglet in dup_close_on_exec_fd
 584284 g_data_input_stream_read_until_async behaves confusingly
 613748 Write errors in middle of copy cause hang
 613923 splice_stream_with_progress: wrong error handling
 613667 Typo in GObject documentation
 613618 gvariant format string docs unclear

* Translation updates:
 Basque
 Ukrainian
 Vietnamese


Overview of Changes from GLib 2.23.5 to GLib 2.23.6
===================================================

* Class private data:
  - support for private data associated with a GTypeClass

* GVariant merge is now complete:
  - loading functions and parser merged

* Windows improvements:
  - socket fixes
  - various build improvements
  - removal of GCC/C99isms in favour of portable code
  - drop unmaintained Visual Studio 8 support

* Minor API addition:
  - g_desktop_app_info_get_filename()

* Bugs fixed:
 521707 Class private data
 612502 build fails on glib/tests/gvariant.c
 612832 [GDesktopAppInfo] New function g_desktop_app_info_get_filename
 612702 [PATCH] Fix GSocket-related crash on Windows
 612736 Improve the documentation about single include
 610858 gvariant test fails sometimes
 612327 uninitialized variable

* New translations:
 Afrikaans
 LowGerman

* Updated translations:
 Czech
 Finnish
 Galician
 Greek
 Punjabi
 Romanian
 Serbian


Overview of Changes from GLib 2.23.4 to GLib 2.23.5
===================================================

* New API addition: g_malloc_n() and friends used to implement an
  overflow-safe family of g_new() macros.

* GVariant:
 - GVariantBuilder and GVariantIter are now merged.
 - The variable arguments API is now merged.
 - The parser will be in a future release.

* GIO:
 - Remove GUtf8InputStream (which never appeared in a stable release)
   for now since it doesn't satisfy the needs of its main intended use
   case.  We hope to reimplement this feature in a better form in a
   future release.

* Bugs fixed:
 609531 missing licence headers
 612107 Missing G_FILE_ATTRIBUTE_TRASH_ORIG_PATH
 611897 g_io_modules_scan_all_in_directory leaks
 608196 Overflow-safe g_new family
 611696 gio uses GetAddrInfo which requires special handing on windows 2k
 605667 Don't use G_PARAM_SPEC_VALUE_TYPE when we know the pspec is valid
 610860 test_g_file_open_readwrite fails if $HOME is unwritable
 552912 glib-2.18 /live-g-file/test_copy_move failed when run as root
 609813 Renaming a file discards file notes

* Updated translations:
 Basque
 Brazilian Portuguese
 British English
 Bulgarian
 Catalan
 Danish
 Estonian
 French
 German
 Hungarian
 Italian
 Lithuanian
 Norwegian bokmål
 Portuguese
 Russian
 Slovenian
 Spanish
 Swedish
 Traditional Chinese


Overview of Changes from GLib 2.23.3 to GLib 2.23.4
===================================================

* GVariant: The core of GVariant has been merged now, with some
 API still to follow.

* GIO:
 - There is a new interface GFileDescriptorBased for file descriptor
   based IO. GLocalFile{Input,Output}Stream implement it
 - Use splice(2) to transfer data between file descriptors without
   extraneous copies
 - Add a way to request move events from file monitors

* Bugs fixed:
 609143 *result_uncertain is never assigned in g_content_type_guess
 604086 Use splice(2) when doing local file copies
 547890 No move events for GFileMonitorEvent?
 568760 nautilus freezes due to a bug in garray.c:322
 609962 Add info about the use of G_DEFINE_INTERFACE
 609564 g_base64_encode_close docs should mention outbuf size...
 610484 g_variant_equal bug
 610131 libasyncns does not compile on Solaris 8
 609530 missing single header include guards

* Updated translations:
 Czech
 Estonian
 Galician
 German
 Korean
 Polish
 Slovenian
 Spanish
 Traditional Chinese


Overview of Changes from GLib 2.23.2 to GLib 2.23.3
===================================================

* GLib now has a facility for locks that consume only one bit of
  storage inside an integer: g_bit_lock()

* GVariant: The serializer has been merged, with more API to follow

* Bugs fixed
 548967 1 bit mutex lock
 604967 2.22.3 libasyncns build fails on HP-UX 11.11
 608602 G_VALUE_COLLECT_INIT variables shadow those in G_VALUE_COLLECT
 608743 Crash in g_hostname_to_ascii visiting certain website in epiphany
 599197 array ref and unref functions crash on NULL array.
 608159 mem leak in g_io_modules_scan_all_in_directory

* Translation updates
 Brazilian Portuguese
 Czech
 French
 Norwegian bokmål
 Slovenian
 Spanish
 Thai


Overview of Changes from GLib 2.23.1 to GLib 2.23.2
===================================================

* We are now using gcc builtins for atomic operations when available

* g_assert() grew the ability to store assertions in core dumps

* GIO supports lazy loading of GIO modules, and there is a new
  gio-querymodule utility that goes along with this.
  Packagers will need to adapt to this.

* Threading changes:
 - The requirements for g_thread_init() have been relaxed slightly,
   it can be called multiple times, and does not have to be the first
   call.
 - GObject now links to GThread and threads are enabled automatically
   when g_type_init() is called.
 - Thread-safety issues with boxed types in GObject have been fixed.

* GObject:
 - Another bunch of performance work has landed

* GVariant:
 - GVariantType has been merged, with the rest of the GVariant
   API to follow.

* Bugs fixed:
 568760 nautilus freezes due to a bug in garray.c:322
 602417 Document lifecycles of GSimpleAsyncResult and friends
 604824 crash in Epiphany: Selecting my Slashdot bo...
 448888 don't init g_slice for always-malloc
 531902 Use GCC atomic buildins for g_atomic*
 554887 boxed type registration is not thread safe
 586150 unresolved symbols when building glib 2.21.2 on OS X Tiger
 589176 row gvalue transform array exponentially
 594872 Support storing assertion messages into core dump
 602240 Upgrade libasyncns to 0.8
 603590 Speed up G_VALUE_COLLECT
 604457 gutf8inputstream.c: increasing unknown size pointer
 605686 GCharsetConverter doesn't flush
 605733 g_memory_output_stream_new violates GObject standards
 605883 g_object_new() processes varargs even when there are none
 605977 invalid utf-8 conversion in g_local_file_get_parse_name(...
 606775 Enable threads by default in gobject

* Translation updates:
 Asturian
 Basque
 Bengali
 Bulgarian
 Estonian
 Norwegian bokmål
 Spanish
 Thai
 Ukrainian


Overview of Changes from GLib 2.23.0 to GLib 2.23.1
===================================================

* GObject performance work has landed:
 - Construction of simple objects is much faster
 - Interface lookup is lock-free and constant-time now
 - Reduced locking overhead when dealing with types

* GType now has a G_DEFINE_INTERFACE convenience macro

* GIO gained GUtf8InputStream, an input stream that
  performs utf-8 validation

* GLib now has byte-swap macros for gsize and gssize

* Bugs fixed:
557151 Determining the newly_constructed boolean in gobject.c...
557100 Performance improvements for GObjectClasses that don't...
501166 Warning message says IA__g_type_init instead of g_type_init
585375 Performance and Contention problems with g_type_class_ref...
587892 Race in GType when instantiating the same class for the...
603270 Input Stream validating utf8
603476 gioenums.h:62: error: comma at end of enumerator list
603540 g_time_val_from_iso8601 uses uninitialised variable
603982 Stack overflow when reading file async with filter
604645 G_DEFINE_INTERFACE_* documentation is not generated
604875 Use of sa_len conflicts with system header
320482 provide G_DEFINE_TYPE like macros for interfaces

* Updated translations:
 Estonian
 Hebrew
 Norwegian bokmål
 Vietnamese
 Welsh


Overview of Changes from GLib 2.22.x to GLib 2.23.0
===================================================

* GIO:
 - GConverter: a generic interface for stateful conversions of data,
   suitable for charset conversion, compression, decompression, regexp
   replacement. Concrete implementations are GCharsetConverter,
   GZlibCompressor and GZlibDecompressor. GConverterInputStream,
   GConverterOutputStream are stream implementations that convert data
   while loading or saving it.
 - GMounts can now have a 'default location': a path that reflects
   the main entry point for the user (e.g. the home directory).
 - As a consequence of the compression support, GIO depends on zlib now.

* GObject:
 - G_IMPLEMENT_INTERFACE_DYNAMIC: a convenience macro for adding
   interfaces to dynamic types.

* GModule:
 - The -pthread flag has been added to all gmodule .pc files, because
   it is not generally permissible to load modules that are linked
   against libpthread if the program has not been compiled with threading
   support.

* Bugs fixed:
 601637 GUnixFDMessage should contain a GUnixFDList
 585566 GSocketListener API issues
 572252 Bug in g_file_test() function.
 600550 g_app_info_create_from_commandline doesn't treat arguments properly
 541236 not detecting exact content type
 350200 [PATCH] GTypeModule derived class unref does not unload plugin
 589631 Please enclose literal values with double quotes
 577711 cross compile check for g++ broken
 600620 Support X-GNOME-FullName in GAppInfo
 598899 GWin32DirectoryMonitor is broken
 593809 Nautilus does not restore the position of the icons on the desktop...
 563627 g_get_prgname() threadsafety
 600141 Add -pthread to gmodule pkg-config
 593856 file and directory monitors don't work when glib is compiled...
 324930 Nautilus should disallow copying of symlink to FAT drive early
 587300 Deadlock when calling g_cancellable_disconnect in a...
 595138 GFile not robust with invalid input
 591216 Warning building resolver.o
 590016 Does not compile under MinGW32 + Wine
 591214 Warnings building gcancellable.o
 561998 Have specific entry points (paths) for mounts...
 508157 Add G_IMPLEMENT_INTERFACE_DYNAMIC
 535159 g_file_has_parent

* Updated translations:
 Brazilian Portuguese
 Catalan
 Estonian
 Galician
 Norwegian bokmål
 Shavian
 Slovenian
 Spanish
 Swedish


Overview of Changes from GLib 2.22.1 to GLib 2.22.2
===================================================

* GIO:
 - Support case-sensitive globs in the shared mime database,
   including support for the newer cache format that allows these.
   Case-sensitive globs have been introduced in shared-mime-info
   version 0.70

* GObject:
 - Speed up creation of simple objects

* Bugs fixed:
 597194 Typo in _G_TYPE_CVH macro

* Updated translations:
 Russian


Overview of Changes from GLib 2.22.0 to GLib 2.22.1
===================================================

* Bugs fixed:
 596064 Test file marked for translation
 595972 possibly invalid search in mime_info_cache_dir_add_...
 596561 C99 style of declaration of variable in gmessages.c
 596314 g_utf16_to_utf8 returns an invalid UTF8 string
 596748 g_async_result_get_source_object returns a new ref
 593809 Nautilus does not restore the position of the icons...
 593775 uses inotify_init1 unconditionally

* Updated translations:
 Bengali
 Hebrew


Overview of Changes from GLib 2.21.6 to GLib 2.22.0
===================================================

* Add gdb python macros to make gobject debugging more pleasant

* Bugs fixed:
 579050 Allow making selected critical and warning messages non-fatal
 594759 g_socket_send_message fails due to invalid sendmsg params
 593941 GNetworkAddress skipping addresses when enumerating
 594597 Fix build with srcdir != builddir
 595619 Include gdb pretty printers

* Changes that might affect bindings:
 - The error parameter of g_simple_async_result_set_from_error has been
   made const.

* Updated translations:
 Assamese
 Bengali India
 British English
 Bulgarian
 Catalan
 Czech
 Danish
 Finnish
 Galician
 Greek
 Gujarati
 Hindi
 Japanese
 Kannada
 Malayalam
 Marathi
 Norwegian bokmål
 Oriya
 Polish
 Punjabi
 Romanian
 Serbian
 Simplified Chinese
 Slovenian
 Spanish
 Tamil
 Telugu
 Thai
 Traditional Chinese
 Ukrainian
 Vietnamese


Overview of Changes from GLib 2.21.5 to GLib 2.21.6
===================================================

* Minor API additions:
  g_mkstemp_full is a variant of g_mkstemp that allows to specify flags
  and permissions

* Bugs fixed:
 593232 g_rand_new: read no more than requested from /dev/urandom
 591995 use saved errno
 589491 g_time_val_from_iso8601 doesn't handle some cases
 593406 Permissions set to 777 after copying via Nautilus
 594034 Add g_mkstemp_full()

* Updated translations:
 Assamese
 Basque
 Brazilian Portuguese
 Czech
 Estonian
 French
 German
 Hungarian
 Italian
 Kannada
 Malayalam
 Marathi
 Norwegian bokmål
 Oriya
 Portuguese
 Swedish
 Tamil
 Turkish


Overview of Changes from GLib 2.21.4 to GLib 2.21.5
===================================================

* A performance problem with trashing of many files has been fixed

* GResolver now invalidates the libc resolv.conf cache as needed

* Minor api additions:
 - g_cancellable_make_pollfd returns a boolean now. And there is a
   new function g_cancellable_release_fd that can be used to released
   the resources used by a GCancellable.

* Bugs fixed:
 589988 Compilation error on Solaris 9 (missing stdint.h)
 588901 gtcpconnection.c won't compile
 584246 GResolver needs to call res_init() when network state changes
 591714 Figure out failure handling for g_cancellable_make_pollfd()
 591532 redundent '/' returned from g_file_resolve_relative_path
 591378 Use MSG_NOSIGNAL in GSocket if it's available
 589649 API documentation migration for Base64 Encoding
 591840 configure fails with autoconf 2.64

* Updated translations:
 Basque
 Brazilian Portuguese
 Bulgarian
 Danish
 Estonian
 Finnish
 Galician
 Gujarati
 Hndi
 Irish
 Japanese
 Korean
 Norwegian bokmål
 Polish
 Portuguese
 Punjabi
 Spanish
 Swedish
 Telugu
 Traditional Chinese
 Thai


Overview of Changes from GLib 2.21.3 to GLib 2.21.4
===================================================

* GTree is now refcounted

* Bugs fixed:
 587938 Undocumented limitation for g_str_equal
 587773 refcounts for GTree

* Updated translations:
 French
 Hebrew
 Norwegian bokmål
 Spanish
 Swedish
 Traditional Chinese
 Ukrainian


Overview of Changes from GLib 2.21.2 to GLib 2.21.3
===================================================

* GMappedFile is refcounted now

* Mainloop: It is now possible to set per-thread default contexts,
  with g_main_context_push_thread_default.

* glib-mkenums supports a @basename@ substitution, in addition
  to @filename@.

* GIO:
 - Vfs implementations can support storing of per-file metadata.
 - GCancellable can now be subclassed.
 - Unmount and eject methods now optionally allow interaction, via
   variants that take a GMountOperation object.

* Bugs fixed:
 556706 Inconsistent help arguments -h, -?
 579449 FileChoosers no longer work if an idle handler is active
 579933 mainloop FD_CLOEXEC has a race condition
 579984 alternate GMainContext support
 585937 gio/gsocket.c (glib 2.21.2) does not compile (Windows/mingw)
 586675 Runtime library location
 586797 Add GCancellables to GSocket ops
 586868 g_filename_complete_get_completions doesn't always return...
 587415 g_resolver_lookup_by_name_finish returns a freed list
 587434 regression tests fail, at least on x86_64
 586928 Avoid g++ warning in g_error()

* Updated translations:
 Estonian
 Hebrew


Overview of Changes from GLib 2.21.1 to GLib 2.21.2
===================================================

* GIO:
  - g_socket_speaks_ipv4 is a new function to check if a socket can
    speak IPv4.
  - g_socket_listener_add_address gained a new effective_address out
    parameter.
  - GIO now returns special icons for XDG user directories, by the
    name folder-music, folder-documents, etc.
  - GIO gained support for starting/stopping of drives, which can be used
    in connection with external hard disk enclosures, disk arrays, iSCSI
    devices, etc. See g_file_start/stop_mountable.

* GLib:
 - g_reload_user_special_dirs_cache is a new function to force GLib to
   reload the XDG user directory mapping from disk.

* Bug fixes:
 584574 glib compile failure on Mac OS X with gunixresolver.c and...
 585566	GSocketListener API issues
 584255	Incorrect freeing of thread pool in GThreadedSocketService
 585088	g_string_chunk_insert_len stops at nul bytes
 585360	Monitor fontconfig configuration files using gio causes m...
 580103	Terminal starts on Display :0.0 when started on :0.1 in D...
 580301	network: a few issues on old darwin
 583398	SRV weight sorting is incorrect
 584176	build fixes on FreeBSD
 585189	g_cancellable_reset() must be called in same thread as g_...
 585280	compilation dies on gio/gsocket.c, needs sys/uio.h to con...
 585281	gio/gunixfdmessage.c needs sys/types.h for platforms that...
 585478	don't leak the inotify fd
 585575	g_socket_listener_add_inet_port() doesn't do the right thing
 585599	g_socket_listener_add_socket() consumes the socket
 585676	GEmblem doesn't reference its 'icon' if that is set as a ...
 585717	"bytes" nautilus translation to french is not shown in th...
 541276	XDG directories should have their own icons
 585726	Grammatical error in GList documentation
 585520	Wrong warning option in documentation
 585673	GNOME Goal: Remove deprecated glib symbols
 585591	Starting/stopping drives

* Updated translations:
 Bengali India
 Norwegian bokmål


Overview of Changes from GLib 2.21.0 to GLib 2.21.1
===================================================

* GIO:
 - Support for network IO has been added, including a low-level
   socket API and a high-level API for network connections and
   services.
 - Support for read-write access with GIOStream and its subclasses.
 - GMount gained a pre-unmount signal.

* Bug fixes:
 576104Implement GMount::pre-unmount
 578769 implement GWinHttpFileInputStream::close_fn
 582856	gsocket.c doesn't compile on Solaris
 569375	g[u]intptr undocumented
 573246	[FIX] g_desktop_app_info_dup() can access NULL pointer
 575013	g_cancellable_push_current() does not allow NULL
 577884	live-g-file.c:461: error: format ‘%d’ expects type ...
 578499	g_output_stream_splice and stream closing with gnio strea...
 579558	Application employing gvfs crashes with only libgvfscommo...
 583001	SIGPIPE (grr!)
 583061	Please add convenience function to connect to machines by...
 583198	typo in error message
 583206	use g_set_error_literal where appropriate
 583229	void function g_async_initable_init_async returns value
 583324	locking problem in g_main_context_iterate()
 583408	void function g_socket_control_message_serialize returns ...
 578786	wrong and confusing error message
 583205	g_inet_address_to_bytes has no length outparam
 583196	mem leak in keyfile test
 583663	GSocketType enum ends with a comma
 569024	Make g_error_new_valist public
 569376	missing G_G[U]INTPTR_FORMAT
 580347 off-by-1 bug in GWinHttpFile

* Updated translations:
 Oriya
 Spanish
 Valencian-Catalan


Overview of Changes from GLib 2.20.x to GLib 2.21.0
===================================================

* GIO:
 - New helper functions g_cancellable_connect/disconnect to avoid
   race conditions when connecting to the "cancelled" signal on
   GCancellable.
 - New types and methods for dealing with IPv4 and IPv6 addresses (and
   UNIX domain socket addresses under UNIX). This does not include code
   for actual socket I/O.
 - GResolver provides asynchronous and cancellable APIs for resolving
   hostnames, reverse lookup of IP addresses and resolving SRV records.

* Glib now provides hash and comparison functions for int64 and double
  types, suitable for use with GHashTable.

* GArray, GPtrArray and GByteArray can be ref counted now, and have
  boxed types.

* Bugs fixed:
 572844 Helper for GCancellable::cancelled connect/disconnect
 578363 goption docs should be improved
 548466 async/cancellable DNS resolver
 579830 param spec strings should use P_()
 579862 requesting xattr::foo ends up calling getxattr(..., user...
 580453 Hash and equal functions for gint64 and gdouble
 580450 Reference counting and boxed types for arrays
 580194 gresolver doesn't build on Solaris
 580301 network: a few issues on old darwin
 580299 network: include sys/types.h before sys/socket.h to insur...
 572508 gmarkup speedup
 580546 g_strtoull() referenced in documentation...
 580656 g_key_file_set_string_list erroneously asserts list != NULL
 579272 leaks in g_simple_async_result_set_op_res_gpointer


* Updated translations:
 Catalan (ca)
 Pashto (ps)
 Spanish (es)


Overview of Changes from GLib 2.20.0 to GLib 2.20.1
===================================================

* Bug fixes:
 575555 Use fsync() when replacing files to avoid data loss on
 575708 runaway inotify madness
 575270 GVolumeMonitor::mount-pre-unmount not being emitted
 577128 glib make check Failed to execute child process...
 573673 Always show "backup" directories
 578369 g_time_val_from_iso8601() parses timezones incorrectly
 578002 Fix a small typo in GFile docs
 578017 G_DEFINE_TYPE_EXTENDED docs

* Updated translations:
 Arabic
 Assamese
 Basque
 Bularian
 Brazilian Portuguese
 British English
 Catalan
 Danish
 French
 Galician
 German
 Greek
 Hungarian
 Italian
 Japanese
 Kannada
 Lithuanian
 Malayalam
 Norwegian bokmål
 Oriya
 Polish
 Punjabi
 Russian
 Simplified Chinese
 Slovenian
 Spanish
 Swedish
 Tamil


Overview of Changes from GLib 2.19.9 to GLib 2.20.0
===================================================

* Base64 support: Avoid integer overflows. CVE-2008-4316

* Bugs fixed:
 574019 GChecksum: document and guarantee hex characters in lower case
 573454 Unable copy/move files to directories symlinked to gvfs share
 561172 gnome-open fails on local URIs with anchors
 573970 crash in gunixvolumemonitor:update_mounts when unmounting
 573843 g_get_current_dir returns non-absolute path

* Updated translations:
 Assamese (as)
 Bengali (bn_IN)
 Czech (cs)
 Hindi (hi)
 Italian (it)
 Japanese (ja)
 Lithuanian (lt)
 Malayalam (ml)
 Marathi (mr)
 Oriya (or)
 Polish (pl)
 Romanian (ro)
 Telugu (te)


Overview of Changes from GLib 2.19.8 to GLib 2.19.9
===================================================

* GMarkup:
 - Considerable speedup

* GIO
 - Add G_FILE_CREATE_REPLACE_DESTINATION flag to allow replacing
   the destination of a copying operation as if it did not exit before.
 - Be more careful when classifying files as desktop files
 - Support desktop file key X-GIO-NoFuse which disables the use
   of fuse pathnames for %u and %U arguments

* Bugs fixed:
 572672 glib/gthread.c: argument is different type
 572464 Doc for g_file_get_contents
 572151 “it's” and “its” confused in docs and comments
 570501 g_win32_get_system_data_dirs uses invalid conversion...
 167569 g_string_append_printf crashes on win32 when used...
 572508 gmarkup speedup
 560564 Replacing a symlink with its linked file truncates... 
 549298 impossible to copy files with p (pipe) flag
 543183 Clarify docs for g_file_has_prefix
 540461 g_memory_output_stream_get_data_size() doesn't behave...
 573462 GEmblemedIcon leak
 573421 Clarify message format in GMountOperation
 573658 Deadlock in giomodule.c
 556706 Inconsistent help arguments -h, -?
 573527 Wrong shell to run config.status in Makefile.in.in
 573128 A couple of typos in GObject documentation

* Updated translations:
 Catalan (ca)
 British English (en_GB)
 Spanish (es)
 Basque (eu)
 Finnish (fi)
 French (fr)
 Gujarati (gu)
 Hebrew (he)
 Hungarian (hu)
 Korean (ko)
 Maithili (mai)
 Norwegian bokmål (nb)
 Dutch (nl)
 Portugese (pt)
 Swedish (sv)
 Thai (th)
 Traditional Chinese (zh_HK)
 Traditional Chinese (zh_TW)


Overview of Changes from GLib 2.19.7 to GLib 2.19.8
===================================================

* GIO: Fix missing exports of new API

* Fix strict aliasing warnings and violations to make Glib work
  with gcc 4.4


Overview of Changes from GLib 2.19.6 to GLib 2.19.7
===================================================

* GIO
 - GFile gained an attribute for the actual file size in bytes
 - GMountOperation gained an "aborted' signal that allows to abort
   a mount operation from the backend side

* Bugs fixed:
 523742 Use noinst for non-installable libraries
 566747 URIs opened with firefox %u load as local files
 541225 Can't compile gio on AIX duplicate case value in gioerror.c
 571598 GAsyncResult with NULL gobject
 505042 add file attribute for actually used file size in bytes

* Updates translations:
 Basque (eu)
 Gujarati (gu)
 Italian (it)
 Japanese (ja)
 Norwegian bokmål (nb)
 Dutch (nl)
 Portugese (pt)
 Thai (th)
 Vietnamese (vi)


Overview of Changes from GLib 2.19.5 to GLib 2.19.6
===================================================

* New format macro to print goffset data: G_OFFSET_FORMAT

* GIO: 
 - Add a GFilter{Input,Output}Stream::close-base-stream properties which
   determine whether the base stream will be closed when the filter stream
   is finalized.
 - g_data_input_stream_read_line and ..._read_until have asynchronous
   variants now.

* Bugs fixed:
 568294 A wrong reference in the description of g_bookmark_file_...
 563141 RFE: define G_OFFSET_FORMAT
 569105 g_time_val_to_iso8601() assumes time_t==long
 568394 dropping the last reference to a stream filter closes...
 568741 g_buffered_input_stream_fill_async doesn't work
 568723 g_buffered_input_stream_fill_async doesn't take count == -1
 568575 _async functions for GDataInputStream

* Updated translations:
 Bulgarian (bg)
 Finnish (fi)
 Hungarian (hu)
 Oriya (or)
 Swedish (sv)
 Traditional Chinese (zh_HK)
 Traditional Chinese (zy_TW)


Overview of Changes from GLib 2.19.4 to GLib 2.19.5
===================================================

* Update included PCRE to 7.8

* g_base64_decode_inplace: New function to do base64 decoding in place

* Bugs fixed:
 567138 get_package_directory_from_module() does not free ...
 566569 gregex docs clarification
 566573 g_match_info_fetch_pos docs
 564728 Add function to decode base64 encoded data in place
 567838 G_STRUCT_OFFSETOF fails to compile under icc 9.1
 567977 textdomain() macro should not return NULL ...
 512779 --disable-regex breaks compilation
 566770 error code 0 for Too many open files is useless
 565484 g_content_type_guess passes non-UTF8 text to XDG ...

* Updated translations:
 Catalan (ca)
 Spanish (es)
 Italian (it)
 Swedish (sv)

 
Overview of Changes from GLib 2.19.3 to GLib 2.19.4
===================================================

* GIO:
  - Use O_NOATIME when sniffing mimetypes
  - Add a convenience method to check if a GSimpleAsyncResult
    is valid

* Bugs fixed:
 560676 function access for g_threads_supported
 565905 There is no g_context_group_set_translation_domain
 564210 SUN Studio 12 has supported visibility attribute
 565136 GObject's "notify" signal parameters are wrong in gtk-doc
 565831 error in interface creation sample
 566348 g_file_open_tmp uses the wrong g_mkstemp on win32
 566064 Add NOATIME flag to query_info_flags
 566170 g_async_result_verify_source_object

* Updated translations:
 Spanish (es)
 Norwegian bokmål (nb)
 Brazilian Portugese (pt_BR)
 Simplified Chinese (zh_CN)


Overview of Changes from GLib 2.19.1 to GLib 2.19.3
===================================================

* Bugs fixed:
 508021 Add support for the CRIS and CRISv32 architectures
 526320 should not list mounts that the user doesn't have permission to use
 558458 Cannot build gio tests on Solaris using SUN cc
 555465 GUnix{Input,Output}Stream lacks fd/close_fd_at_close property
 558298 Hide ecryptfs mounts
 515777 incorrect date&time on copy
 562452 Ensure we return G_IO_ERROR_CANCELLED if cancelling
        g_simple_async_result_run_in_thread
 473150 g_type_module_use inconsistently increases the use
        counter in case of error
 563150 G_GU?INT*_MODIFIER/FORMAT docs
 563156 Document printing and scanning gunichar values

* Updated translations:
 Hebrew (he)
 Italian (it)
 

Overview of Changes from GLib 2.19.0 to GLib 2.19.1
===================================================

* GIO: 
  - g_icon_to_string, g_icon_new_for_string: GIcon serialization support
  - G_FILE_ATTRIBUTE_PREVIEW_ICON: new file attribute for preview images
  - g_app_info_get_commandline: new function to get the full commandline
  - g_mount_shadow, g_mount_unshadow, g_mount_is_shadowed: New functions 
    to 'shadow' mounts (i.e. hide them from the UI when they already
    have a different representation, like a bookmark) 

* Bugs fixed:
 556186 gpoll.h breaks gmain.h inclusion
 557087 mem leak in g_content_types_get_registered
 556921 gpoll.h breaks hal compilation
 557210 g_compute_checksum_for_* asserts with less than 2 bytes
 558381 Add support for compile time assertions
 558185 'parent' variable in g_local_file_get_child_for_display_name()
        hits g_object_unref(NULL) assertion
 558513 g_warn_if_fail FIXME in gtestutils
 558672 NULL key lookup using g_hash_table_lookup_extended() 
 555740 gicon serialization
 557182 preview functionality
 528320 Incorrect icons displayed for files with custom mimetype icons
 556910 Memory leak: sub
 557592 Missing include in gwinhttpfile.c
 556415 Crash on Windows 2000 in g_winhttp_vfs_init()
 555935 Clarify the mechanism of overwriting properties
 552776 ac_cv_func_posix_getgrgid_r not mentioned
 559448 GObject Reference Manual (typo)
 561212 GFileReadMoreCallback API doc refers to non-existant function
 560569 gkeyfile doesn't use the set list_separator in some cases
 560568 gkeyfile docs buglet
 559413 g_option_group_set_error_hook docs buglet
 562378 callback return value not respected for callback option
        with no arg
 559110 Do not include libintl.h after glibintl.h
 557603 carbon check output misplaced
 562544 g_key_file_get_string and g_key_file_get_value
        documentation does not explain the difference
 547264 Missing "no flags" flag
 562638 GDebugKey key member should be const
 562639 g_parse_debug_flags() parsing "help"
 562549 g_byte_array_free should tell how free data
 559452 GObject Reference Manual (typo)
 559462 GObject Reference Manual (typo)
 559517 GObject Reference Manual (typo)
 562538 GObject interface tutorial shouldn't finalise with
        "Please forget everything"
 561352 Leak of icon description
 561375 Leaks mountpoint description
 561807 inotify_sub.c: dup_dirname() fails to remove trailing '/'
 562393 g_buffered_input_stream_read_byte broken if data available
 541715 win32 : patch for warnings and signature problems in recent code
 547481 g_data_input_stream_read_line behaves not as stated in the docs
 548163 Nautilus displays wrong error message for too long file names
 559633 gtk_image_new_from_gicon does not always work for .desktop files
 555486 – No way to recover command line from GAppInfo

* Translation updates:
 Spanish (es)
 Ukrainian (uk)


Overview of Changes from GLib 2.18.1 to GLib 2.19.0
===================================================

* Rewrite GHashTable to use open addressing with quadratic probing instead 
  of chaining. This has the potential to reduce memory fragmentation 
  significantly, while being slightly faster due to better locality and 
  no need to call alloc/free functions for nodes. Benchmarks suggest it 
  also uses less memory overall.

* Make g_poll available as public api

* New macros g_assert_error and g_assert_no_error to assert 
  that a GError is set or unset

* g_cancellable_make_pollfd: New method to make a GPollFD for a cancellable

* g_app_info_can_delete, g_app_info_delete, g_app_info_reset_type_associations:
  New functions to clean up app infos and content types

* When launching applications, always pass fuse file:// uris when possible,
  and let gio convert such uris back to gio uris.

* Bugs fixed:
 505361 gunixinputstream.c assumes poll() available
 509446 portable blocking gio cancellation
 553820 gpoll.c: undeclared identifier
 553724 python interpretter path not patched in correctly
 553857 gbacktrace.h requires signal.h
 553447 g_assert_no_error()
 554092 glib doesn't return G_FILE_ERROR_NOENT et al on OS X
 528670 Always pass file:/// uri's in GAppLaunchContext
 555224 Improve g_format_size_for_display doc
 555309 giochannel breaks on error
 554790 g_convert() misbehaves with winiconv versions
 555314 mem leak in gmarkup
 555313 GFileAttribute boxed type get_type function should...
 552861 glib-2.0.m4 calls system(3) without storing its result
 554557 Patch to fix gcc warnings about missing format specifiers
 552107 Small libtool fixes
 551355 Make glib build with libtool 2.2
 555311 format not a string literal and no format arguments
 556101 static mutex yields warnings with g++
 556186 gpoll.h breaks gmain.h inclusion
 526456 Open addressing in GHashTable
 553426 cancellable clarifications
 545350 GAppInfo deletion
 545351 Reset associations for content type
 552168 volume's mount not mounted after g_volume_mount_finish
 554970 segfault when update-desktop-database is not available...
 554745 GFileAttributeInfoList should be boxed
 555121 Improved build-time handling of gio module-dir
 555711 Wrong fallback order of mimetype icons
 555331 Deprecate adoption of mounts
 556335 make check fails in abicheck.sh
 556334 Warning when building without selinux support
 556422 g_file_enumerator_next_file: unclear...

* Updated translations:
 Arabic (ar)
 Danish (da)
 Polish (pl)
 Brazilian Portugese (pt_BR)
 Romanian (ro)
 Russian (ru)


Overview of Changes from GLib 2.18.0 to GLib 2.18.1
===================================================

* Bugs fixed:
 550433 g_test_init doesn't recognize --help
 523463 Core dump in gmain.c:2482:IA__g_main_context_check
 551228 G_STRFUNC on recent Sun compiler should be expanded...
 551410 gtestutils.c: using printf without prototype
 551731 g_date_set_time[_t] docs should mention what timezone
 548321 <string.h> is not included in gi18n-lib.h
 551149 xdgmime mem leak
 550647 synchronous pipe I/O when reading mount reply
 551887 Docs for g_desktop_app_info_new_from_filename aren't...
 551681 g_content_type_guess() too naive with filenames
 552352 g_app_info_launch doesn't work if "Path" key...
 551408 gmodule.def generated to builddir...
 552359 g_file_info_get_icon should return GThemedIcon, and...

* Updated translations:
 Arabic (ar)
 Bengali India (bn_IN)
 British English (en_GB)
 Hindi (hi)
 Croatian (hr)
 Korean (ko)
 Oriya (or)
 Turkish (tr)
 Telugu (te)


Overview of Changes from GLib 2.17.7 to GLib 2.18.0
===================================================

* Win32:
  - rework the g_poll() implementation to match poll() semantics more closely

* Bugs fixed:
 324234 Using g_io_add_watch_full() to wait for connect() to return...
 548278 Async GETs connections are always terminated unexpectedly...
 500246 Bug fixes for giowin32
 523939 Example program for GValue
 550096 GBookmarkFile parser is not forward compatible
 550040 Move GString, rand and printf tests to the unit test framework
 550104 trivial documentation fix for g_get_home_dir
 548988 g_file_replace fails on Windows when the target file exists
 550059 Wrong docs for g_emblemed_icon_add_emblem
 548800 Missing a g_object_get_type function
 550056 Missing documentation for g_emblemed_icon_get_emblems

* Updated translations:
 Bulgarian (bg)
 Czech (cs)
 German (de)
 Estonian (et)
 Basque (eu)
 French (fr)
 Hebrew (he)
 Hungarian (hu)
 Italian (it)
 Japanese (ja)
 Lithuanian (lt)
 Maithili (mai)
 Dutch (nl)
 Swedish (sv)
 Thai (th)
 Ukrainian (uk)
 Vietnamese (vi)


Overview of Changes from GLib 2.17.6 to GLib 2.17.7
===================================================

* More fixes for 64-bit Windows

* GIO
 - Add a vfs implementation for HTTP and HTTPS URIs on Windows

* Bugs fixed:
 546329 API docs for g_utf8_normalize() are incorrect
 546876 Modify GMarkup parser to accept &#x1; .. &#x1f;
 547200 g_utf8_find_next_char() issues
 547637 unconditional #include of sys/statfs.h in configure
 547337 G_DISABLE_DEPRECATED breaks tests build
 547832 gtk+-2.12.11 fails to build - AC_PROG_MMAP too strict
 502498 Test framework assertion failures should follow gcc
 546371 Improve docs re g_file_monitor
 546483 GThemedIcon:use-default-fallbacks is not readable without...
 546132 GFileIcon is bindings-unfriendly
 542156 zfs mount in home directory shown on nautilus desktop 
 535124 umask 002 not being applied for new directories...
 547080 g_file_copy leaks expected errors
 546582 Callbacks from GFileMonitor present a GFile...
 547262 Missing link in the docs

* Updated translations:
 Arabic (ar)
 Catalan (ca)
 Spanish (es)
 Basque (eu)
 Finnish (fi)
 Galician (gl)
 Hebrew (he)
 Marathi (mr)
 Norwegian bokmål (nb)
 Portugese (pt)
 Brazilian Portugese (pt_BR)
 Swedish (sv)
 Thai (th)


Overview of Changes from GLib 2.17.4 to GLib 2.17.6
===================================================

* Fix problems on 64-bit Windows

* g_markup_context_get_user_data: New function to access
  the user_data outside of callbacks

* GIO
 - g_mount_guess_content_type_sync: synchronous version of
   g_mount_guess_content_type
 - GEmblem: A GIcon implementation that adds emblem-related
   metadata to icons
 - GEmblemedIcon: A GIcon implementation that can add emblems
   to icons

* Bugs fixed:
 544088 option_test_LDADD is left in tests/Makefile.am
 544465 gmarkup makes it hard to use pre-rolled parsers
 545485 Implicit declaration of utime()
 545798 "Since: 2.18" mark is missing in g_set_error_literal...
 544140 fam-helper 64-bit issue
 529694 SELinux context setting support
 545157 wrong/no list of "open with" applications for .cc...
 545203 gfile.c: argument is different type
 545457 gdmsetup crashed with SIGSEGV in g_unix_mount_guess...
 544177 Fix trivial cut and paste error in documentation
 545395 Language tweak for g_value_set_string* docs
 541036 Gnumeric crashes when trying to open Desktop...
 546079 leak in xdgmime
 545395 Language tweak for g_value_set_string* docs
 546017 Don't copy attributes when copying a symlink

* Updated translations:
 Arabic (ar)
 Estonian (et)
 Galician (gl)
 Italian (it)
 Japanese (ja)
 Korean (ko)
 Norwegian bokmål (nb)
 Pashto (ps)
 Portugese (pt)


Overview of Changes from GLib 2.17.3 to GLib 2.17.4
===================================================

* GIO:
 - New API to handle content types: g_mount_guess_content_type,
   g_content_type_guess_for_tree.
 - Export the eject-button signal on the volume monitor class
 - New API to enable out-of-process volume monitors: 
   g_volume_get_activation_root

* GObject:
 - New API to handle signals without slots in the class structure:
   g_signal_new_class_handler, g_signal_override_class_handler   

* Internationalization:
 - Add an NC_ macro that is a no-op equivalent of C_

* GMarkup:
 - Add two new functions g_markup_parse_context_push,
   g_markup_parse_context_pop to support "subparsers"

* Bugs fixed:
 541208 Functions to easily install and use signals without...
 541507 Ambiguous description of assigned characters in the...
 543040 async reading on dummy file will crash on GIO_USE_VFS=local
 543560 enable gio-FEN back-end warnings on Solaris will crash...
 528317 GRegex does not allow recursion limit
 337518 GMarkup: Subparser support
 541794 drive-eject-button signal
 541793 activation root for volumes
 467707 test_iconv_state() in tests/convert-test.c fails on AIX 5.3
 428048 2 of 51 tests fail on Solaris
 542332 small fix for error message in GMarkup
 482413 get_contents_stdio -- overflow and memory corruption
 406120 g_ascii_strtod
 334234 "printf" format error
 536996 Missing noop i18n macro equivalent to C_
 540616 mem leak in filechooser button
 539229 gobject-query calls itself query
 521589 [RFC] gobject documentation should mention Vala
 543168 Description of G_SLICE=debug-blocks discourages its use
 543220 Case collision on gio-extension-points.html
 530759 update the gobject tutorial to the XXI century
 535223 gbookmark file inefficiency ...
 543504 crash in Epiphany Web Browser: Opening local file

* Updated translation:
 German (de)
 Estonian (et)
 Pashto (ps)
 Albanian (sq)
 Thai (th)
 Traditional Chinese (zh_HK)
 Traditional Chinese (zh_TW)


Overview of Changes from GLib 2.17.1 to GLib 2.17.3
===================================================

* PCRE
 - fix for CVE-2008-2371 

* Bugs fixed:
 538119 glib's mainloop leaks a pipe to sub-processes
 537635 Corrections and improvements to g_time_val_{to,from}_iso8601
 539067 The document g_io_channel_win32_new_fd() says...
 535949 annotate g_strip_context and g_dpgettext with G_GNUC_FORMAT
 539123 annotate g_d[n]gettext with G_GNUC_FORMAT
 539074 Cannot get exit status with g_spawn_command_line_sync
 316221 G_LOCK warns about breaking strict-aliasing rules
 539770 migrate gstrfunc unit tests to gtest
 539626 Update docstrings for g_object_freeze_notify and g_object_thaw_notify
 538044 unconditional use of LC_MESSAGES
 540545 Monotonic time and timer offset
 535947 want g_set_error_literal
 539999 glibconfig.h: add GLIB_USING_SYSTEM_PRINTF 
 536252 GFileEnumerator should allow access to the containing GFile
 538362 Get Win32 icons back in the file chooser
 540802 g_list_prepend doesn't concat lists
 540423 unrecoverable error after g_seekable_truncate
 538836 make check failure on PPC and ALPHA: pltcheck.sh on g_atomic_pointer_get
 539090 g_content_type_from_mime_type() should unalias
 540331 g_file_append_to () documentation: can return NULL
 534639 add g_desktop_app_info_new_from_keyfile
 536733 gio build failure on Irix
 536160 Add g_file_monitor()
 538127 FileChooser broken on win32
 531476 /live-g-file/test_traverse_structure test fails on Mac HFS+
 538564 gio should have gio-types.h
 540047 glib-genmarshal.c: '#include <io.h>' is too before

Updated translations:
 Korean (ko)
 Occitan (oc)


Overview of Changes from GLib 2.17.0 to GLib 2.17.1
===================================================

* New function: g_utime(), a gstdio wrapper for utime()

* New functions: g_dgettext() and g_dngettext(), wrappers
  for corresponding gettext functions with added functionaliy

* Support the latest version of the shared-mime spec, including
  icons for mime types 

* New function: g_themed_icon_prepend_name()

* Bugs fixed: 
 535418 Please document which glib version defines goffset
 528715 Misprint in the description of the interface g_type_class_add_private
 528714 Misprint in the description of the interface g_param_spec_flags
 537260 Doc bug in G_TYPE_INSTANCE_GET_CLASS()
 530527 Misprint in the description of the interface 
        g_cclosure_marshal_VOID__FLAGS
 530526 Misprint in the description of the fields 'class_init' and 
        'class_finalize' of the structure GTypeInfo
 528719 Improvement to the documentation of the "g_object_connect" interface
 528172 gtk_signal_handlers_unblock_* functions return value
        amount of matched signals, not amount of actually unblocked
 528717 Misprint in the description of the parameter 'type_id' for 
        the interface g_type_register_fundamental
 528716 Misprint in the description of the parameter 'iface_data' for 
        the callback types GInterfaceInitFunc and GInterfaceFinalizeFunc 
 537555 GObject instantiation not thread safe
 537546 'desktop' shortcut in file chooser looks like a generic folder
 537392 Additional colon in xattr name
 536641 Filesystem querying in gio does not list AFS and autofs file systems
 528600 g_dummy_file_get_parent("scheme://example.com/")
 503071 Application direction changes to right to left even if theres no 
        translation
 502511 g_assert_cmphex prints invalid message
 338162 Use po/LINGUAS
 314453 Nautilus crashes in Solaris when browsing the attached file
 529321 make check fails in glib/pcre
 455215 g_get_user_special_dir: no reference about G_USER_DIRECTORY_DOWNLOAD 
        fallback to $HOME/Desktop if xdg-user-dirs is not in use
 498732 g_key_file_to_data cannot fail
 511367 add g_file_make_directory_with_parents
 531900 Use __builtin_offsetof for G_STRUCT_OFFSET if building with 
        gcc 4.0 or newer
 536158 also bump GHashTable version when a node is removed via
        g_hash_table_iter_remove()/g_hash_table_iter_steal()
 531403 g_utf8_collate broken on Mac
 535628 test/patterntest.c still includes gpattern.h directly
 535625 alias.h:2648: error: 'utime' undeclared here (not in a function)

* Translation updates:
 Arabic (ar)
 German (de)
 Italian (it)
 Norwegian bokmål (nb)
 Thai (th)


Overview of Changes from GLib 2.16.x to GLib 2.17.0
===================================================

* Update to Unicode 5.1

* Update included libcharset to the one shipped with libiconv 0.12

* Update included PCRE to 7.7

* Enforce that only toplevel headers are directly included.
  This is turned on by default for GObject and GIO. To turn
  it on for GLib, define G_DISABLE_SINGLE_INCLUDES.

* Fix library version of GIO.  GLib 2.16 shipped with libgio-2.0.so.0.0.0

* On Solaris, use FEN for file monitoring in GIO

* Use the GIO_EXTRA_MODULES environment variable to find
  additional GIO modules 

* G_GNUC_ALLOC_SIZE: New macro that wraps the gcc alloc_size
  function attribute

* g_checksum_reset: New function to reset the state of a GChecksum 

* g_unix_mount_monitor_set_rate_limit: New function to limit the 
  rate at which events are reported

* g_file_query_file_type: New utility function to query the type of
  a file

* g_memory_output_stream_get_data_size: New function to obtain the
  size of the written data.

* Bugs fixed:
 522292 Gives warnings in glib/gutils.h with GCC in C99 mode
 523298 win_iconv can't convert from UTF-8 to GB18030 (or vice versa)
 518160 replace two g_strdup_printf calls in GBookmarkFile
 523877 gbookmarkfile: avoid using g_string_append_printf() and
        other optimizations 
 525192 100% CPU if run main loop with no IO sources
 315437 extern inline -> static inline
 524314 g_convert() on Win32 implicitly converts full width
        alphanumerics into half width
 525732 Error in documentation for g_list_first
 525674 A typo in gmarkup.c
 448943 g_timeout_add_seconds() problems
 525972 UCS-4 not in the new win_iconv implementation
 526619 make test-report crash
 491554 Update to Unicode 5.1.0
 519137 g_slice_dup macro needs cast for 64-bit platform
 528752 Win32 build and SSL not working
 530457 G_USER_DIRECTORY_DOWNLOAD folder improperly mapped
 528667 Typos in testing module documentation
 459905 Bug in wcwidth data
 534085 g_unichar_iswide_cjk() has a totally wrong table
 501651 Update glib/libcharset
 519026 G_STMT_START/G_STMT_END test a non-existent preprocessor symbol
 534319 GLib's .pc files could use Libs.private
 534137 Typo in g_spawn_async_with_pipes doc
 517419 gio win32 directory monitor
 526796 Wrong order of arguments in g_file_copy's fallback
 530196 _g_local_file_has_trash_dir() doesn't handle st_dev == 0
 532965 Should not return filesystem::free for certain file systems
 525553 fix typo and nitpicking in GArray documentation
 526572 Missing * in declaration of parent_class in Object
        Destruction section of GObject Reference Manual
 528648 Extra >s in Object Construction section
 535021 g_param_spec_internal documentation should
        describe purpose of nick and blurb
 521513 Firefox crash when using file picker
 528433 gdesktopappinfo snafu ...
 533369 API g_file_info_get_attribute_string () unables to get "...
 521045 glib f_fstypename miscellany
 521672 compile error
 521946 control rate limit on GUnixMountMonitor
 522335 Fails to build: glib/gtester.c:276: error: 'ARG_MAX' unde...
 523015 Implement sliding window based upload operation
 523019 Use new GCC 4 feature
 523338 list nfs4 as a nfs mount type
 524350 Make glib build without NLS again
 524579 g_file_copy reports wrong total on progress callback for ...
 524742 A typo in gtestutils.c.
 524950 Minor documentation typos.
 525866 the user directory should not be considered as a mount to...
 526320 should not list mounts that the user doesn't have permiss...
 527132 nautilus crash when making ftp connection
 532852 CRITICAL **: totem_pl_parser_parse_with_base: assertion `...
 534759 Build failure in gio
 534764 Typo in error produced by g_file_make_directory
 521851 Redudant tests in gunixmounts.c
 524344 glib/gthread.h still use G_GNUC_PRETTY_FUNCTION
 525060 glib fails to build with -DG_DISABLE_ASSERT in CPPFLAGS o...
 534177 Invalid description of the interface g_cclosure_marshal_S...
 520715 Add GFile method g_file_query_file_type
 523039 nautilus can't access to trash/computer/network if gvfs i...
 
* Updated translations:
 Arabic (ar)
 Bulgarian (bg)
 Catalan (ca) 
 Czech (cs)
 Greek (el)
 Candian English (en_CA)
 British English (en_GB)
 Spanish (es)
 Estonian (et)
 Basque (eu)
 Galician (gl)
 Hebrew (he)
 Hungarian (hu)
 Japanese (ja)
 Lithuanian (lt)
 Norwegian bokmål (nb)
 Dutch (nl)
 Occitan (oc)
 Portugese (pt)
 Russian (ru)
 Slovak (sk)
 Albanian (sq)
 Swedish (sv)
 Turkish (tr)
 Vietnamese (vi)


Overview of Changes from GLib 2.16.0 to GLib 2.16.1
===================================================

* Fix a crash in g_themed_icon_new

* Update the included PCRE to 7.6


Overview of Changes from GLib 2.15.6 to GLib 2.16.0
===================================================

* Fix the definition of G_INLINE_FUNC to work with gcc 4.3.0

* GIO:
 - Add missing GMountMountFlags argument to g_unix_volume_mount
 - Fix the adopt_orphan_mount vfunc to take a volume monitor 
   reference
 - Add properties to GThemedIcon for bindings sake

* Bugs fixed:
 520484 gvfsd-trash crashed with SIGSEGV in g_path_is_absolute()
 510855 g_checksum_update(): Take -1 for length.
 517676 g_themed_icon_new*() do more than call g_object_new().
 518816 should handle rmdir returning EEXIST correctly
 519352 g_[s]list_delete_link() docs
 519489 Fixes for sparse warnings in gio
 520169 add monitor argument to vfunc for GVolumeMonitor
 520700 Add type check in g_file_query_exists
 521145 FILE_READ_ONLY_VOLUME not present on Mingw32
 518720 No MIME type for empty files
 521013 in documentation, goffset doesn't say "Since 2.x"
 521028 Missleading error messages from g_io_channel_set_encoding()
 517484 GMainLoop could set the thread "Alertable" for APCs to be... 

* Updated translations:
 Assamese (as)
 Bengali India (bn_IN)
 Czech (cs)
 German (de)
 Spanish (es)
 Estonian (et)
 Finnish (fi)
 French (fr)
 Gujarati (gu)
 Italian (it)
 Lithuanian (lt)
 Malayalam (ml)
 Marathi (mr)
 Norwegian bokmål (nb)
 Romanian (ro)
 Russian (ru)
 Slovak (sk)
 Ukrainian (uk)

 
Overview of Changes from GLib 2.15.5 to GLib 2.15.6
===================================================

* GIO:
 - New file attributes: trash::item-count, filesystem::use-preview
 - Rename g_file_contains_file to g_file_has_prefix
 - g_file_query_filesystem_info grew async variants
 - g_themed_icon_append_name: new convenience function
 - g_content_type_get_icon is implemented now
 - Only show mounts in /media and ~
 - g_file_contains_file has been renamed to g_file_has_prefix

* Win32:
 - g_win32_get_package_installation_directory_of_module: new function
   which supersedes g_win32_get_package_installation_directory
 - Use alertable wait functions so that I/O completion routines or 
   user-mode Asynchronous Procedure Calls can be run
 - Fix race conditions in g_spawn implementation on win32

* Other:
 - g_uri_get_scheme has been renamed go g_uri_parse_scheme

* Updated translations:
 Arabic (ar)
 Belarusian Latin (be@latin)
 Catalan (ca) 
 British English (en_GB)
 Finnish (fi)
 Galician (gl)
 Hebrew (he)
 Italian (it)
 Kannada (kn)
 Norwegian bokmål (nb)
 Dutch (nl)
 Brazilian Portugese (pt_BR)
 Vietnamese (vi)


Overview of Changes from GLib 2.15.4 to GLib 2.15.5
===================================================

* Update the included PCRE to 7.6

* GIO:
 - g_volume_should_automount: new function to determine if a volume
   should be mounted automatically
 - g_file_query_default_handler: new convenience function to get
   the default handler for a file
 - g_app_info_launch_default_for_uri new convenience function to
   launch the default handler for a URI
 - Use mimeapps.list and defaults.list as discussed on xdg list
   recently
 - g_app_info_get_default_for_uri_scheme has a real implementation
   now (gvfs provides a GConf-based implementation)
 - There is the beginning of a test suite
 - standard::description:  new file attribute
 - GMountMountFlags flags argument added to mount calls

* GObject:
 - class initialization is now threadsafe

* Updated translations:
  Arabic (ar)
  Catalan (ca)
  Spanish (es)
  Basque (eu)
  Italian (it)
  Japanese (ja)
  Kannada (kn)
  Korean (ko)
  Macedonian (mk)
  Occitan (oc)
  Portugese (pt)
  Brazilian Portugese (pt_BR)
  Swedish (sv)
  Thai (th)


Overview of Changes from GLib 2.15.3 to GLib 2.15.4
===================================================

* G_GNUC_PRETTY_FUNCTION has been deprecated

* GIO:
 - g_file_copy has an async variant now
 - Drives and volumes now have API to get identifiers
   like Hal UDIs or UUIDs.
 - There is now a registration API to let modules register
   extensions they provide, such as volume monitor implementations

* Bugs fixed:
  511807 g_time_val_to_iso8601() uses MT-unsafe gmtime() function
  316260 [patch] Doc patches for gnode (2.8.1)
  385132 solaris gettext support fix
  484261 ./configure check for system PCRE unicode support fails w...
  510292 GOption main help not shown
  511580 Implement g_file_copy_async
  511654 Compile errors due to C99 constructs
  487909 g_utf8_strreverse and combining marks
  512381 unused variable 'is_main_group' 

* Updated translations:
  Arabic (ar)
  Belarusian (be)
  Czech (cz)
  Spanish (es)
  French (fr)
  Galician (gl)
  Portugese (pt)
  Russian (ru)
  Swedish (sv)
  Thai (th)


Overview of Changes from GLib 2.15.2 to GLib 2.15.3
===================================================

* GChecksum:
 - g_checksum_update can accept nul-terminated strings
 - The MD5 implementation works correctly on buffers 
   that are longer than 64 bytes

* GIO:
 - Don't include a copy of the inotify headers, rely on system headers
 - g_file_find_enclosing_mount has an async variant now
 - Reduntant seek API on file streams has been removed

* Bugs fixed:
  508602 gmemory{in|out}putstream.c: unknown pointer size
  508771 There is no g_file_test/exists() for GFile
  508773 g_uri_escape_string() documentation unclear.
  509465 AM_PATH_GLIB_2_0 doesn't support gio
  509626 async functions: Document allowed NULL callback?
  509990 GSeekable documentation unclear
  510448 No inotify support on ARM or SH5
  510855 g_checksum_update(): Take -1 for length. 

* Updated translations:
  Basque (eu)
  Marathi (mr)
  Swedish (sv)
  Ukrainian (uk)


Overview of Changes from GLib 2.15.1 to GLib 2.15.2
===================================================

* GIO:
 - Mount operation API change: unhandled methods get reported via 
   the reply, rather than by the signal emission return value
 - File monitor API change: Add a GError argument to g_file_monitor_file
 - g_unix_mount_guess_should_display(): new function

* Bugs fixed:
  508224 [PATCH] FAM backend crashes due to double free
  508074 GAsyncResult documentation suggests g_freeing it.
  508108 GFile documentation slightly unclear.
  508309 rpc_pipefs mount points should be hidden
  508378 GFileInfo documentation implies that it changes attribute...
  508719 g_file_get_relative_path fails if parent is root
  508773 g_uri_escape_string() documentation unclear.

* Updated translations:
  Arabic (ar)
  Spanish (es)
  Hebrew (he)
  Italian (it)
  Korean (ko)
  Turkish (tr)


Overview of Changes from GLib 2.15.0 to GLib 2.15.1
===================================================

 * Portability fixes:
 - Assertion functions are marked as noreturn again
 - Handling of inline functions has been fixed to work with gcc 4.3
 - C99 comments have been removed from headers
 - The nonportable sed -i option is no longer used

 * GIO:
  - Clarified the semantics of g_app_info_get_all()
  - API for memory input and output streams has been changed a bit
  - GDirectoryMonitor has been removed; GFileMonitor can monitor
    files and directories now

 * Bugs fixed:
   504829 Invalid environment passed to g_spawn_async in g_desktop_...
   505258 crash in Users and Groups: Adding a user
   505815 g_content_types_get_registered should not g_free keys
   491218 g_timer_new() doesn't initialize timer->end
   315437 extern inline -> static inline
   476856 Inconsistency between standard and implementation of the ...
   480122 g_module_open fails to open modules with ".la" extension
   495589 gspawn.c failing to set FD_CLOEXEC
   500273 doesn't build with --disable-visibility
   504142 Do not show empty groups in --help output
   504879 giofam incorrectly linked
   505042 add file attribute for actually used file size in bytes
   505058 xattr namespace docs
   505674 Misprint in the definition of the macro G_CCLOSURE_SWAP_DATA
   505730 Fails to build on OSX 10.4: _NSGetEnviron not declared
   505887 older darwin lacks lchown
   506374 gmemoryinputstream api
   506461 Conversion of g_assert_not_reached() and friends into fun...
   503051 Small bug in glib interface
   506395 Updates to GIO documentation
   507628 Missing .pc entry for gio linking against glib
   505195 [patch] typo in g_try_new0 docs 
   507822 g{file,directory}monitor changes signal problem
   506377 gmemoryoutputstream write implementation
   507835 bug in gunixinputstream 

 * Updated translations:
   Arabic (ar)
   Belarusian Latin (be@latin)
   Spanish (es)
   Basque (eu)
   Irish (ga)
   Hebrew (he)
   Occitan (oc)
   Vietnamese (vi)


Overview of Changes from GLib 2.14.x to GLib 2.15.0
===================================================

Major new features:

 * GIO: a VFS API, designed to replace GnomeVFS. The GIO implementation 
   in GLib has support for local filesystems. The new, separate gvfs 
   module contains various backend implementations (cifs, ftp, sftp,
   http, ...)

 * GChecksum: provides various hash algorithms, such as MD5, SHA-1
   and SHA-256
 
 * GTest: a test framework 
 
Smaller additions:

 * GHash:
 - GHash has iterators, as an alternative to g_hash_table_foreach

 * GMarkup: 
 - g_markup_parse_context_get_element_stack: New function to
   get the stack of open elements
 - G_MARKUP_PREFIX_ERROR_POSITION: New flag to improve error
   reporting
 - g_markup_collect_attributes: Convenience function for handling
   attributes

* GKeyFile: 
 - Functions that take a GError now return a boolean to indicate 
   success, instead of void
 - Various performance improvements

* GAsyncQueue:
 - g_async_queue_new_full: new function that allows to specify
   a free function for leftover elements
 
* GError:
 - g_prefix_error and g_propagate_prefixed_error: New functions
   to ease error propagation

* Internationalization:
 - C_: A new 2-argument variant of the Q_() macro 
 - Use native character set conversion API on Windows

* GLib builds with automake 1.10

* Bugs fixed:
 455725 specific combination of g_utf8_strlen and g_pattern_match...
 467537 g_convert_with_iconv() not resetting iconv() state correc...
 497033 Commandline option parser should warn about missing optio...
 504527 gchecksum: Conditional jump or move depends on uninitiali...
 445362 Non-numeric local labels in gatomic.c are causing linker ...
 482313 gregex: no way to tell why compilation failed
 317775 main loops continues to run after g_main_loop_quit() has ...
 418778 Insufficient pkg-config version requirement
 436293 g_option_context_new() doc should mention that the string...
 466557 glib-mkenums shifts ARGV[0] to undefined
 468882 GKeyFile doesn't accept "True" as a true boolean value
 469551 application --help messages are garbaged on none UTF-8 lo...
 479724 Memory leak upon calling "g_main_loop_run" in the seconda...
 490061 outptrs uninitialized after g_parse_long_long
 490637 gobject documentation patch
 495294 glib-genmarshal prints warnings but returns 0
 496046 option to prefix location of errors for GMarkup
 498113 tests/regex-test fails on 64bit environment
 500506 Fails to build on OSX 10.4
 500638 gkeyfile speedup ...
 500875 Make check fails as there is no "test" target for "build"...
 502511 g_assert_cmphex prints invalid message
 502927 g_array_index triggers cast aligment warning
 503029 g_time_val_from_iso8601 parse non-ISO8601 dates
 503222 Need context to translate
 503420 gkeyfile leaks a hash table
 503470 Fix build when builddir != srcdir
 504227 Inverse variant for g_test_trap_assert_stdout, g_test_tra...
 71704 	file include order
 491957 Misprint in the specification of the interface "g_main_co...
 491959 Misprint in description of the structure "GThreadPool"
 491965 Mistype in the specification of the function "g_hook_list...
 491966 Misprint in the specification of the interface "g_main_co...
 491968 The documentation does not mention the restriction for th...
 491970 The documentation for the interface "g_date_clamp" is inc...
 491974 The documentation of the interface "g_main_context_iterat...
 491975 The documentation for the interfaces "g_io_channel_read_u...
 491979 Misprint in the description of the interfaces g_key_file_...
 491982 Misprint in the description of the interface "g_key_file_...
 501107 EXTRA_DIST automake warnings
 501997 g_utf8_normalize() returns NULL on invalid string
 502590 C_/g_dpgettext efficiency
 464259 g_set_application_name() docs should say "Since 2.2"
 496518 gbase64.c API doc clarification
 498728 g_key_file_get_*_list should set length to 0 when returni...
 500361 Improve docs for g_array_free() and g_ptr_array_free()
 501853 g_checksum_get_digest docs
 503862 Allow NULL strings in g_parse_debug_string()
 142676 Q_
 367550 Add g_async_queue_new_full() with GDestroyNotify function
 375651 Minor enhancements to GKeyFile API
 443648 MD5 digest support
 449937 Upgrade auto* sources to be clean under automake1.9
 452887 gmarkup context "get element" function is useless when ca...
 491549 [PATCH] Eliminate libiconv dependency on Windows
 500507 GHashTableIter API 

* Translation updates
 Belarusian Latin (be@latin)
 Czech (cs)
 German (de)
 Spanish (es)
 Esperanto (et)
 French (fr)
 Korean (ko)
 Marathi (mr)
 Norwegian bokmål (nb)
 Brazilian Portugese (pt_BR)
 Slovenian (sl)
 Swedish (sv)


Overview of Changes from GLib 2.14.2 to GLib 2.14.3
===================================================

* Update PCRE to 7.4

* Bugs fixed:
 487491 Fix some warnings from sparse
 488068 Small (one-time) memory leak in glib_gettext initialization
 493688 TYPE macro "_get_type ()" is documented wrong

* Updated translations:
 Arabic (ar)
 Belarusian Latin (be@latin)
 Estonian (et)
 Irish (ga)
 Slovenian (sl)

 
Overview of Changes from GLib 2.14.1 to GLib 2.14.2
===================================================

* Bugs fixed:
 476849 Invocation of the interface "g_hook_free" fails in certai...
 359165 marshallers can throw warnings with -Wunused
 477957 more discussion on g_value_set_object vs. g_value_take_ob...
 478459 G_DEFINE_DYNAMIC_TYPE_EXTENDED doesn't work with G_IMPLEM...
 483337 inline is disabled for MSVC when compiling C code
 478349 Broken link to gettext website
 469231 g_spawn optimization for setting all open fds to CLOEXEC 

* Updated translations:
Arabic (ar)
Galician (gl)
Hebrew (he)
Korean (ko)


Overview of Changes from GLib 2.14.0 to GLib 2.14.1
===================================================

* Bugs fixed:
 476840 Invocation of the interface "g_utf8_strreverse" crashes f...
 444765 Fix FIXME in gregex.c when new pcre is out
 464145 g_markup_escape_text Produces Invalid XML
 465625 g_type_default_interface_ref() does not ensure working g_...
 466768 Clearify that comments can be put anywhere in a Key-file.
 474229 The GError documentation should give convention for the G...
 474899 G_BREAKPOINT() docs inaccurate
 475854 Overuse of -lpcre when using system pcre
 473879 Incorrect includes in gregex.c
 468694 Typoes in documentation
 469051 g_snprintf () talks about characters where it probably me...
 457601 Missing arch specific atomic implementation
 475923 Missing pcre flags when static-linking against glib
 475619 glibthread-2.0.la does not list -lpthread

* Updated translations:
 Bulgarian (bg)
 Catalan (ca)
 Danish (da)
 German (de)
 Canadian English (en_CA)
 British English (en_GB)
 Spanish (es)
 Estonian (et)
 Finnish (fi)
 French (fr)
 Gujarati (gu)
 Hungarian (hu)
 Italian (it)
 Georgian (ka)
 Kannada (kn)
 Lithuanian (lt)
 Makedonian (mk)
 Norwegian (nb)
 Dutch (nl)
 Polish (pl)
 Portugese (pt)
 Brazilian Portugese (pt_BR)
 Romanian (ro)
 Russian (ru)
 Albanian (sq)
 Serbian (sr, sr@Latn)
 Swedish (sv)
 Tamil (ta)
 Thai (th)
 Ukrainian (uk)
 Vietnamese (vi)


Overview of Changes from GLib 2.13.7 to GLib 2.14.0
===================================================

* Last-minute API additions:
 - Make g_unichar_combining_class public
 - Add goffset type, add G_MAXSSIZE and G_MINSSIZE

* Update PCRE to 7.2

* Bugs fixed:
 453998 Make _g_unichar_combining_class() public
 462549 gregex.c: variable is declared at middle of block
 417068 g_file_test doc inconsistency

* Updated translations:
 Assamese (as)
 Basque (eu)
 Kannada (kn)
 Malayalam (ml)
 Dutch (nl)
 Polish (pl)
 Brazilian Portugese (pt_BR)
 Turkish (tr)


Overview of Changes from GLib 2.13.6 to GLib 2.13.7
===================================================

* The memory corruption warning from the slice allocator that
  occurred when threads were initialized after the slice allocator
  has been removed, as the slice allocator now works fine
  in this scenario.

* New functions g_once_init_enter() and g_once_init_leave() make
  it easier to write threadsafe one-time initialization functions 
 
* Bugs fixed:
 454473 Simple XML Subset Parser terminates on invalid XML
 445813 g_module_open error, add file name
 453796 errno gets clobbered by g_filename_display_name
 341988 don't use "-c" with msgfmt in Makefile.in.in
 447048 Please produce slightly more output during long tests
 454785 GModule documentation lists same block of code twice.
 454786 GModule documentation lists same paragraph twice.
 383155 small docs quirks in gobject/closure API documentation
 65041  _get_type() functions aren't thread safe

* Updated translations
 Assamese (as)
 Spanish (es)
 Gujarati (gu)
 Japanese (ja)
 Korean (ko)
 Macedonian (mk)


Overview of Changes from GLib 2.13.5 to GLib 2.13.6
===================================================

* Reintroduce a GType typedef whose removal in 2.13.5
  caused trouble for C++ bindings

* Bugs fixed:
 450216 docs not explicit enough about g_free()
 451459 g_type_register_static_simple calls g_type_register_static

* Updated translations
 Norwegian bokmål (nb)
 Sinhala (si)


Overview of Changes from GLib 2.13.4 to GLib 2.13.5
===================================================

* xdg-user-dirs support: 
 - the Desktop directory is guaranteed to be defined
 - user-dirs.dirs is no longer reloaded on changes

* Slice allocator: 
 - new api to duplicate slices

* Regular expression support:
 - GRegex is a boxed type now

* Bugs fixed:
 44793 make check failing in trunk
 354522 Small problem with PLT hiding 6 symbols
 363986 glib 2.12.4 does not compile with SGI IDO cc
 443869 g_type_class_add_private doesn't warn when adding 0-sized...
 446859 Legitimately return 0 for g_quark_from_string(NULL)
 447534 Small typo in g_timeout_add_seconds() doc
 447583 GStaticRWLock
 447935 g_get_current_dir SIGSEGV on long path
 448260 CLAMP has surprising result if low > high
 57693 	g_string_vprintf()
 442029 add g_slice_dup()
 445065 Add GRegex boxed type
 448819 Add full version of g_timeout_add_seconds()

* Updated translations: 
 Swedish (sv)
 Oriya (or)
 Hebrew (he)
 Spanish (es)
 Estonian (et)

 
Overview of Changes from GLib 2.13.3 to GLib 2.13.4
===================================================

* Bugs fixed:
 444121 g_get_user_special_dir deadlocks
 444161 invalid UTF8 in key name shows up as valgrind error in g_...
 444130 g_option_context_get_help() is broken when there's a desc...


Overview of Changes from GLib 2.13.2 to GLib 2.13.3
===================================================

* GKeyFile:
 - Added defines for easier handling of desktop files

* Unicode support:
 - Update g_unichar_iswide_cjk for Unicode 5.0

* Regular expression support:
 - GRegex structs can now be ref-counted
 - Some new functions for dealing with incremental 
   replacement have been added
 - The GRegexEvalCallback signature has been changed

* g_get_user_special_dir() has been added to support
  xdg-user-dirs

* Bugs fixed:
 419376 Functions using named subpatterns behave inconsistently w...
 434358 g_regex_fetch_named() and g_regex_fetch_named_pos() are b...
 423708 typo in the README.win32 file see patch below
 339225 Add new defines for easier handling of .desktop files 
 442265 API additions/changes for GRegex
 432651 Add a glib-ish xdg_user_dir_lookup

* Updated translations:
 Estonian (et)
 Norwegian bokmål (nb)


Overview of Changes from GLib 2.13.1 to GLib 2.13.2
===================================================

* Unicode support:
 - Add g_unichar_ismark()

* GOption:
 - Allow to use callbacks for remaining args

* Updated translations:
  Belarusian Latin (be@latin)
  British English (en_GB)
  Galician (gl)
  Norwegian bokmål (nb)
  Oriya (or)
  Spanish (es)
  Thai (th)


Overview of Changes from GLib 2.13.0 to GLib 2.13.1
===================================================

* GRegex:
 - Portability fixes
 - Split into immutable GRegex and GMatchInfo
 - Add g_regex_get_max_backref() and g_regex_get_capture_count()
   to obtain information about the compiled regex

* GKeyFile:
 - Fix roundtrip problems
 - Add g_key_file_load_from_dirs()

* Unicode support:
 - Fix corner cases in case conversion routines

* GOption:
  - Add a function to get the formatted help string

* GHash:
 - Add new functions g_hash_table_get_keys() and
   g_hash_table_get_values() to retrieve the keys and
   values in list form

* Updated transations:
  Simplified Chinese (zh_CN)
  Arabic (ar)


Overview of Changes from GLib 2.12 to GLib 2.13.0
=================================================

* Add GSequence, a list that is implemented using
  a balanced binary tree.

* Add GRegex, an implementation of Perl regular expressions,
  based on PCRE.
 
* Use Posix monotonic clocks instead of gettimeofday()
  for GTimer when available.

* Support static initialization of GQeues with G_QUEUE_INIT,
  g_queue_init() and g_queue_clear().

* Add g_string_chunk_clear() for clearing a 
  GStringChunk.

* Add g_unichar_get_script() to obtain Unicode
  script information.

* Add g_unichar_iszerowidth() to obtain information
  about zero-width characters.

* Add G_GNUC_MAY_ALIAS which wraps the gcc may_alias 
  type attribute.

* G_GNUC_INTERNAL has a working definition for the
  Sun Studio compiler. This requires the macro to
  be positioned before the function declaration.

* The slice allocator can produce detailed debugging
  information with G_SLICE=debug-blocks.

* Modules support G_DEBUG flags resident-modules and
  bind-now-modules.

* Add G_DEFINE_DYNAMIC_TYPE() to make it easier
  to define types in modules.

* Bug fixes: too many to list them in detail here.

* New and updated translations (be,bg,bn,ca,cs,de,
  en_CA,en_GB,et,fa,fr,he,hu,it,ja,ku,lt,mg,mk,ml,
  nb,ne,nn,pt,pt_BR,ro,sr,sr@Latn,sv,ta,uk,vi,zh_CN,
  zh_HK,zh_TW)


Overview of Changes from GLib 2.12.1 to GLib 2.12.2
===================================================

* Unicode updates:
 - Normalization is following Unicode TR #29
 - g_unichar_isxdigit() only accept characters
   for which g_unichar_xdigit_value() returns a value
 - g_unichar_toupper and g_unichar_tolower leave
   unconvertable characters in place instead of
   replacing them by NUL

* Bugs fixed
 348491 g_utf8_strup() and g_utf8_strdown() returns 
        string with NUL bytes
 349825	GKeyFile always inserts a newline before a group
 347842	g_unichar_isxdigit() is too general about what 
        it considers a digit
 348694	g_utf8_normalize() hasn't been updated to PR #29
 348785	Hint about G_DEBUG in Message Logging docs
 349792	Wrong english string (UI)
 349952	gparamspecs.c uses gcc feature

* Translation updates (ca,cs,de,dz,es,eu,fi,gu,ko,
  nl,pl,tr,uk,zh_HK,zh_TW)


Overview of Changes from GLib 2.12.0 to GLib 2.12.1
===================================================

* Update to final Unicode Character Database 5.0.0

* Bugs fixed:
 346660 issues with base64 api documentation / g_base64_decode_cl...
 348136 Coverity reports allocation of wrong size CID #2839
 336281 Update to UCD 5.0
 346197 g_date_strftime %F option doesnt work for win32
 348011 Small optimization to real_toupper()
 246494 prototype mismatch in glib/gconvert.c

* New and updated translations (bg,bn_IN,ca,dz,eu,fi,
  fr,he,it,ja,mk,or,pt)


Overview of Changes from GLib 2.11.4 to GLib 2.12
=================================================

* Bugs fixed:
 344905 leap-year bug in g_time_val_from_iso8601 w/o HAVE_TIMEGM

* Updated translations (cy,nb,nl)


Overview of Changes from GLib 2.11.3 to GLib 2.11.4
===================================================

* GBookmarkFile:
 - g_bookmark_file_remove_item returns a boolean
 
* g_mkstemp accepts the XXXXXX in the middle of
  the template
 
* Bugs fixed:
 344868 g_key_file_to_data should separate groups 

* Updated translations (de,es,fr,gu,hi,ko,th)


Overview of Changes from GLib 2.11.2 to GLib 2.11.3
===================================================

* GBookmarkFile:
  - g_bookmark_file_move_item: Return TRUE in case of
    an empty target

* Bugs fixed: 
 343919 gunicollate.c: strxfrm bug on VC8

* Updated translations (fi)

Overview of Changes from GLib 2.11.1 to GLib 2.11.2
===================================================

* Add g_ascii_stroll to parse signed 64bit integers

* GMarkup: add a flag to treat CDATA as text

* GHashTable: add functions to remove all entries

* GMainLoop: add functions to find the currently
  running source, and determine if it is destroyed

* Bug fixes:
 342563  g_atomic_thread_init() needs to be called before 
         other _g_*_thread_init() functions
 343548  Potential use after free in callers of g_string_free() 
 168538  Wish: Clearing contents of GHashTables
 321886  GTK+ cannot be reliably used in multi-threaded 
         applications
 341826  goption.c: 'strtoll' is C99's function
 343899  g_ascii_formatd dosn't work as expected for all 
         format strings
 317793  Make GEnumValue strings const
 337129  Compile warnings in G_IMPLEMENT_INTERFACE
 303622  What is G_TYPE_CHAR?

* Updated translations (bg,dz,eu,gl,ja,ko,nl,th,vi)
 

Overview of Changes from GLib 2.11.0 to GLib 2.11.1
===================================================

* GOption  
  - Support 64-bit integers 
  - Allow optional text before and after the options
    in help output

* Bug fixes:
 340538 gbase64-test writes OOB 
 340816 GKeyFile set_string_list invalid memory reads 
 339105 g_key_file_parse_value_as_double
 340434 convert-test.c fails (function test_one_half)
 311043 Memory leaks (and potential infinite loops) 
        when using G_ERRORCHECK_MUTEXES
 335198 Error checking mutexes are fubar  
 341237 Add a G_OPTION_ARG_INT64
 341192 g_io_channel_set_flags not implemented on win32
 336120 Allow adding description before/after GOption 
        --help output body
 341191 misplaced check in g_relation_delete
 340530 mismatched calloc / g_free in win32 threads

* Updated translation (es)

Overview of Changes from GLib 2.10.x to GLib 2.11.0
===================================================

* GBookmarkFile: a parser for files containing bookmarks
  stored using the Desktop Bookmark specification.

* Base64 encoding support
	
* Unicode 5.0 support

* GOption supports floating point numbers 

* GKeyFile supports floating point numbers

* Bug fixes:
 155884 gatomic.c should be based on new SDK
 157877 update-desktop-database doesn't handle duplicate entries
 164719 keyfile parser doesn't support floats
 327662 Import BookmarkFile from libegg
 329548 Add G_OPTION_ARG_DOUBLE
 329789 option-test.c type confusion
 332841 Segmentation Fault when %llu is passed to vasnprintf and 
        HAVE_SNPRINTF is not defined
 333879 gthread/gthread-win32.c: IsDebuggerPresent needs '#define 
        _WIN32_WINDOWS 0x0401'
 333916 g_timer_elapsed docs should mention that microseconds 
        may be NULL
 334440 dlerror() portability issue causes crash on (old) a.out 
        NetBSD platform
 334646 goption + error out params
 334799 g_remove() must check return value of remove()
 334943 make check FAIL: threadpool-test
 335215 Some breakages with GThreadPool
 336085 g_option_context_new parameter lacks better explanation
 336677 Documentation for g_object_ref_sink() is incorrect
 337027 gbookmarkfile.c: sys/time.h include error
 337553 Wrong escaping of URIs
 338572 Dereferencing NULL value in g_key_file_get_group_comment
 338845 g_completion_complete_utf8 crashes when NULL is passed to it
 339337 g_bookmark_file_set_description
 339338 gbookmarkfile.c, function expand_exec_line
 339340 gbookmarkfile.c, function bookmark_app_info_dump

* Translation updates (bg,en_GB,et,gl,gu,he,hi,ka,nb,nl,nn,
                       or,pt_BR,ro,tr,vi,zh_CN)


Overview of Changes from GLib 2.10.0 to GLib 2.10.1
===================================================

* Bugs fixed:
 314794 Broken pthread detection on Darwin [Gregor Riepl]
 322476 Missing check for .dylib [Vladimir Panov]
 333651 Inconsistent _g_charset_get_aliases prototype [Julio 
        M. Merino Vidal]
 333761 GInitiallyUnowned breaks application code [Sven Herzberg]

* Win32 changes:
 - Fix g_listenv() implementation.
 - Allow up to 100 GPrivate structs

* Translation updates (fr,hu,lt,pl,sv)


Overview of Changes from GLib 2.9.6 to GLib 2.10.0
==================================================

* Bugs fixed:
 328997 64bit pointer trunction in glib slab-allocator
        [Pascal Hofstee]
 331110 g_cond_broadcast(inform_cond) without holding 
        inform_mutex [Chris Wilson, Sebastian Wilhelmi]
 332093 Fix some leaks in the tests [Kjartan Maraas]
 332435 g_utf8_strlen returns wrong value if a maximum 
        number of bytes to check is specified 
        [Matthias Clasen]
 331367 gslice requires more POSIX-like semantics for 
        GPrivate destructors [Tor Lillqvist]

* Documentation improvements [Matthias, Kang Jeong-Hee,
  Tor Lillqvist, Stefan Kost]

* Translation updates (el,eu,ka,uk)

Overview of Changes from GLib 2.9.5 to GLib 2.9.6
=================================================

* Bugs fixed: 
 329124 distclean removes README [Kjartan Maraas, Tim Janik]
 317679 GRelation field type not documented [Behdad Esfahbod]
 329123 Typo in GTime docs [Kjartan Maraas]

* Documentation improvements [Sven Herzberg, David
  Schleef, Kjartan Maraas, Behdad Esfahbod]

* Translation updates (cs,cy,it,ko,pt,sq,sr,sr@Latn,ru

Overview of Changes from GLib 2.9.4 to GLib 2.9.5
=================================================

* Memory management: 
  Runtime debugging support: The slice allocator
  can be turned off by setting G_SLICE=always-malloc
  in the environment. Zeroing of freed memory can
  now be turned on at runtime by setting
  G_DEBUG=gc-friendly in the environment. [Tim Janik]

* Bugs fixed:
 328253 HP-UX/IA-64 uses ".so" as default shared library 
        extension [Albert Chin]
 143380 unicode-encoding test fails converting to UTF-16 
        with libiconv [Marc Moorcroft]
 328254 Build breakage (GSlice) [Jens Ganseuer]
 328705 C99ism in glib/gmem.c [Kazuki Iwamoto]

* Translation updates (da,et,zh_CN)

Overview of Changes from GLib 2.9.3 to GLib 2.9.4
=================================================

* Type system:
  Fix a problem with g_object_compat_control() which 
  can lead to segfaults in GTK+ applications on 64bit 
  platforms. 

* Thread suppport: 
  Unused threads now fall back to the global pool after 
  500 milliseconds, where they wait for another 
  max-idle-time milliseconds. [Sebastian Wilhelmi]

* Fix a memory allocation problem in GKeyFile. [Morten 
  Welinder]


Overview of Changes from GLib 2.9.2 to GLib 2.9.3
=================================================

* GTree:
 - Replace the simple recursive implementation by
   a nonrecursive, threaded one  [Maurizio Monge]

* Change g_filename_display_name and
  g_filename_display_basename to use the Unicode
  replacement character U+FFFD instead of a question
  mark, and don't append "(invalid encoding)"  [Matthias]

* Documentation improvements [Sven Herzberg, Federico
  Mena Quintero, Stefan Kost]

* Bugs fixed:
 323937 gslice.c in glib 2.9.1 doesn't build on Mac OS X 
        [Bogdan Nicula]
 326558 Some test failures on IRIX 6.5 [Daichi Kawahata]
 169285 "threaded" tree implementation for GTree 
        [Maurizio Monge]
 326747 g_filename_display_basename adds (invalid encoding) 
        [Alberto Ruiz]

Other contributors: Christian Kellner, Murray Cumming

New and updated translations (bg,ca,de,es,et,gu,ja,nl,th,vi)


Overview of Changes from GLib 2.9.1 to GLib 2.9.2
=================================================

* Memory management:
 - Add tests for cache colorization [Tim Janik]
 - Minimize space consumption if small amounts of differently
   sized slices are allocated, at a small performance cost.  [Tim]

* Thread support:
 - Add g_atomic_pointer_set() and g_atomic_int_set() [Tim Janik,
   Sebastian Wilhelmi]
 - Add g_thread_pool_set_sort_function() to allow sorting the 
   tasks of a threadpool.  [Martyn Russell]
 - Add g_thread_pool_set_idle_time() to allow unused threads
   to exit after a certain time.  [Martyn]

* Type system:
 - introduce a new type GInitiallyUnowned, which has an initial
   floating reference. [Tim]
 - Add support for GType parameters. [Matthias]

* Main loop:
 - Add g_main_context_is_owner() to determine if the current
   thread is the owner of the context.  [Michael Meeks]

* Provide g_access(), g_chdir(), g_unlink(), g_rmdir() as 
  wrapper functions instead of macros.  [Manish Singh]

* Documentation improvements [Tim, Matthias, Federico Mena Quintero,
  Stefan Kasal, Dan Williams]

* New and updated translations (en_CA,fi,fr,gl,ml,nb,no,zh_HK,zh_TW)

* Bugs fixed:
 324179 g_allocator_new() returns pointer to const dummy which Gtk+ 2.8 
        tries to modify [J. Ali Harlow]
 324332 g_option_context_parse() returns false without setting error 
        [Tim-Philipp Müller]
 324950 GLIB 2.9.1 testcase errors [Dan Yefimov]
 325015 gslice.c: process.h is needed on Windows [Kazuki Iwamoto]
 321978 G_DATALIST_GET_FLAGS() macro is not casting datalist to 
        gpointer [Andrew Paprocki]
 316221 G_LOCK warns about breaking strict-aliasing [Michal Benes, 
        Stanislav Brabec]
 325273 Error in documentation for glib_check_version () [Declan Naughton]
 325310 g_spawn_sync hangs when catching both stdout and 
        stderr [Tor Lillqvist]
 325249 gcc warning when using g_rmdir from <glib/gstdio.h> [Jani Monoses]
 325864 glib/gthreadpool.c:"#define debug(...)" is C99 [Kazuki Iwamoto]
 325874 Should say somewhere that source IDs are > 0 [Dan Williams]
 325438 a typo (compatability) [Stefan Kasal]
 323937 gslice.c in glib 2.9.1 doesn't build on Mac OS X [Bogdan Nicula]


Overview of Changes from GLib 2.9.0 to GLib 2.9.1
=================================================

* Memory management
 - The slice allocator is implemented [Tim Janik]
 - g_slice_free_chain() has been renamed to 
   g_slice_free_chain_with_offset()  [Tim, Behdad Esfahbod]
 - Mem chunks are deprecated [Matthias Clasen]

* Data structures
 - Hash tables are refcounted, and have a boxed type [Tim]

* Thread support
 - Support for Solaris threads has been removed 
   [Sebastian Wilhelmi, Andrew Paprocki]
 - g_async_queue_sort(), g_async_queue_push_sorted() have 
   been added to allow GAsyncQueue to be used as a priority 
   queue, together with the corresponding _unlocked 
   variants  [Martyn Russell]

* GObject:
 - The concept of a floating initial reference has been
   moved from GtkObject to GObject [Tim]

* Win32 changes:
 - Make g_rename() replace existing files [Tor Lillqvist]

* Misc new API:
 - G_GUINT64_CONSTANT macro to define guint64 
   constants [Andrew Paprocki]
 - G_GNUC_WARN_UNUSED_RESULT macro to instruct the 
   compiler to emit a warning if the value returned
   by a function is ignored. [Arjan van de Ven, Alex Larsson]
 - GList and GSList now have sort functions which take an
   extra user data argument [Martyn Russell]
 - g_param_spec_ref_sink() has been added for consistency [Tim]

* $LOGNAME is respected when determining user data. [Laszlo Peter]

* Other changes and bug fixes [Tim, Matthias, Behdad, 
  Christian Persch, Benedikt Meurer, Andrew Paprocki, 
  Kazuki Iwamoto, Alexis S. L. Carvalho, Stanislav Brabec,
  Andreas Schwab, Kalle Vahlman]

* Documentation
 - Deprecation warnings carry version information [Matthias]
 - The slice allocator has been documented [Matthias, Tim]
 - Other improvements [Morten Welinder]

Overview of Changes from GLib 2.8.x to GLib 2.9.0
=================================================
* Unicode support:
 - The Unicode tables have been updated to Unicode 4.1, 
   adding several new values to the GUnicodeBreakType 
   enumeration. This breaks Pango <= 1.10 
   [Behdad Esfahbod]
 - The various Unicode character predicate functions 
   (g_unichar_isalpha, g_unichar_isdigit,...) have
   been optimized
   [Behdad]
 - g_utf8_pointer_to_offset, g_utf8_offset_to_pointer:
   These functions handle negative offsets now, and
   going backwards in g_utf8_offset_to_pointer uses
   "stutter stepping".
   [Larry Ewing, Matthias Clasen]

* Memory management:
 - Mem chunks are no longer used internally in GLib and
   GObject. GMemChunk will be deprecated in GLib 2.10
 - All APIs based on GAllocator (g_list_push/pop_allocator,
   and similar push/pop_allocator functions for other
   data structures) have been deprecated, since they
   never worked as intended.
 - The g_slice_* functions have been added as a 
   new API for fast allocation of small memory blocks. 
   The implementation in GLib 2.9.0 is just a simple 
   wrapper around malloc. GLib 2.10 will have an
   efficient and scalable implementation. 
   [Tim Janik, Matthias]

* Pattern matching:
 - g_pattern_match has been optimized to avoid
   unnecessary recursion.
   [Tim, Matthias]

* g_intern_string, g_intern_static_string: 
 - New functions to intern strings. These are now used 
   by GObject to avoid duplicating static strings 
   [Matthias]

* g_thread_foreach: 
 - New function to iterate over all GThreads 
   [Tim, Matthias]

* g_date_set_time_t, g_date_set_time_val:
 - New functions to set a GDate from a time_t or
   GTimeVal value. g_date_set_time has been deprecated 
   in favor of these.
   [Roger Leigh]

* g_snprintf and g_vsnprintf:
 - These functions are no longer declared in gprintf.h, 
   since they are in glib.h
   [Matthias]

Overview of Changes from GLib 2.8.0 to GLib 2.8.1
=================================================
* Optimize single-character insertions in GString [Ross Burton]
* Fix build problems on OS X
* Fix build problems on Win32 [Tor Lillqvist, Hans Breuer]
* Other bug fixes [Matthew F. Barnes, Stepan Kasal] 
* Documentation improvements [Tristan van Berkom, Behnam
  Esfahbod, Gustavo Carneiro, Stepan Kasal, Matthias]
* New and updated translations (ca,cy,ko,ro,uk)

Overview of Changes from GLib 2.7.7 to GLib 2.8.0
=================================================
* Make g_value_transform() handle enum values
  correctly on ppc64.  [Michael Lorenz]
  (Third-party code accessing enumeration values 
  in GValues should also be changed to access 
  v_long, not v_int, in order to work on bigendian 
  64bit machines.)
* Make g_flags_get_first_value() handle a value
  of 0 meaningfully. [Tim-Philipp Müller] 

Overview of Changes from GLib 2.7.6 to GLib 2.7.7
=================================================
* Make atomic operations on s390 work [Matthias]
* Fix C++ guards in gstdio.h [Tor Lillqvist]

Overview of Changes from GLib 2.7.5 to GLib 2.7.6
=================================================
* Add native implementations of atomic operations 
  on s390 [Matthias]
* Make atomic reference counting of closures
  work on s390 [Matthias]
* Avoid an infinite loop in g_convert_with_iconv().
  [Sebastian Bacher]
* Documentation improvements [Ross Burton]

Overview of Changes from GLib 2.7.4 to GLib 2.7.5
=================================================
* Thread-related changes
 - Fix build issues on HP-UX [Paul Cornett]
 - Threadsafe access to flags stored in datasets [Tim Janik]
 - Fix several issues with atomic refcounting for 
   closures, objects and paramspecs [Tim]
 - Improve tests for atomic refcounting changes [Tim]
* Fix handling of stateful encodings in g_convert_* [Matthias]
* Fix translation of GOption help output [Dan Winship]
* Catch format errors in translations. This may cause 
  "make check" to fail when using older versions
  of gettext [Matthias]
* Win32 bug fixes [Tor Lillqvist]
* Documentation improvements [Ross Burton, Jochen Baier, 
  Matthias, Tim]
* New and updated translations (de,fi,gu,pl,pt,tr,zh_TW)

Overview of Changes from GLib 2.7.3 to GLib 2.7.4
=================================================
* Fix g_atomic_pointer_compare_and_exchange 
  on Sparc64 [Gert Doering]
* Fix a hang in g_thread_pool_free. [Hong Jen Yee]
* Win32 bug fixes [Tor Lillquist]
* Other bug fixes [Benoit Dejean, Manish Singh]
* Documentation improvements [Bryan Silverthorn,
  Callum McKenzie] 
* New and updated translations (de,lt,sq,zh_CN)

Overview of Changes from GLib 2.7.2 to GLib 2.7.3
=================================================
* GOption
 - Allow callbacks with optional arguments [Pawel Sliwowski]
 - Allow to turn off the automatic long option name
   disambiguation  [Adam McLaurin]
 - Only allow printable ASCII as short option names [Matthias]
* Win32
 - Build fixes [Tor Lillqvist]
 - Rewrite iochannel socket implementation [Tor]
* GObject
 - Threadsafety improvements; in particular, refcounting
   of objects is done atomically now. [Wim Taymans, Tim Janik]
* Bug fixes [Morten Welinder, Matthias, Wim Taymans]
* Documentation improvements [Richard Laager, Matthias]
* New and improved translations (bf,cs,hu,nb,nl,no)

Overview of Changes from GLib 2.7.1 to GLib 2.7.2
=================================================
* Win32 build fixes [Hans Breuer]
* Bug fixes [Mikael Magnusson]
* Documentation improvements [Matthias Clasen]
* New and updated translations (en_CA,es,et,ja,sr,sr@Latn,zh_TW)

Overview of Changes from GLib 2.7.0 to GLib 2.7.1
=================================================
* GOption 
 - Allow callback arguments without parameters [Dan Winship]
* GMappedFile: an mmap wrapper [David Schleef, Behdad Esfahbod]
* Misc new functions:
 - g_get_host_name [Tor Lillqvist]
 - g_mkdir_with_parents [Tor]
 - g_build_pathv, g_build_filenamev [Todd A. Fisher, 
   Matthias Clasen]
* Bug fixes [Roger Leigh, Masatake YAMATO, Kjartan Maraas,
  Manish Singh, Tor, Murray Cumming, Kian Duffy, Morten Welinder]
* Documentation improvements [Hong Gang XU, Dan Winship, Matthias]
* New and updated translations (bg,cs,da,en_CA,es,et,nb,nl,no,
  sk,th,zh_TW)

Overview of Changes from GLib 2.6.x to GLib 2.7.0
=================================================
* GKeyFile
 - Add unit tests [Matthias Clasen, Suren A. Chilingaryan]
 - Accept \r\n as line end [Bastian Nocera]
 - Don't interpret leading zeros as octal numbers. [Matthias]
 - Make key and group removal work [David Hoover, Matthias Hasselmann]
* GOption
 - Improve formatting of --help output [Matthias, Noah Levitt]
 - Accept -? [Matthias]
 - Warn about duplicate main groups [Jeff Franks]
 - Treat '-' as non-option argument [Tim Musson, Thomas Leonard]
 - Report missing arguments as errors [Björn Lindqvist]
 - Add a boxed type for GDate [Tim-Philipp Müller]
* GTree
 - g_tree_remove() and g_tree_steal() return status information [Matthew F. Barnes]
* Stdio wrappers
 - Work regardless of large file support [Manish Singh]
 - Add g_access(), g_chmod(), g_creat(), g_chdir [Tor Lillqvist]
* GObject
 - Implement "toggle references" to help language bindings [Owen Taylor]
 - Allow to mark names, nicks and blurbs of pspecs as static [Ben Maurer, Matthias]
 - Make pspec lookup a bit faster [Morten Welinder]
* Add g_listenv() to list all set environment variables [Hans Petter Jansson]
* Add g_file_set_contents() to atomically write a file.  [Søren Sandmann,
  Sven Neumann, Manish, Alexis S. L. Carvalho]
* Add g_try_malloc(), g_try_new(), g_try_new0() and g_try_renew() [Stefan Kost]
* Add g_utf8_collate_key_for_filename() to sort filenames taking
  extensions and numeric suffixes into account.  [Ole Laursen, Alex Larsson]
* Add G_GNUC_NULL_TERMINATED to mark varargs function with 
  NULL-terminated argument lists. [Marc Meissner]
* Win32 changes
 - Improved debugability [Ulf Lamping, Hans Breuer]
 - Make filename handling more robust [Tor, Billy Skaggs]
 - Improve g_get_system_data_dirs() [Tor]
 - Use more precise timers [Tor]
 - Build fixes [Kazuki Iwamoto, Hans, Tor, Robert Ögren]
* Other bug fixes [Roger Leigh, Owen, Matthias, Morten, Kjartan Maraas, 
  Pawel Sakowski, Tor, Simon Budig, Ed Avis, Manish, Nicolas Laurent, 
  Bastien, Fabrício Barros Cabral, Michael Banck, Daniel Atallah, 
  J. Ali Harlow, Tim Janik, Hazael Maldonado Torres, Sven, Jon-Kare Hellan,
  Dave Benson, Tommi Komulainen, Benjamin Otte, Brian Cameron, Changwoo Ryu, 
  Christian Biere, Noah, Benoît Carpentier]
* Documentation improvements [Vincent Untz, Matthias, Tim-Philipp Müller,
  Morten, Matthew, Federico Mena Quintero, Sebastian Bacher, Oliver Sessink, 
  Stefan, Jared Lash, Tor, Owen, Daniel Vaillard, Mathieu Lacage]
* New and updated translations (ca,cs,da,el,en_CA,en_GB,es,et,eu,fa,fr,gl,
  hu,id,it,lt,mn,ne,nl,pl,pt,pt_BR,ro,rw,sk,sq,sr,sr@Latn,tl,uk,xh,zh_CN)

Overview of Changes from GLib 2.6.0 to GLib 2.6.1
=================================================
* GOption
 - Make gtk_init(NULL, NULL) work again [Marcin Krzyzanowski]
 - Improve handling of -- [Matthias Clasen]
 - Don't show G_OPTION_REMAINING in --help output [Matthew F. Barnes]
* g_find_program_in_path() doesn't return directories [Tommi Komulainen]
* Add gmodule-export-2.0.pc [Matthias]
* Win32 changes
 - Improve hangling of UNC paths [Tor Lillqvist]
 - g_getenv(), g_setenv(), g_unsetenv(), g_find_program_in_path()
   take and return UTF-8 now [Tor] 
 - Make g_file_test() work more reliably, and use PATHEXT
   when check for executables [Tor]
 - Build and cross-compilation fixes [J. Ali Harlow]
* Other bug fixes [Jens Hatlak, Morten Welinder, 
  Tor, Kalpesh Shah, Adrian Bunk]
* Documentation improvements [Marcin Krzyzanowski, Tor, Crispin
  Flowerday, Mariano Suárez-Alvarez, Christian Biere, Danny Milo,
  Vincent Untz, Bastien Nocera]
* New and updated translations (cy,de,nl,ru,sq,sv)

Overview of Changes from GLib 2.4.x to GLib 2.6.0
=================================================

* Major new APIs
  - GOption, a commandline option parser
  - GKeyFile, a parser/editor for the .ini like files 
  - Functions to support the XDG basedir specification
  - Wrappers for common POSIX pathname functions to handle filename
    encodings consistently. On Windows, these use UTF-8.

* Miscellaneous new functions
  - g_filename_display_name() converts filenames in displayable UTF-8 strings
  - g_uri_list_extract_uris() splits uri lists
  - g_date_get_iso8601_week_of_year() gets ISO 8601 week numbers
  - g_log_set_default_handler() installs an alternate default log handler
  - g_get_language_names() obtains a list of applicable locale names
  - g_strv_length() calculates the length of NULL-terminated string arrays
  - g_win32_get_windows_version() determines the Windows version 
  - G_GNUC_INTERNAL marks functions as non-exported
  - glib_check_version() checks the GLib version at runtime
  - g_debug() completes the family of logging functions

* Performance improvements
  - Optimize g_utf8_validate()
  - Optimize g_markup_parse_context_parse()
  - Reduce signal connection complexity from O(n) to O(1) 
  - Get rid of many PLT entries for internally used exported symbols
  - Reduce code size by removing literal strings from g_return_if_fail()

* Other changes
  - On Windows, GLib functions that take file name arguments now require
    those to be in UTF-8. Functions that return file names return UTF-8.
  - Use higher precision for mathematical constants
  - Don't convert to/from UTF-8 in g_filename_to_uri/g_filename_from_uri
  - Support ll as printf format modifier for long long on all platforms
  - Clean up the ABI and enforce the list of exported symbols
  - Add a .pc file for using gmodule in libraries
  - Require ngettext

Overview of Changes from GLib 2.5.7 to GLib 2.6.0
=================================================
* GOption: Don't list help options if group-specific
  options have been requested [Glynn Foster]
* Make g_get_language_names() track locale changes [Christian Persch]
* Win32 bug fixes [Tor Lillqvist]
* Bug fixes [Philippe Blain, Owen Taylor, Sebastian Wilhelmi]
* New and updated translations (da,es,ja,lt,zh_CN)
Bugs fixed: 159530,100697,160271,160645,157255

Overview of Changes from GLib 2.5.6 to GLib 2.5.7
=================================================
* Optimize g_utf8_validate() [Owen Taylor, Matthias Clasen]
* Optimize g_markup_parse_context_parse() [Havoc Pennington, 
  Morten Welinder]
* Reduce signal connection complexity from O(n) to O(1) 
  [Sven Neumann]
* Add a .pc file for using gmodule in libraries [Owen]
* Add G_GNUC_MALLOC to mark functions returning newly 
  allocated memory  [Matthias]
* Win32 bug fixes [Hans Breuer, Tor Lillqvist, Robert Ögren,
  Bruce Hochstetler]
* Bug fixes [Kazuki IWAMOTO, Matthias, Manish Singh, Morten,
  Frederic Crozat, Tor]
* Documentation improvements [Matthias, Tor, Owen]
* New and updated translations (cs,da,de,en_CA,en_GB,es,nb,nl,sq,zh_CN)

Overview of Changes from GLib 2.5.5 to GLib 2.5.6
=================================================
* GOption
  - Add G_OPTION_FLAG_REVERSE to allow options 
    which unset a  boolean variable [Tor Lillqvist]
* GChildWatch
  - Use sigaction instead of signal [Jonas Jonnson, 
  Archana Shah]
  - Make the very first SIGCHLD work [Gustavo Carneiro]
* Bug fixes [Morten Welinder, Tor, David MacLachlan,
  Manish Singh, J. Ali Harlow]
* Documentation improvements [Matthias Clasen, Tor]
* Updated translations (da,ja,tr,zh_CN)

Overview of Changes from GLib 2.5.4 to GLib 2.5.5
=================================================
* GKeyFile
  - Cleanups, add more error checking [Ray Strode]
  - Fall back to the untranslated string when getting 
    locale strings [Mark McLoughlin]
* GOption
  - Document GOption [Matthias Clasen]
  - Better support for rest arguments [Owen Taylor, Matthias]
  - Handle conflicts between groups [Matthias]
* Add g_lstat() to the stdio wrappers [Tor Lillqvist]
* Add g_filename_display_name() to convert filenames
  in displayable UTF-8 strings  [Alex Larsson, Matthias]
* Win32 bug fixes [Kazuki IWAMOTO, Hans Breuer, Tor]
* Bug fixes [Christophe Fergeau, Morten Welinder, 
  Owen, Kjartan Maraas, Mark]
* Documentation improvements [Matthias, Tor]

Overview of Changes from GLib 2.5.3 to GLib 2.5.4
=================================================
Add GKeyFile, a parser/editor for the .ini like files used in various
   freedesktop.org specifications. [Ray Strode]
Make the handling of filename encodings consistent across all
   GLib functions, introduce wrappers for common POSIX 
   functions which accept the same filename encoding. [Tor Lillqvist, 
   Owen Taylor]
GOption
 - Rename g_context_option_error_quark() to a more language-binding
   friendly name [Murray Cumming]
 - Accept backslashes in filenames on Win32 [Tor Lillqvist]
* Strip the internal aliasing prefix IA__ from function names in 
  assertions [Matthias Clasen]
* Add a function to split uri lists. [Matthias]
* Win32 bug fixes 
 - Don't open console windows [Tor]
* Other bug fixes [Philippe Blain, Robert Ögren, Hidetaka Iwai, Matthias,
 Morten Welinder, Mats-Ola Persson, Tor, Nickolay V. Shmyrev, Kjartan Maraas,
  Anders Carlsson, Tim-Philipp Müller, Lucas Rocha, Andrea Campi, Manish
  Singh, Thomas Fitzsimmons, Kazuki IWAMOTO]
* Documentation improvements [Matthias, Linus Walleij, Nickolay, Philippe, 
 Adam Hooper, Gustavo Carneiro]
* New and updated translations (cs,en_CA,en_GB,ja,nb,nl,or,sr,sr@Latn,sq)

Overview of Changes from GLib 2.5.2 to GLib 2.5.3
=================================================
* GOption
 - set the program name from argv[0] [Masatake YAMATO] 
 - make contexts work without a main group [Anders Carlsson]
* Performance 
 - Get rid of many PLT entries for internally used exported symbols,
   and clean up the ABI at the same time and make make check check the
   list of exported symbols.  [Matthias Clasen]
* Add API to get ISO 8601 week numbers [Niklas Lundell]
* Add API to install an alternate default log handler [Darin Adler]
* Add API to obtain a list of applicable locale names [Hidetoshi Tajima]
* Reduce code size bloat by removing literal strings from
 the g_return_if_fail() macros [Owen Taylor]
* Add g_strv_length [Tim-Philipp Müller]
* Win32 changes
 - Add API to determine the Windows version [Tor Lillqvist]
* Other bug fixes [Stepan Kasal, Anders, Tor, Kazuki Iwamoto,
  Manish Singh]
* Documentation improvements [Morten Welinder, Matthias]
* New and updated translations (es,nn,ro)

Overview of Changes from GLib 2.5.1 to GLib 2.5.2
=================================================
* Add G_GNUC_INTERNAL macro [Arjan van de Ven]
* Add GOption, a commandline option parser [Anders Carlsson]
* Add glib_check_version [Michael Natterer]
* Add XDG basedir API [Ray Strode]
* Require ngettext [Danilo Segan]
* Bug fixes [Manish Singh, Ray Strode, Vincent Noel, 
  Jon-Kare Hellan, Jody Goldberg]
* Win32 bug fixes [Tor Lillqvist, Hans Breuer, Peter Zelezny]
* Documentation improvements [Matthias Clasen, Vincent Untz, Christian Persch]
* New and updated translations (bs,eu,fi,gu,ne,pa)

Overview of Changes from GLib 2.5.0 to GLib 2.5.1
=================================================

* Bug fixes [Oliver Guntermann, Sven Neumann, James 
  Henstridge, Hiroyuki Ikezoe, Matthias Clasen, Robert 
  Ögren, Tommi Komulainen]
* Documentation improvements [Soeren Sandmann, 
  Christophe Fergeau, Danek Duvall]
* New and updated translations (eu,hi)
  
Overview of Changes from GLib 2.4.1 to GLib 2.5.0
=================================================

* New functions g_debug [Sven Herzberg]
* Use higher precision for mathematical constants [Morten 
 Welinder]
* Don't convert to/from UTF-8 in g_filename_{to,from}_uri 
 [Federico Mena Quintero]
* Win32
 - Handle empty digit string in printf() functions 
   correctly [Tor Lillqvist]
 - Support ll as format modifier for long long [Tor]
 - Be more careful about HOME [Tor, Ivan Wong]
 - Bug fixes [John Ehresman]
* Miscellaneous bug and portability fixes [Danilo Segan, 
 Owen Taylor, Nikolai Weibull, Benoît Carpentier, Morten 
 Welinder, Manish Singh, Sven Neumann, Julio M. Merino Vidal,
 Kaz Sasayama, Murray Cumming, Federico, Mariano Suarez-Alvarez]
* Documentation updates [Matthias Clasen, Crispin Flowerday,
 Tommi Komulainen, Federico Mena Quintero, Ed Griffiths]
* New and updated translations (ja,ne,no,wa)
 
Overview of Changes from GLib 2.4.0 to GLib 2.4.1
=================================================

* Win32 bug fixes [Tor Lillqvist, Roger Leigh, John Ehresman]
* Miscellaneous bug and portability fixes [Owen Taylor,
  Matthias Clasen, Jonas Jonsson, Christian Krause,
  Nickolay V. Shmyrev, Christophe Saout, Philippe Blain,
  Piotr Klaban]
* Documentation updates [Matthias]
* New and updated translations (ca,cs,cy,el,en_CA,en_GB,es,eu,fi,
  fr,gu,he,id,nl,pt,pl,ru,sr,sr@ije,sr@Latn,sv,uk)

Overview of Changes from GLib 2.3.6 to GLib 2.4.0
=================================================

* Handle invalid-UTF-8 in g_log() properly [Matthias Clasen]
* Win32 bug fixes [Tor Lillqvist, Bruce Hochstetler]
* Miscellaneous bug and portability fixes [Olivier Biot, David L. Cooper II, 
  Kjartan Maraas, Frédéric L. W. Meunier, Christof Petig, Manish Singh, 
  Sebastian Wilhelmi]
* Documentation updates [Owen]
* Updated translations (hr,ro)

Overview of Changes from GLib 2.3.5 to GLib 2.3.6
=================================================

* GAtomic bug fixes [Sebastian Wilhelmi, Mark McLoughlin]
* GMain threading fixes and improvements [Sebastian]
* Win32 [Tor Lillqvist]
 - restore some symbols extraneously exported from gobject to maintain ABI compatibility
 - Misc build improvements and fixes [Tor, Cedric Gustin, Hans Breuer]
* Documentation updates [Sebastian, Takeshi AIHANA, Matthias, Sven Herzberg]
* New and updated translations (be,es,fi,ga,pa,sr@ije,zh_CN)

Overview of Changes from GLib 2.3.3 to GLib 2.3.5
=================================================

* Make glib-mkenums parse initializers with macros. [Matthias Clasen, muppet]
* Respect locale era in g_date_set_parse(). [Theppitak Karoonboonyanan] 
* Add atomic operations and use it for the async queue and
  gonce implementation. [Sebastian Wilhelmi]
* Documentation improvements [Sebastian, Matthias, Sven Herzberg]
* Add g_main_depth() for finding the recursion depth of the main
  loop [Owen Taylor, Tim Janik, Stefan Westerfeld]
* Add g_spawn_close_pid(), needed on win32 [J. Ali]
* Win32 fixes. [Hans Breuer, J. Ali Harlow]
* Misc bugfixes [Sebastian, Matthias, Balazs Scheidler, Owen]
* Updated translations (cy,et,ga,sq)

Overview of Changes from GLib 2.3.2 to GLib 2.3.3
=================================================

* Add a native AIX gmodule implementation. [Laurent Vivier]
* Add g_node_copy_deep().  [James M. Cape, Matthias Clasen]
* Extend GQueue API to match the GList API. [Soeren Sandmann]
* Add g_hash_table_find().  [Tim Janik]
* Add a G_MODULE_BIND_LOCAL flag. [David Schleef]
* Inline g_string_append_c() when possible. [Owen Taylor, Tim]
* Wrap waitpid() as a GSource. [Jonathan R. Blandford]
* Add g_completion_complete_utf8(). [Theppitak Karoonboonyanan, 
  Matthias]
* Add g_strsplit_set(). [Soeren]
* Documentation improvements. [Vincent Untz, Sebastian Wilhelmi, 
  Soeren, Matthias]
* Win32 build fixes. [Tor Lillqvist]
* Misc bugfixes [Manish Singh, Noah Levitt, Simon Josefsson, 
  Morten Welinder, Damien Carbery, Julio M. Merino Vidal, Sebastian, 
  Matthias]
* Updated translations (nn,cs,it,ko,sq,ms,az,hr,uk,sr,sr@Latn,sq,ta)

Overview of Changes from GLib 2.3.1 to GLib 2.3.2
=================================================

* Add G_MAXSIZE. [Manish Singh]
* Add g_rand_new_with_seed_array(), g_rand_set_seed_array(),
  implementing the init-by-array functionality of the 
  original mersenne twister. Add g_rand_copy(). Improve seeding. 
  [George Lebl]
* Add a lowercase_name option to glib-mkenums. [Murray Cumming]
* Add g_ptr_array_foreach(). [Matthias Clasen]
* Add g_timer_continue(). [Tim-Philipp Müller]
* Fix a threadsafety issue in mem chunks. [Matthias, Balazs Scheidler]
* Fix g_filename_{to,from}_utf8() on Win32 and improve 
  g_file_test() there too [Hans Breuer] 
* Add a boxed type for NULL-terminated string arrays.  [Matthias]
* Add G_DEFINE_TYPE() plus variants to ease the constuction
  of GObject boilerplate code.  [Tim Janik]
* Support & in password GECOS field [Matthias, Soeren Boll Overgaard]
* Documentation improvements [Matthias, Manish]
* Win32 build fixes [Hans]
* Misc bug fixes [Damien Carbery, Matthias, Manish, Olivier Poncet, 
  Zack Rusin]
* Updated translations (ar,de,fa,ga,mn,nn,no,sq)

Overview of Changes from GLib 2.3.0 to GLib-2.3.1
=================================================

* Add glib/gi18n.h and glib/gi18n-lib.h for common
  gettext support, including a Q_() macro for translation
  with context [Matthias Clasen]
* Add a more flexible G_FILENAME_ENCODING variable
  as a replacement for G_BROKEN_FILENAMES [Matthias]
* Fix the return value g_main_context_iterate() for
  newly ready sources [Padraig O'Briain]
* Handle Hangul composition for normalization [Noah Levitt]
* Add G_{MIN,MAX,MAXU}INT{8,16,32}. [Mark Jones, Matthias]
* Add G_GSIZE_FORMAT/G_SSIZE_FORMAT [Manish Singh]
* Add G_STRFUNC as a portable wrapper for __func__ [Tim Janik]
* Documentation improvements [Matthias]
* GObject [Tim Janik]
 - Support '-' in g_signal_connect()/disconnect() names
   like 'swapped-signal'.
 - Add g_type_class_peek_static() and use to optimize
   g_object_new() for static types [Tim]
 - Allow setting construct-only properties from within
   init() implementations
 - Enforce readability/writeability in g_object_set/get()
* Fix bug with g_ascii_strtod and multi-byte separator.
  [Behdad Esfahbod, Roozbeh Pournader]  
* Misc bug fixes [Matthias, John Ehresman, Andrew Lanoix,
  Tor Lillqvist, Mark McLoughlin, Tim-Philipp Müller, Manish, 
  Morten Welinder]
* Updated translations (ca,cs,da,es,fr,ja,nn,no,pt,ru)

Overview of Changes from GLib 2.2.x to GLib-2.3.0
=================================================

* Replace Trio printf by gnulib vasnprintf [Matthias Clasen]
* Update Unicode data to Unicode 4.0 [Noah Levitt]
* Support XML-safe formatted output with 
  g_markup_[v]printf_escaped [Owen Taylor]
* Add g_file_read_link to read symbolic links [Matthias]
* Add g_unichar_get_mirror_char to obtain the 
  mirrored variant of a character [Noah]
* Support for one-time initialization functions. 
  [Sebastian Wilhelmi]
* Miscellaneous API additions: g_vasprintf
  g_string_chunk_insert_len, g_setenv, g_unsetenv [Matthias]
* Docs improvements [Matthias]
* Add support instance-private data on classed types
  [Mark McLoughlin, Tim Janik, Owen]
* Optimize signal emissions [Soeren Sandmann, Tim]
* Support a "default vtable" per interface [Tim]
* Add support for properties on interfaces [Owen, Tim]
* Miscellaneous API additions: g_value_take_string(),
  g_value_take_param(), g_value_take_object(), 
  g_value_take_boxed(). [Matthias]
* Win32 build fixes [Tor Lillqvist]

Overview of Changes from GLib 2.1.5 to GLib-2.2.0
=================================================

* Fix a problem with g_thread_init() on 64-bit problems
  [Alceste Scalas, Sebastian Wilhelmi]
* Add assembly implementations of byteswap macros
  for ia64 and x86_64. [Manish Singh]
* IOChannel fixes for Win32 [Tor Lillqvist, Thorsten Maerz]
* Updated translations (bg,ca,es,da,fi,lv,ru,sk)

Overview of Changes from GLib 2.1.4 to GLib-2.1.5
=================================================

* Win32 bug fixes [Tor Lillqvist]
* Various post-rewrite fixes for glib-gettext.m4 [Owen Taylor,
  Jody Goldberg, Kjartan Maraas, Johannes Stezenbach]
* Ensure we have a GUINT64_FORMAT by pulling in Trio
  if necessary [Manish Singh]
* Further Trio build fixes [Matthias Clasen, Owen]
* Hack around gcc, libtool issues with -pthread [Owen]
* Docs improvements [Matthias]
* Bug and portability fixes 
* Updated and new translations (bg,de,fi,fr,sq,fr)

Other contributors: Kai Poitschke, Morten Welinder

Overview of Changes from GLib 2.1.3 to GLib-2.1.4
=================================================

* autoconf changes to make it possible to cross compile
  GLib. [Owen Taylor, Dan Kegel, Amy Lin, Dimi Shahbaz, 
  Johannes Stezenbach]
* Use libintl when it has bind_textdomain_codeset() and
  GLib doesn't. [Owen]
* Improve generation of pseudo-random integers [Morten Welinder, 
  Sebastian Wilhelmi]
* Avoid literal UTF-8 in favor of octal escapes [Owen, Tomas Ogren]
* Cleanup include order [Sven Neumann]
* autoconf cleanups and bug fixes [Daniel, Matthias Clasen, Owen]
* Doc fixes and additions [Matthias]

Other contributors: James M. Cape, Frederic Crozat, Martin Gansser,
  Phuc LeHong, Manish Singh, Joshua Weage, Morten Welinder

Overview of Changes from GLib 2.0.x to GLib-2.1.x
=================================================

* Add copy of the Trio library to build and use for printf() when 
  system printf isn't good enough. Add g_printf()/etc. [Matthias Clasen]
* Add g_str_has_suffix()/g_str_has_prefix() [Alex Larsson]
* Add g_markup_parse_context_get_element() [Matthias]
* Add g_utf8_strreverse [Matthias]
* Add g_ascii_strtoull() [Tim Janik]
* Support scanning of 64-bit values with GScanner [Tim]
* Add g_set/get_application_name() [Havoc Pennington]
* Add G_LIKELY()/G_UNLIKELY() macros for hinting branch probabilities. 
  Use for g_return_if_fail(). [Matthias Clasen]
* Add G_GNUC_DEPRECATED macro [Tom Tromey]
* Improve the seeding algorithm of GRandom to avoid problems
  with certain pathological seeds. Support G_RANDOM_VERSION=2.0
  environment variable. [Sebastian Wilhelmi]
* Improve thread configure checks, use -pthread where applicable
  [Sebastian]
* Improve handlng of thread priorities [Sebastian]
* Fix up parameter names that might shadow functions from
  system headers [Soeren Sandmann]
* Clean up usage of deprecated functions [Manish Singh]
* Docs fixes and improvements. In particular, include "Since" information.
  [Matthias, Soeren, Martin Schulze, Daryll Strauss, Bill Janssen, 
  Owen Taylor, Morten Welinder]. 

Overview of Changes in GLib 2.0.7
=================================

* Fix C++ warnings in gtype.h [Dom Lachowicz]
* Fix g_type_fundamental_next() [Tim Janik]
* Fix various missing includes of config.h [Morten Welinder]
* Handle main loop initialization before g_thread_init [Sebastian Wilhelmi]
* Various 64-bit fixes [Manish Singh]
* Fix GPoll on Win32 [Tor Lillqvist, Herman Bloggs]
* Fix bug with buffering on UTF-8 IOChannels [Daniel Elstner]
* Misc bug and build fixes [Soren Andersen, Gustavo Carneiro, Tor,
     Tim, Havoc Pennington,  Matthias Clasen, Sebastian Rittau,
     Masahiro Sakai, Arvind Samptur, HideToshi Tajima, Owen Taylor]
* Updated and new translations (be,cs,de,*fa,it,lv,pt_BR,tr)

Overview of Changes in GLib 2.0.6
=================================

* Fix problem with interface prerequisites [Jon Trowbridge, Dave Camp]
* Clean up debug spew from GObject [Anders Carlsson]
* Compiler warning fixes [David L. Cooper II]
* Fix some problems with g_build_path() [Guillaume Chazarain, Owen Taylor]
* Fixes for --disable-debug [Sebastian Wilhelmi]
* Threading fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, 
  Rajkumar Sivasamy, Laurent Vivier]
* Documentation fixes [Jacob Berkman, Manuel Clos, Jared Dukat, 
  Sebastian Rittau, Linus Welleij]
* Misc bug fixes [Anders Carlsson, Sam Couter, Morten Welinder, Owen]
* Updated translations (bg,ko,vi)

Overview of Changes in GLib 2.0.5
=================================

* Fix problem with interface prerequisites [Jon Trowbridge, Dave Camp]
* Clean up debug spew from GObject [Anders Carlsson]
* Compiler warning fixes [David L. Cooper II]
* Fix some problems with g_build_path() [Guillaume Chazarain, Owen Taylor]
* Fixes for --disable-debug [Sebastian Wilhelmi]
* Threading fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, 
  Rajkumar Sivasamy, Laurent Vivier]
* Documentation fixes [Jacob Berkman, Manuel Clos, Jared Dukat, 
  Sebastian Rittau, Linus Welleij]
* Misc bug fixes [Anders Carlsson, Sam Couter, Morten Welinder, Owen]
* Updated translations (bg,ko,vi)

Overview of Changes in GLib 2.0.4
=================================

* Fix some 64-bit problems. (George Lebl, David L. Cooper II)
* Add note about Tru64 iconv to INSTALL. (Manuel Op de Coul)
* Fix problem with timouts > MAXINT. (Tim Janik, Owen Taylor)
* Updated translations (ca,es,fr,ja,gl,ms,nl,pl,pt,ru)

Overview of Changes in GLib 2.0.3
=================================

* Handle sorting 0-length arrays (Ron Arts)
* Threading fixes (Sebastian Wilhelmi)
* Portability fixes (Miroslaw Dobrzanski-Neumann, Jacob Berkman, Gareth Pierce, 
  Sebastian, Qingjiang Yuan)
* Various fixes for glib-2.0.m4. (Jim Gettys, others.)
* Locate right glib-genmarshal when cross-compiling. (Mitch Natterer)
* Win32 fixes (Tor Lillqvist)
* Try to fix g_get_charset() related segfaults. (Owen)
* Fixes for gettext detection. (Dan Winship, HideToshi Tajima, Boyd Lynn Gerber,
  Andrew P. Lentvorski, Jr.)
* Fix g_scanner_unexp_token() (Tim Janik, Sven Neumann)
* g_markup fixes. (Matthias Clasen.)
* Bug fixes and cleanups (Daniel Elstner, Matthias, Laszlo Peter, Morten Welinder,
  Wayne Schuller)

Overview of Changes in GLib 2.0.1
=================================

* Portability fixes for Sun's Forte compiler [Erwann Chenede]
* Performance improvements for GObject parameter lookup, 
  g_filename_to/from_utf8() [Alex Larsson]
* Actually check interface prerequisites [Matthias Clasen,
  Miroslaw Dobrzanski-Neumann]
* Fix problem with glib-mkenums taking huge amounts of stack. [Owen Taylor]
* Fix g_signal_handlers_disconnect_by_func() for C++ [Damien Sandras]
* Fixes for g_log() and threading.
  [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, Tim Janik]
* Make g_print(), g_printerr(), g_warning(), etc, convert from
  UTF-8 to the encoding of the locale [Sebastian Wilhelmi, Tim]
* Fixes for GIOChannel on windows. [Tor Lillqvist]
* Fix gsize/gint mismatches in giochannel.c [Miroslaw Dobrzanski-Neumann]
* Fix file descriptor leak in g_file_get_contents() [Matthias]
* Workaround iconv() problems on older Solaris [Lauri Alanko]
* Fix warnings with gcc-3.1 about asm const [Cody Russel]
* Minor bug fixes.

Other contributors: Hans Breuer, LEE Sau Dan, Sven Neumann, Salmaso Raffaele,
  Akira Tagoh, Morten Welinder


Overview of Changes in GLib 2.0.0
=================================

* Thread portability fixes [Sebastian Wilhelmi]
* Documentation updates [Owen Taylor]
* Make g_strerror(), g_strsignal() properly return UTF-8,
  call bind_text_domain_codeset() so that error strings
  are in UTF-8 as well. [Owen, Tor Lillqvist]

Overview of Changes in GLib 2.0.0 rc1:
======================================

* Win32 fixes [Tor Lillqvist]
* Portability fixes [Finlay Dobbie, Miroslaw Dobrzanski-Neumann]
* Fix up g_date_strftime [Daniel Elstner]
* Add some structure padding [Tim Janik]
* Make g_get_homedir() prefer the users home directory to $HOME

Other contributors: Matthias Clasen, Paolo Maggi, Christian Rose

Overview of Changes in GLib 1.3.15:
===================================

* Speed up marshalers by using private access to GValue 
  [Anders Carlsson, Tim Janik]
* Reduce GValue to 2 elements [Tim]
* Add G_DEBUG environment variable, G_DEBUG=fatal_warnings [Matthias Clasen]
* Fixes for AIX compilation [Miroslaw Dobrzanski-Neumann]
* Add padding to various structures [Owen Taylor, Tim]
* Win32 fixes [Tor Lillqvist]

Other contributors: James Henstridge, Ryan Lovett, Morten Welinder,
  Daniel Elstner

Overview of Changes in GLib 1.3.14:
===================================

* Register value transformations for gint64, guint64 [Andy Wingo]
* Build with large-file support [Sven Neumann, Owen Taylor]
* Fix handling of hostnames in URI's [Darin Adler]
* Main loop bug fixes [Havoc Pennington, Owen]
* Doc fixes and improvements [Manish Singh, Tim Janik]
* Support ' as attribute delimiters in GMarkup [Matthias Clasen]
* Win32 fixes [Hans Breuer, Tor Lillqvist]
* Threading bug and build fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann]
* Miscellaneous bug fixes

Other contributors: Matthias Clasen, James Henstridge, Mitch Natterer, 
  Morten Welinder.

Overview of Changes in GLib 1.3.13:
===================================

* Fix g_filename_to/from_uri for Win32 [Tor Lillqvist, Darin Adler]
* Miscellaneous win32 fixes [Tor, Hans Breuer]
* Fix thread options for gcc on AIX [Jerome Zago, Sebastian Wilhelmi]
* Documentation improvements [Ron Steinke, Matthias, Sebastian]
* Cache iconv converters as used by g_convert() [Jeffrey Stedfast]
* Bug fixes [Sven Neumann, Owen Taylor, Matthias Clasen, Jeffrey,
  Laszlo Peter, Havoc Pennington, Tim Janik]

Overview of Changes in GLib 1.3.12:
===================================

* Implement closure chaining, fixing up API (Tim Janik)
* Closure chaining test case (James Henstridge)
* Make GType long not int where both are equal width (Tim)
* Win32 fixes and improvements (Hans Breuer, Tor Lillqvist)
* Fixes for NetBSD. (Dan Winship)
* Use snprintf() for g_printf_string_upper_bound() where possible. (Matthias Clasen)
* Save space for GBSearchArray (Tim Janik)
* Documentation improvements. (Matthias, Sven Neumann, Havoc Pennington)

Other contributors: Darin Adler, Chris Blizzard, Anders Carlson, Daniel Elstner, Michael Meeks, 
  Mark McLoughlin, Dave Neary, Manish Singh, Owen Taylor, HideToshi Tajima, 
  Sebastian Wilhelmi.


Overview of Changes in GLib 1.3.11:
===================================

* Win32 fixes [Hans Breuer, Tor Lillqvist]
* Documentation improvements [Matthias Clasen]
* Portable directory handling API [Hans]
* Threading fixes [Sebastian Wilhelmi, Havoc Pennington]
* Fix excess relocations in Unicode tables [Andrew Taylor]
* Fix gpattern for UTF-8 [Matthias Clasen]
* Support overriding class closures [Tim Janik]
* Support for derivation from G_TYPE_POINTER [Owen Taylor]
* Hide pointers to type information inside GType to reduce locking
  [Alex Larsson, Tim]
* Adds check for direct inclusion of gobject/*.h [Owen]
* GObject API cleanups [Tim]

Other contributors: Darin Adler, Jacob Berkman, Daniel Egger, Eric Lemings, 
  Michael Meeks, Mark McLoughlin, Arkadiusz Miskiewicz, Dan Winship


Overview of Changes in GLib 1.3.10:
===================================

* Many Win32 fixes and improvements [Tor Lillqvist]
* Documentation improvements [Matthias Clasen]
* g_string_printfa() renamed to g_string_append_printf()
* Use libcharset from libiconv to implement charset detection
  more portably. [Owen Taylor, Hidetoshi Tajima]
* Add 64 bit type support to GObject [Joshua Pritikin, Mathieu Lacage, Owen]
* Make support for 64 bit integers a requirement [Joshua]
* GPattern improvements [Tim Janik, Matthias]
* Locale independent g_ascii_strtod / g_ascii_dtostr [Alex Larsson]
* Many bug fixes and minor tweaks.

Other Contributors: Darin Adler, Jakub Jelinek, James Antill, Andrew Taylor,
  Ben Gertzfield, Elliot Lee, Manish Singh, Abel Cheung, Laszlo Peter,
  Sven Neumann, George Lebl, Raja Harinath, Sebastian Wilhelmi,
  Jacob Berkman


Overview of Changes in GLib 1.3.9:
==================================

* Fixes for comparison of threads [Sebastian Wilhelmi]
* Use vasprintf() when possible for g_strdup_printf [Matthias Clasen]
* Win32 fixes [Tor Lillqvist, Hans Breuer]
* Add a len argument to g_ascii_strup/strdown
* Bug, portability fixes, cleanups.

Other Contributors: Darin Adler, Katsuhiro Okuno, Joshua N. Pritikin


Overview of Changes in GLib 1.3.8:
==================================

* Documentation updates [Owen]
* Made GType interfaces overridable in derived types
* Many win32 fixes [Tor Lillqvist]
* Miscellaneous cleanups and fixes

Other contributors:
  Darin Adler, Matthias Clasen, Ron Steinke, Hans Breuer, Alex Larsson


Overview of Changes in GLib 1.3.7:
==================================

* Integrate GClosure support into the main loop [Owen Taylor]
* More GSignal convenience functions (macros) [Sven Neumann, Tim Janik]
* Introduced weak references for GObject [James Henstridge, Sven, Tim] 
* Minor hash table optimizations
* Main loop and threading improvements [Sebastian Wilhelmi]
* Added g_ascii_* functions to be used for locale insensitive UTF-8
  compliant code instead of old string functions  [Darin Adler, Alex Larsson]
* Add functions for Unicode case-conversion, normalization, and 
  collation [Owen]* GString improvements [Owen]
* Reworked the GIOChannel code [Hidetoshi Tajima, Ron Steinke]
* Removed glib-config-2.0 in favour of pkgconfig [Sebastian]
* Make code 64bit clean [Mark Murnane]
* More G_CONST_RETURN fixes
* Many improvements to the win32 code [Tor Lillqvist, Hans Breuer]
* Miscellaneous bug and API fixes

Other contributors:
  Michael Natterer, Christopher James Lahey, Padraig O'Briain,
  Matthias Clasen, Josh Pritikin, Steve Baker, Cesar Rincon, Garry R. Osgood,
  Michael Meeks, Laszlo Peter,  Martin Baulig, Kjartan Maraas, Andrew Lanoix,
  Peter Williams


Overview of Changes in GLib 1.3.6:
==================================

* Threads have a "return value" from g_thread_join
* Removed ability to adjust thread stack size
* Prefix warnings with progname/PID by default, change toggle for this to 
  be an env variable G_MESSAGES_PREFIXED not a compile-time option
* GMarkup speedups
* GDate const, convenience fixups
* Include test cases that headers are compilable by C++ compiler
* Add ability to spawn processes with argv[0] != executable path.
* g_strstr_len, g_strrstr, g_strrstr_len
* Add length argument to g_utf8_strchr and g_utf8_strrchr.
* Misc bug fixes


Overview of Changes in GLib 1.3.5:
==================================

* Added an installed glib-mkenums Perl program for parsing enumeration
  declarations from header files.
* Mark some additional deprecated functions.
* Bug and Portability fixes


Overview of Changes in GLib 1.3.4:
==================================

* Efficiency improvements for GThreadPool
* A few bug fixes
* Build fixes
* Documentation improvements


Overview of Changes in GLib 1.3.3:
==================================

GLib:

* More user_data support in various functions.
* Main loop API revamps to support per-thread main loops.
* Unicode handling improvements.
* Implemented debugging traps.
* G_CONST_RETURN specification all over the place.
* Various new small utility functions.
* Random number generator precision improvements.
* New configure option --disable-mem-pools.
* Many Win32 improvements.
* Added g_try_malloc() friends varinats.
* Many documentation improvements.
* Many threading improvements, support for dynamic allocation
  of static mutexes.
* GHookLIst API cleanups.
* Improved format support of GDate parser.
* String function speed improvements with new g_stpcpy().
* Hashtable API additions.
* New GPatternSpec for shell-style pattern matching (from GtkPatternSpec).
* Optimizations, cleanups, bug fixes.

GObject:

* Added many convenience functions.
* GClosure and GParamSpec use float/sink ref-counting scheme now.
* Reworked property change notification.
* Binary searchable array cleanups, so it's widely usable now.
* Added static content keeping for some GValue types.
* Support for statically scoped signal parameters.
* Extinguished property trailer args in set/get interface.
* Added support for abstract types.
* G_CONST_RETURN specification all over the place.
* Split parameter exchange functionality into value transforms
  and parameter conversions.
* Added signal emission hooks and signal accumulators.
* Added interface prerequisites to support is_a (interface, object)
  relations.
* Implemented GValueArray.
* New types, boxed: G_TYPE_VALUE, G_TYPE_CLOSURE, G_TYPE_GSTRING
  GParamSpecs: G_TYPE_PARAM_PARAM, G_TYPE_PARAM_POINTER, G_TYPE_PARAM_CLOSURE,
  G_TYPE_VALUE_ARRAY, G_TYPE_PARAM_UNICHAR, G_TYPE_PARAM_VALUE_ARRAY.
* Varrags value collection improvements.
* Implemented debugging traps.
* Made things thread-safe.
* Many documentation improvements.
* Many cleanups, optimizations and bug fixes.


Overview of Changes in GLib 1.3.2:
==================================

GLib:

* Win32 build improvements  [Tor]
* Improvements to error reporting  
  (g_critical(), g_return_if_reached()) [Darin]
* Add g_strlcpy/g_strlcat  [David Wheeler]
* New IO channel implementation for Win32  [Tor] 
* Make g_array_free, g_string_free return pointer to memory requested
  not to be freed.  [Darin]
* Added GError based error reporting for thread functions.  [Sebastian]
* Moved reference docs into GLib distribution. [Owen]
* Added g_convert() for doing convenient character set conversions based
  on iconv. (GLib now requires libiconv or a native iconv.) [Havoc/Owen]
* Various Unicode handling additions (g_ucs4_to_utf8, g_utf8_validate(),
  g_{locale,filename}_{to,from}_utf8)  [Robert/Havoc/Owen]
* Portability fixes for threading.  [Sebastian]
* Added convenient functions for launching new processes (g_spawn_*),
  and shell quoting/unquoting functions.  [Havoc]
* Split glib.h into many headers.  [Sebastian]
* Added a simple callback-based parser for XML-like files (GMarkup).  [Havoc]
* Fixed confusions between comparison functions that return <0, 0, >0
  and equaility functions that return FALSE,TRUE.  [Sebastian]
* Added safe/portable temporary file manipulation functions.  [Tor]
* autoconf improvements.  [Raja]
* Many documentation improvements.
* Bug fixes.

GObject:

* Added boxed and pointer types.  [Tim/Jonathan]
* Added callback abstraction (GClosure)  [Tim]
* Added signal system (GSignal)  [Tim]
* Make GTypePlugin an interface  [Tim]
* Added GTypeModule - a simple GTypePlugin instantiation  [Owen]
* Bug fixes.


What's new in GLib 1.3.1:
=========================

* New GObject library added including object system based on
  the GTK+ object system. 
* Functions for getting the properties of Unicode characters, 
  computing the canonical decomposition and ordering combining
  characters aand manipulating UTF-8 string manipulation based
  on libunicode.
* GString now properly handles embedded nuls.
* Multiple fixes from the 1.2.x branch.
* Upgrade to libtool 1.3.3
* Full thread support (thread creation and destruction).
* BeOS port, BeOS dynamic modules.
* Many improvements to the Windows ports.
* Improvements to the OS/2 port, OS/2 module support.
* Double ended queue implementation.
* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
* New configure option --enable-msg-prefix to prefix messages, warnings
  et ceteri with the program name and the process id.
* New thread-safe random number generator Mersenne Twister.
* g_strcompress() added, g_strescape() had a slight API change, and
  more tightly defined semantics.
* the g_string(x) macro has been removed, #x may be used instead.
                                

