Overview of changes in GLib 2.68.1
==================================

* Fix a crash in `GKeyFile` when parsing a file which contains translations
  using a `GKeyFile` instance which has loaded another file previously (#2361)

* Pin GIO DLL in memory on Windows (!2016)

* Bugs fixed:
 - #2361 g_key_file_load_from_file segfaults on "Key[*]="like lines
 - !1997 Backport !1996 “Include glibconfig.h to get the G_OS_UNIX token” to glib-2-68
 - !2016 GIO W32: Pin gio DLL
 - !2021 Backport MR !2016 (GIO W32: Pin gio DLL) into glib-2-68
 - !2022 Few fixes and notes for building on Visual Studio 2012 and earlier
 - !2034 Backport MR !2032 (gkeyfile: Drop a redundant check) into glib-2-68
 - !2035 Backport !2026 “Split g_test_log() messages that contain multiple lines” to glib-2-68

* Translation updates:
 - English (United Kingdom)


Overview of changes in GLib 2.68.0
==================================

* Bugs fixed:
 - !1987 build: Drop gconstructor_as_data_h usage from glib-compile-schemas
 - !1989 glib.supp: Generalize some suppressions
 - !1992 gbytesicon: Fix error in g_bytes_icon_new() documentation
 - !1994 glocalfileoutputstream: Tidy up error handling
 - !1995 tests: Fix copy/paste error in queue test

* Translation updates:
 - Czech
 - Finnish
 - Italian
 - Korean
 - Lithuanian
 - Polish
 - Romanian
 - Slovenian
 - Turkish


Overview of changes in GLib 2.67.6
==================================

* Fix a security issue when using `g_file_replace()` with
  `G_FILE_CREATE_REPLACE_DESTINATION` (#2325)

* Disallow operations on the empty path with `g_file_new_from_path()` (#2328)

* Various fixes for GLib when building with clang-cl on Windows (work by
  Aleksandr Mezin) (#2341, #2344)

* Bugs fixed:
 - #2325 file-roller symlink attack
 - #2327 Teach glib-mkenums about GLIB_AVAILABLE_ENUMERATOR_IN_2_68, and start using it
 - #2328 g_file_new_for_path("") yields CWD, which seems wrong
 - #2341 glib-genmarshal output is sometimes empty because output file is not closed
 - #2344 c_std=c11: gbitlock.c: ‘asm’ undeclared
 - !1962 Validate D-Bus machine ID after loading
 - !1976 Use the right permissions for directory watching on Win32
 - !1977 gio/tests/{meson.build,pollable.c}: Determine libutil SONAME at build time
 - !1980 glib.supp: Add another system thread suppression

* Translation updates:
 - Basque
 - Catalan
 - Czech
 - French
 - Galician
 - German
 - Hungarian
 - Indonesian
 - Korean
 - Latvian
 - Portuguese
 - Portuguese (Brazil)
 - Serbian
 - Spanish
 - Swedish
 - Ukrainian


Overview of changes in GLib 2.67.5
==================================

* Fix more issues with `glib_typeof` macro from 2.67.3–2.67.4 (work by
  Iain Lane, Simon McVittie) (#2331, !1975)

* Fix regression with some FD mappings passed to `g_subprocess_launcher_spawnv()`
  caused by changes for #2097 in GLib 2.67.4 (work by Olivier Fourdan,
  Philip Withnall) (#2332)

* Fix detection of `str[n]casecmp()` when building with `clang-cl` (work by
  Aleksandr Mezin) (#2337)

* Use zlib from subproject if configured with `wrap_mode=forcefallback` (work by
  Seungha Yang) (!1959)

* Bump Visual Studio compilation requirement to VS 2012, and Windows 8 SDK for
  GLib 2.67.x onwards (work by Chun-wei Fan) (!1970)

* Bugs fixed:
 - #832 Some tweaks re: GRWLock
 - #2331 glib 2.67.3: <glib.h> can no longer be included in extern "C" blocks
 - #2332 Glib 2.67.4 causes gnome-shell to exit when spawning Xwayland on demand
 - #2333 Missing relation between g_file_info_get_size() and G_FILE_ATTRIBUTE_STANDARD_SIZE attribute in documentation
 - #2337 Linking fails when building with clang-cl because of str[n]casecmp
 - !1936 tests: Fix leak of dlopened module in pollable test
 - !1954 Change SkipAsyncData fields to be gsize (and not gssize)
 - !1956 The ETag returned by various GFile functions is nullable
 - !1959 meson: Use subproject zlib if "wrap_mode=forcefallback" was specified
 - !1961 gkeyfilesettingsbackend: check for errors when creating file monitors
 - !1970 README.win32.md: Mention about Window 8+ SDK requirement
 - !1971 gio/tests/pollable.c: Fix build on non-Linux UNIX
 - !1975 gatomic.h: Make `glib_typeof` API break opt in.

* Translation updates:
 - Basque
 - Danish
 - English (United Kingdom)
 - Galician
 - German
 - Indonesian
 - Lithuanian
 - Portuguese
 - Portuguese (Brazil)
 - Slovenian


Overview of changes in GLib 2.67.4
==================================

* Add a `g_string_replace()` function (work by Joshua Lee) (#225)

* Add `G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER` flag to simplify
  the common case for writing a D-Bus authentication observer, allowing most
  uses of `GDBusAuthObserver` to be dropped (#1804)

* Add a new `g_spawn_with_pipes_and_fds()` variant which supports renumbering
  FDs (#2097)

* Add new g_memdup2() API to replace g_memdup(), which is vulnerable to a
  silent integer truncation and heap overflow problem if not used carefully
  (discovered by Kevin Backhouse, work by Philip Withnall) (#2319)

* Fix various regressions caused by rushed security fixes in 2.66.6 (work by
  Simon McVittie and Jan Alexander Steffens) (!1932, !1941, #2323)

* Fix a silent integer truncation when calling g_byte_array_new_take() for
  byte arrays bigger than G_MAXUINT (work by Krzesimir Nowak) (!1942)

* Fix `g_utf8_strdown()` to fix some issues in Turkish
  (work by Kjell Ahlstedt) (!1930)

* Bugs fixed:
 - #225 GString doesn't have a g_string_replace() function
 - #587 g_input_stream_skip() out-of-bounds behavior is inconsistent between implementations
 - #1804 Add G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER flag
 - #2097 GSubprocessLauncher with FD assignment can clash with g_spawn_async internal pipe
 - #2315 httpproxy: Need overflow protection when reading response during connection establishment
 - #2319 CVE-2021-27219 (GHSL-2021-045): integer overflow in g_bytes_new/g_memdup
 - #2322 g_test_dbus: double output when piping
 - #2323 [GLIB 2.66.6] g_io_channel_set_line_term() stopped working with null terminated strings and length -1
 - !1917 Adding a missing test on integer overflow within g_http_proxy_connect()
 - !1918 Fix more warnings
 - !1923 Add support for Tilix and Konsole
 - !1930 guniprop: Fix g_utf8_strdown() for Turkish locale
 - !1932 gtlspassword: Fix inverted assertion
 - !1934 gdbus: Reject attempts to set future connection or server flags
 - !1938 Fix more warnings
 - !1939 ci: Temporarily disable macOS CI job as runner is offline
 - !1940 Fix more warnings
 - !1941 gkeyfilesettingsbackend: Fix basename handling when group is unset
 - !1942 CVE-2021-27218: gbytearray: Do not accept too large byte arrays
 - !1947 Revert "Merge branch 'wip/pwithnall/macos-ci-disable' into 'master'"
 - !1948 tests: Use a more realistic language code than sv_SV
 - !1949 gatomic: Make fallback g_atomic_pointer_get type-safe
 - !1951 Add a test for parsing 0 as double
 - !1955 tests: Add missing NULL terminator to spawn-singlethread test

* Translation updates:
 - Catalan
 - Galician
 - Hungarian
 - Portuguese
 - Romanian
 - Slovenian
 - Spanish
 - Swedish
 - Turkish
 - Ukrainian


Overview of changes in GLib 2.67.3
==================================

* Add new `g_memdup2()` API to replace `g_memdup()`, which is vulnerable to a
  silent integer truncation and heap overflow problem if not used carefully
  (discovered by Kevin Backhouse, work by Philip Withnall) (#2319)

* Add new `g_dbus_object_path_escape()` and `g_dbus_object_path_unescape()` APIs
  to provide one way of escaping arbitrary bytestrings for use in D-Bus object
  paths (work by Lars Karlitski and Frederic Martinsons) (#968)

* Use `bash-completion.pc` (if available) to provide the path to install
  completion files into (work by Frederic Martinsons) (#1054)

* Fix support for public/private trigraphs in `glib-mkenums` (work by Matthias Klumpp) (!1870)

* Add `glib_debug` configure option to allow disabling debug infrastructure in
  builds with debug symbols enabled (work by Ole André Vadla Ravnås) (!1889)

* Fix a regression where `PATH` would always be searched when using `g_spawn()`,
  even when it wasn’t supposed to (work by Simon McVittie and Thomas Haller) (!1902)

* Override `gio-querymodules` in Meson when used as a submodule (work by Xavier Claessens) (!1909)

* Bugs fixed:
 - #344 gdbus(1) command-line completion issues
 - #968 gdbus: add g_dbus_object_path_{un,}escape
 - #1054 Use pkg-config to get path for bash-completion file installation
 - #1180 GUnixInputStream and GUnixOutputStream don't consider TTYs pollable
 - #2011 Add additional unit tests for D-Bus name watching
 - #2226 clang++ compilation fails on clusterfuzz
 - #2292 Cannot find a common ancestor when running CI style check jobs
 - #2299 GObject introspection annotation of g_closure_new_object() is wrong
 - #2305 GIO security hardening causing gnome-keyring to regress when session bus is provided by dbus-launch (dbus-x11)
 - #2314 gdatetime: math library link issue
 - #2319 GHSL-2021-045: integer overflow in g_bytes_new/g_memdup
 - !610 Various memory leak cleanups to GSettings tests
 - !1804 Add more GIR annotations to gparam.c and gsignal.c
 - !1823 Fix more warnings
 - !1843 gfile: Add Linux kernel headers compatibility kludge
 - !1847 Port to QNX
 - !1853 ginetaddress: Handle systems without IPv6 support
 - !1859 docs: update g_action_group_activate_action() remote activation semantics
 - !1860 glocalfile: Fix an uninitialized variable
 - !1865 tests: Add more debug information to gdbus-connection-slow
 - !1868 gdesktopappinfo: Fix validation of XDG_CURRENT_DESKTOP
 - !1870 mkenums: Support public/private trigraph again
 - !1873 Fix possible integer overflow of g_socket_send_message()
 - !1876 Fixing g_socket_send_message() documentation to make it clearer
 - !1877 Fix more warnings
 - !1878 Another fix on g_socket_send_message()
 - !1879 Fix more warnings
 - !1880 GError documentation tweaks
 - !1881 docs: Move ‘Notes’ section from README to NEWS
 - !1883 gutils: Document caching of XDG directory variables
 - !1884 gthread-win32: Use SetThreadDescription Win32 API for setting thread name
 - !1887 ci: Fix msys-mingw32 CI builds due to package rename
 - !1888 docs: Add documentation for GLIB_VERSION_CUR_STABLE and PREV_STABLE
 - !1889 build: Add glib_debug option
 - !1890 gtype: Improve formatting of GType documentation
 - !1891 Fix more warnings
 - !1893 gwin32appinfo: Fix printf length sub-specifier
 - !1894 gsocket: Fix SO_NOSIGPIPE regression on Darwin
 - !1898 gtestutils: Add g_test_get_path() API
 - !1899 m4macros: replace obsolete macros AC_TRY_RUN and AC_TRY_LINK in glib-2.0.m4
 - !1900 [th/gsignal-cleanup] minor changes to GSignal related code
 - !1901 Check if the remote already exists before adding it.
 - !1902 spawn: Don't set a search path if we don't want to search PATH
 - !1903 m4macros: Increment serial number of glib-2.0.m4
 - !1905 Start to ignore known leaks under AddressSanitizer
 - !1906 gdbus-serialization: Don't leak string containing first serialization
 - !1908 Fix straightforward memory leaks in tests
 - !1909 Meson: override gio-querymodules program
 - !1910 gio: Add explicit virtual g-i annotations for undiscovered invoker relationship
 - !1911 Fix more warnings
 - !1915 Mark g_key_file_get_comment() key parameter as nullable
 - !1919 atomic: Fix type check of g_atomic_pointer_compare_and_exchange()
 - !1921 guri: Mark g_uri_get_host as nullable
 - !1925 gapplication: Fix a memory leak

* Translation updates:
 - Czech
 - Friulian
 - Galician
 - Hungarian
 - Portuguese
 - Portuguese (Brazil)
 - Romanian
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.67.2
==================================

* Add `gio launch` command to execute programs (work by Frederic Martinsons) (#54)

* Fix unused parameter warnings in code generated by `gdbus-codegen` (work by Frederic Martinsons) (#1105)

* Officially deprecate `to-pixdata` option for `glib-compile-resources`, in favour
  of simply embedding more modern image formats in linked-in `GResource` files (#1281)

* Support querying and running UWP applications on Windows (work by LRN) (#1991)

* Support `gio trash --restore` and `gio trash --list` commands (work by Frederic Martinsons) (#2098)

* No longer read environment variables for GIO module locations when running as setuid (#2168)

* More progress on fixing compiler warnings (work by Emmanuel Fleury) (!1773 and others)

* `GKeyFile` performance improvements (work by Timm Bäder) (!1829, !1832)

* Improve UDP socket behaviour on Windows (work by Marco Mastropaolo and Ole André Vadla Ravnås) (!1827, !1844)

* Add `-Dtests` meson configure option for disabling tests entirely (work by Ole André Vadla Ravnås) (!1850)

* Bugs fixed:
 - #54 Add `gio launch` command to execute .desktop files
 - #513 GSignal: Impossible to have return values in signals which are G_SIGNAL_RUN_FIRST only
 - #514 GSignal: Only limited usage of accumulator function possible
 - #1105 gdbus-codegen: fix some unused parameter warnings
 - #1188 Crash in gapplication.c:1014 when reading error message if dbus_register returns false without setting error
 - #1281 Update glib-compile-resources and GResource docs to deprecate/remove to-pixdata in stable/master resp.
 - #1283 gvfs-trash error message when unable to create trash directory is unhelpful
 - #1568 GObject tutorial does not mention floating references
 - #1991 W32: Glib cannot run UWP applications
 - #2098 gio trash: restore trashed files to their original location
 - #2168 giomodule: Loads GIO modules even if setuid, etc.
 - #2264 GPtrArray might call qsort() with NULL data
 - #2265 2.67.1 regression: assertion failure starting gnome-terminal
 - #2275 gio/completion/gio: Some variables are not localized
 - #2279 g_source_is_destroyed example uses deprecated GDK API
 - !1304 Extended error
 - !1773 Fix more warnings
 - !1783 gtlsdatabase: remove duplicate precondition check
 - !1784 fuzzing: Add more fuzzing tests for various string parsing functions
 - !1785 glocalfile: Add an assertion to help static analysis
 - !1787 Debuggability improvements in gosxappinfo.m
 - !1788 gdate: Validate input as UTF-8 before parsing
 - !1791 gdatetime: Disallow NAN as a number of seconds in a GDateTime
 - !1794 gio-tool-info: Prevent criticals if mount options are not available
 - !1796 gfileutils: Fix typo in docs
 - !1797 gdatetime: Improve ISO 8601 parsing to avoid floating point checks
 - !1801 glib: Add more missing return value annotations
 - !1802 gobject: More missing return value annotations
 - !1806 tests: Add some rounding tolerance in timeout test
 - !1807 python: Reformat some files to keep style-check-diff happy
 - !1808 tests: Be more lenient with timing checks on asyncqueue pops
 - !1810 gfileinfo: Add missing preconditions to g_file_info_get_attribute_data()
 - !1811 Add more missing nullable annotations
 - !1813 gdbus-codegen: Ignore some flake8 warnings
 - !1815 Fix more warnings
 - !1816 fuzzing: Add more GUriFlags to the URI parsing test
 - !1817 fuzzing: Add more parsing flags to the GKeyFile test
 - !1818 Fix more warnings
 - !1819 Fix more warnings
 - !1821 gdate: Limit length of dates which can be parsed as valid
 - !1822 Fix more warnings
 - !1827 Windows: fix FD_READ condition flag still set on recoverable UDP socket errors.
 - !1829 keyfile: Delay calling g_get_language_names() until it's needed
 - !1830 gsocket: Fix credentials error-handling on Apple OSes
 - !1832 More small GKeyFile performance improvements
 - !1834 Update gvdb
 - !1837 gdatetime.c: Fix MSVC builds for lack of NAN items
 - !1838 Minor improvements to GError documentation
 - !1840 Add nullable annotation for g_file_get_uri_scheme
 - !1841 gthread: Fix incorrect cast
 - !1842 gthread: Port native mutex to Clang
 - !1844 gsocket: Improve default UDP behavior on Windows
 - !1845 gsocket: Fix use-after-close
 - !1848 gwin32: Always use unicode APIs
 - !1850 build: Add option for disabling tests
 - !1855 build: Fix ssize_t detection on older versions of glibc
 - !1856 build: Fix Android system checks
 - !1857 gtestutils: Fix g_assert_not_reached() on MSVC
 - !1861 More GError tests
 - !1863 tests: Ignore -Wformat-nonliteral warning in new GError tests

* Translation updates:
 - Catalan
 - Galician
 - German
 - Lithuanian
 - Romanian
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.67.1
==================================

* Deprecate `g_time_zone_new()` in favour of `g_time_zone_new_identifier()`,
  which makes error checking easier (#553)

* Remove `volatile` from various public APIs, including `G_DEFINE_*`. You should
  adjust your code to not use `volatile` for atomic variables, `GOnce`
  variables, or mostly anything else (see
  http://isvolatileusefulwiththreads.in/c/). (#600)

* Support passing file handles to `gdbus` command line tool (work by
  Norbert Pocs and Tim Waugh) (#961)

* Add `g_assert_cmpstrv()` test convenience function (work by Niels De Graef) (#2015)

* Changes to the behaviour of the `G_URI_FLAGS_SCHEME_NORMALIZE` scheme
  normalization flag in `GUri` (work by Carlos Garcia Campos) (#2257, !1716)

* Add new `--run-prefix` and `--skip-prefix` options to GTest, to allow running
  or skipping test suites by prefix (work by Frederic Martinsons) (!1738)

* Fix thread-safety of `GBinding`; see the updated documentation for
  `g_object_bind_property()` for full details — if your code uses `GBinding`
  across threads, you should re-check it against the latest documentation, use
  `g_binding_unbind()` rather than implicitly dropping the binding with your
  last `g_object_unref()` call, and use `g_binding_dup_source()`/`g_binding_dup_target()`
  instead of `g_binding_get_source()`/`g_binding_get_target()`
  (work by Sebastian Dröge) (!1745)

* Bugs fixed:
 - #553 Improved error-handling when timezone lookup fails
 - #600 Remove "volatile" from G_DEFINE_*
 - #961 gdbus tool: file handle passing doesn't work
 - #994 mark g_assert_* as "noreturn" also on MSVC
 - #1560 Can't get data for empty compressed resources
 - #1592 Main loop ignores GPollFD sources when there is at least one source ready with priority higher than default one
 - #1833 meson: reconsider G_DISABLE_CAST_CHECKS handling
 - #1849 Documentation of g_set_object(): can object_ptr be null?
 - #1963 Follow-up from "gdbusmessage: Limit recursion of variants in D-Bus messages"
 - #2015 Add g_assert_cmpstrv() test utility
 - #2046 Add pylint and shellcheck CI checks
 - #2074 Big dbus writes with a FD list fail
 - #2076 g_type_register_fundamental() and g_type_add_interface_static() should not trigger valgrind leak warnings
 - #2150 Add URI parsing tests from GstURI to GUri
 - #2221 GLib-GIO:ERROR:../gio/tests/gsocketclient-slow.c:99:on_event: 'connection' should be NULL
 - #2223 Documentation of g_strrstr_len is misleading; suggested fix
 - #2233 GSocketClient crashes on connection failure
 - #2236 Docs: gdbus-codegen example links broken
 - #2253 In gspawn.c, use sysconf() system call on Mac OS, instead of default maxfiles limit of 4096
 - #2257 GUri: apply scheme normalization flag consistently
 - !1251 Improve support for interface types
 - !1385 gobject: allocate parameter list for g_object_new_valist() entirely on stack
 - !1629 Add some tracing to GTask
 - !1699 Fix signedness warnings
 - !1701 gio: Fix some remaining DocBook syntax in a documentation comment
 - !1708 gio: Add missing nullable annotations
 - !1716 guri: Normalize uri segments if they are encoded and add a flag to do scheme-based normalization
 - !1722 gio: Fix various typos of the name ‘D-Bus’
 - !1724 glib/tests/fileutils: Fix expectations when running as root
 - !1726 gdbus: Document the intended semantics of handles and fdsTim Waugh
 - !1731 Make more use of g_assert_no_errno()
 - !1733 gdbusauthmechanismsha1: Don’t create keyring dir when running as setuid
 - !1734 glocalfileinfo: Use a single timeout source at a time for hidden file cache
 - !1735 gobject: Standardise on the term ‘instantiatable’
 - !1737 gscanner: Avoid undefined behaviour copying between union members
 - !1738 Extend the usage of -p option for glib test framework
 - !1740 Fix more warnings
 - !1745 Make GBinding thread-safe (alternative approach)
 - !1746 gkeyfilesettingsbackend: improve error-checking
 - !1747 Fix broken link syntax in g_vasprintf docs
 - !1748 Fix minor Coverity return value warnings
 - !1750 Fix warnings
 - !1754 GWin32AppInfo: Use a thread pool for async appinfo tree rebuilds
 - !1755 Minor Coverity fixes
 - !1756 shellcheck fixes
 - !1757 Python formatting improvements
 - !1758 Fix warnings
 - !1765 Fix more warnings
 - !1766 Fix some gdatetime annotations
 - !1767 tests: Fix GDateTime tests on FreeBSD
 - !1769 gfileicon: Fix unused-but-set variable with G_DISABLE_ASSERT
 - !1770 Minor scan-build fixes
 - !1771 macos: fix frexpl checks in cross-compilation
 - !1776 gio: ‘security_context_t’ is deprecated
 - !1780 Minor Coverity fixes
 - !1781 gspawn: Handle ENOSYS from close_range()
 - !1782 ghostutils: Abandon hostname conversion early if it’s too long

* Translation updates:
 - Czech
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.67.0
==================================

* Important and time-critical fix to DST transitions which will happen in Europe
  on 2020-10-25 on distributions which use the ‘slim’ tzdata format (which is
  now the default in tzdata/tzcode 2020b) (work by Claudi M., LRN) (#2224)

* Further timezone handling changes to improve performance of `GTimeZone` (work
  by António Fernandes, Sebastian Keller) (#2204)

* Fix deadlock on Windows when `G_SLICE` is set in the environment (diagnosis by
  Christoph Reiter) (#2225)

* Fix UTF-8 validation when escaping URI components (thanks to Marc-André Lureau) (!1680)

* Security fix for incorrect scope/zone ID parsing in URIs (!1669)

* Add `g_log_writer_default_set_use_stderr()` API for printing log messages to stderr (work by Simon McVittie) (#2087)

* Improve connection error reporting when IPv6 is available and disabled (work by Michael Catanzaro, debugging by Konstantin Kharlamov and Milan Crha) (#2211)

* Fix definition of `G_MSVC_SYMBOL_PREFIX` for ARM (work by Wolfgang Stöggl) (!1187)

* Add `GStrvBuilder` convenience API for building `NULL`-terminated string arrays (work by Robert Ancell) (!1417)

* Support appinfo verbs other than ‘open’ on Windows (work by LRN) (!1502)

* Expose node-based `GTree` APIs (work by Maciej S. Szmigiero) (!1509)

* Add `G_DBUS_METHOD_INVOCATION_HANDLED`/`_UNHANDLED` convenience constants (work by Simon McVittie) (!1603)

* Set `IP_BIND_ADDRESS_NO_PORT` on sockets when binding to local addresses (work by Cristian Rodríguez) (!1598)

* Add Meson option for libelf support (work by Niklas Gürtler) (!1650)

* Add support for PKCS #11-backed TLS certificates (work by Patrick Griffis) (!1663)

* Add `g_subprocess_launcher_close()` API to make `GSubprocessLauncher` more usable in bindings (work by Sergio Costas) (!1677)

* Bugs fixed:
 - #1233 GType for GTree
 - #2077 Invalid Pointer Arithmetic in g_path_get_basename
 - #2087 Respecting G_MESSAGES_DEBUG in a custom log writer should be easy to do
 - #2164 GDBus DBUS_COOKIE_SHA1 mechanism may use too old a key
 - #2194 gtk3/glib crash on gimp
 - #2203 fstatat is available only on macOS 10.10+
 - #2204 Time zone cache is constantly invalidated if TZ is NULL
 - #2209 gthreadedresolver: faulty logic in parse_res_txt
 - #2210 g_private_replace ordering issue
 - #2211 "Network is unreachable" error returned when IPv6 is disabled and network is reachable using IPv4
 - #2215 DST incorrectly ends on wrong dates
 - #2224 top bar time is incorrect, timezone map in control center is broken
 - #2225 Setting G_SLICE makes Windows programs hang since 2.66
 - !1187 Define G_MSVC_SYMBOL_PREFIX correctly for ARM
 - !1417 gstrvbuilder: Add a new object to make NULL-terminated string arrays.
 - !1449 gio: Expose g_file_query_info_for_copy()
 - !1502 GWin32AppInfo: Support verbs other than "open"
 - !1509 GTree: add an ability to iterate over a tree and a node-based API
 - !1575 Use C++11 decltype where possible
 - !1598 gsocketclient: set IP_BIND_ADDRESS_NO_PORT if binding to local address
 - !1603 GDBus: Add G_DBUS_METHOD_INVOCATION_HANDLED, _UNHANDLED
 - !1643 Minor Coverity fixes
 - !1645 Fix various signedness warnings
 - !1647 Fix warnings (keep going)
 - !1648 glocalfile: Never require G_LOCAL_FILE_STAT_FIELD_ATIME
 - !1650 Make libelf dependency optional via meson feature
 - !1652 trash portal: Handle portal failures
 - !1654 gio-tool-trash: Prevent recursion to speed up emptying trash
 - !1657 glist: Clarify that g_list_free() and friends only free an entire list
 - !1658 utils: Limit the scope of the variable `max`
 - !1661 Lookup fallback time zones in the cache to improve performance
 - !1663 gtlscertificate: Add support for PKCS #11 backed certificates
 - !1665 Fix g_module_symbol() under Windows sometimes not succeeding
 - !1669 guri: Fix URI scope parsing
 - !1670 GSubprocessLauncher: Move cleanup to dispose()
 - !1671 gdatetime: Avoid integer overflow creating dates too far in the past
 - !1673 CI: Re-enable code coverage reporting for MSYS2 builds
 - !1674 Add version macros for 2.68
 - !1675 Make static assertions about standard types
 - !1677 gsubprocesslauncher: Allow to close FDs
 - !1678 gmessages: Document that using a custom log writer basically disables fatal handling
 - !1679 gmain: Fix minor typo in documentation
 - !1680 guri: Fix UTF-8 validation when escaping URI components
 - !1681 gspawn: Handle error opening /dev/null
 - !1686 Various improvements in GSocketClient
 - !1687 uri: add missing (not)nullable annotations
 - !1688 gspawn: Use close_range() if available to close FDs between fork/exec
 - !1691 gmain: Fix possible locking issue in source unref
 - !1692 gsignal: Plug g_signal_connect_object leak
 - !1695 gfile: Clarify refcount handling for g_file_replace_contents_bytes_async()
 - !1696 Fix various minor scan build warnings
 - !1706 Add various missing nullable annotations
 - !1712 Revert "Use C++11 decltype where possible"
 - !1714 gmacros: Use __typeof__ when compiling with Clang
 - !1718 gtrace: Add G_GNUC_PRINTF annotation

* Translation updates:
 - Chinese (Taiwan)
 - Danish
 - Greek, Modern (1453-)
 - Hebrew
 - Latvian
 - Portuguese
 - Russian
 - Slovak
 - Ukrainian


Overview of changes in GLib 2.66.0
==================================

* Bugs fixed:
 - #2200 missing tab in makefile rule
 - !1639 guri: Fix user passed to g_uri_split_with_user() not being NULL'd

* Translation updates:
 - Croatian
 - Hungarian
 - Italian
 - Serbian
 - Slovak
 - Swedish


Overview of changes in GLib 2.65.3
==================================

* Fixes to the new `statx()` calls — note that since GLib 2.65.2 uses `statx()`
  (if available) instead of `stat()`/`fstat()`/`lstat()`/`fstatat()`, syscall
  sandboxing for third party applications might need to be updated

* Bugs fixed:
 - #2189 g_file_query_info on ro file system: Numerical result out of range
 - #2191 Calling nice(20) can lead to thread related warnings
 - #2197 Segfaulting Integer Overflow in g_option_group_add_entries
 - !1025 Big o notations
 - !1626 gio: Document g_settings_new() missing schema behaviour
 - !1627 gthread: Add a sysprof mark for thread creation
 - !1628 Replace a bunch of fallthrough comments with an attribute
 - !1631 Fix splice behavior on cancellation
 - !1632 Fixing signedness warning in glib/gfileutils.c
 - !1635 gcancellable: Mark a variable as unused if built with G_DISABLE_ASSERT

* Translation updates:
 - Basque
 - Catalan
 - Chinese (China)
 - Czech
 - English (United Kingdom)
 - Friulian
 - German
 - Japanese
 - Kazakh
 - Korean
 - Lithuanian
 - Polish
 - Portuguese (Brazil)
 - Slovenian


Overview of changes in GLib 2.65.2
==================================

* Support `statx()` and `G_FILE_ATTRIBUTE_TIME_CREATED` (work by Andre Miranda) (#1970)

* Fix deadlock in `g_subprocess_communicate_async()` (work by Alexander Larsson) (#2182)

* Add `%f`/microsecond placeholder support to `g_date_time_format()` (work by Johan Bjäreholt) (!1605)

* Bugs fixed:
 - #5 g_new0 performance
 - #1970 Make G_FILE_ATTRIBUTE_TIME_CREATED support stx_btime
 - #2176 Inconsistent introspection annotations for g_input_stream_read and g_socket_receive
 - #2182 g_subprocess_communicate_async() can deadlock when writing
 - !1593 CI support for Coverity Scan
 - !1605 gdatetime: Add %f format specifier and microsecond precision to g_date_time_format_iso8601
 - !1613 gfile: Document TOCTTOU avoidance using g_file_delete()
 - !1615 docs: glib-compile-resources: json-stripblanks
 - !1616 gioerror: Map WSAENETRESET on Windows to G_IO_ERROR_CONNECTION_CLOSED
 - !1619 Minor Coverity fixes
 - !1620 gvariant: Ensure GVS.depth is initialised
 - !1622 gdatetime: Widen a variable before multiplication
 - !1623 gcancellable: Assert that make_pollfd() call succeeds
 - !1624 gdbusaddress: Drop an unnecessary NULL check
 - !1625 gdbusmessage: Drop redundant uint ≥ 0 checks

* Translation updates:
 - French
 - Galician
 - Greek, Modern (1453-)
 - Indonesian
 - Romanian
 - Spanish
 - Turkish
 - Ukrainian


Overview of changes in GLib 2.65.1
==================================

* Add `GUri` API for parsing, building and representing URIs according to
  [RFC 3986](https://tools.ietf.org/html/rfc3986) (work by Marc-André Lureau) (#110)

* Fix handling of xattr data with embedded nuls (#422)

* Add `g_file_set_contents_full()` which gives more control over fsyncs (#1302)

* Fix cross-compilation on iOS (work by Nirbheek Chauhan) (#1868)

* Add a `x-gvfs-notrash` option to disable trash on certain mounts (work by Ondrej Holy) (!1549)

* Support ‘slim’ TZif files generated with `zic -b slim` (work by Paul Eggert) (#2129)

* Support emitting profiling marks from `GMainContext` to sysprof capture files (!1551)

* Accept IPv6 zone IDs in `g_hostname_is_ip_address()` (work by Marc-André Lureau) (!1604)

* Bugs fixed:
 - #4 Include a UTF-8 safe escaping function
 - #110 Basic URI operations
 - #137 display_name should be always available
 - #250 GTestCase's setup/teardown functions appear pointless
 - #272 allow thread pools to adjust the number of threads to the number of cpu's/cores
 - #422 Wrong assumption in libgio GFileInfo on xattr/acl string: it may contain binary data.
 - #858 glib2 @2.40.0 issues a "Got weird mach timebase info" error (Macports, PPC)
 - #1022 g_object_new Should Mention That it Zeroes Out Private Struct
 - #1200 Make g_assert_null/nonnull clang static analyzer friendly
 - #1203 Add a variant of g_file_set_contents() which accepts file mode
 - #1288 gmacros: Introduce non-public G_CLANG_ANALYZER_NORETURN macro
 - #1302 g_file_set_contents() can fill target with NUL bytes if it did not previously exist
 - #1670 ThreadSanitizer data races
 - #1764 cancellable test: on_mock_operation_ready: assertion failed (iterations_requested > iterations_done): (10 > 10)
 - #1868 iOS cross compile impossible due to frexpl check not supporting cross compilation
 - #1869 iOS doesn't have Cocoa, which thankfully isn't a requirement of this code that supposedly requires it
 - #1982 GSocketAddressEnumerator documentation is inconsistent with existing usage
 - #2127 Spurious GIO module initialization on Fedora Silverblue (and other ostree-based systems?)
 - #2129 date_time bugs after 2038, or with today's date and 'zic -b slim' TZif files
 - #2132 Valgrind reports "still reachable" after g_thread_pool_new/free
 - #2136 Valgrind reports "still reachable" after g_option_context_parse
 - #2140 calling malloc in fork child is undefined-behaviour
 - #2141 g_value_copy is was recently broken
 - #2149 Make G_URI_FLAGS_PARSE_STRICT the default
 - #2156 Merge _g_uri_parse_authority() into GUri
 - #2159 Thread-unsafe initialization in gportalsupport.c
 - #2160 More guri regressions
 - #2165 More guri breakage
 - #2166 g_uri_build() functions should accept a NULL scheme
 - !1328 guri: new URI parsing and generating functions
 - !1527 Add g_tls_connection_get_channel_binding_data call and enums
 - !1534 Various GLocalFile fixes related to the filesystem::remote attribute
 - !1546 tree: Fix various ableist language
 - !1549 Add support to ignore trash for certain mounts
 - !1551 Add initial sysprof support
 - !1553 gtestutils: Mark that g_assert_whatever() macros do not normally return
 - !1554 GUri build fixes
 - !1555 Remove c-format from the string that is not c-formatted
 - !1556 fuzzing: Another fix for g_uri_parse() test
 - !1557 A few g_uri_parse_params() improvements
 - !1559 Fix buffer read overflows in GUri
 - !1561 gconvert: Use a pointer array in extract_uris
 - !1563 gdesktopappinfo: Fix unnecessarily copied and leaked URI list
 - !1564 tests: limit number of threads to something reasonable.
 - !1570 Reduce CI bandwidth requirements
 - !1572 Add GUriParamsIter
 - !1576 gtask: Only override g_task_set_source_tag() for GLib ≥ 2.60
 - !1577 uri: add illegal_characters argument to unescape_bytes
 - !1578 tests: Add tests for RFC 8536 v3 parsing of time zones
 - !1579 glib: Use g_getenv everywhere instead of getenv
 - !1582 appinfo: Add properties
 - !1583 gio: Remove broken support for XP
 - !1590 Use CI schedules and DAGs
 - !1591 gfileutils: Fix O_NOFOLLOW handling on BSD systems
 - !1594 GFile: Document that G_FILE_CREATE_REPLACE_DESTINATION can only be used with...
 - !1595 uri: add ENCODED_PATH & ENCODED_FRAGMENT flags
 - !1599 uri: do not add ipv6 brackets on non-ip host
 - !1600 uri: do not encode ':' and ';' from userinfo
 - !1601 timezone: Fix an uninitialized use
 - !1602 Revert "Merge branch 'appinfo-properties' into 'master'"
 - !1604 Make g_hostname_is_ip_address() accept ipv6 zoneid
 - !1609 Fix multiple typos in guri.c
 - !1611 guri: Always prepend `//` to the host when building a URI
 - !1612 guri: Document and check restrictions on path prefixes

* Translation updates:
 - Catalan
 - Kazakh
 - Lithuanian
 - Romanian
 - Slovenian
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.65.0
==================================

* Fix memory monitor tests to only be installed if installed-tests are enabled,
  and to be skipped if GObject-Introspection is too old (!1407)

* Stability improvements for various unit tests

* D-Bus credentials support on macOS (#507)

* MSVC support for the files generated by `glib-compile-resource` and `gdbus-codegen` (#1215, !1452)

* Year 2038 fixes involving new API in `GBookmarkFile` (#1931)

* SOCKS5 proxy authentication fixes (#1986, #1988)

* Support for more than `MAXIMUM_WAIT_OBJECTS` FDs for `g_poll()` on Windows (#2107)

* Add `g_assert_no_errno()` test macro for testing POSIX-style functions (!1204)

* Update Unicode Character Database to version 13.0.0 (!1422)

* Support storing interned strings in `GValue`s efficiently, via `g_value_set_interned_string()` (#2109)

* Bugs fixed:
 - #2 g_filename_from_utf8() should normalize?
 - #176 the behaviour of constructors for GLib data types is not specified if memory allocation fails
 - #480 /gdbus/connection/signals test intermittently fails: assertion failed (count_name_owner_changed == 2): (1 == 2)
 - #507 GDBus credentials don’t work on OS X
 - #602 GLib.Thread not usable from GObject-Introspection
 - #1154 Missing documentation how to set a value in a GArray
 - #1215 MSVC cannot build glib-compile-resource's output resource file
 - #1323 meson, autotools: figure out if mem barrier is needed for arm64 host variant aarch64
 - #1398 gdate: Add error handling for GetDateFormatW calls
 - #1841 Signal handler disconnection race when finalising GCancellableSource
 - #1851 Meson Build Failure on Windows: Undefined Reference to libiconv
 - #1911 Memory leak in g_param_spec_flags and/or g_param_spec_enum
 - #1931 GBookmarkFile API involves time_t
 - #1954 gdbus-server-auth intermittent failure
 - #1957 gdbus-connection test failure on FreeBSD
 - #1986 Socks5 Proxy: Authentication seems broken
 - #1988 Socks5 Proxy: Wrong error returned when using no authentication
 - #2038 Bindings: g_tls_connection_set_database() does not allow None as argument
 - #2051 GUnixOutputStream can block on close()
 - #2057 Call malloc_trim() under memory pressure
 - #2067 Glib uses _Static_assert in C++17 mode
 - #2081 gdbus error messages contains mixed up body and head signatures
 - #2082 AM/PM - specific variation support needed to Hebrew language
 - #2083 Memory monitor tests fail if dbusmock isn't installed
 - #2092 FreeBSD CI timing out in gdbus-connection filter test
 - #2094 Deprecation warnings when compiling with -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_28 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_28
 - #2106 Duplicated if - else if conditions in gtranslit.c
 - #2107 g_poll() implementation on Windows stall when more than MAXIMUM_WAIT_OBJECTS FDs have passed
 - #2109 GValue: Add support for interned string
 - #2124 g_file_info_get_content_type() may return NULL
 - #2132 Valgrind reports "still reachable" after g_thread_pool_new/free
 - #2134 Valgrind reports "still reachable" after `g_uuid_string_random()`.
 - #2135 Valgrind reports "still reachable" after g_key_file_new/free
 - #2136 Valgrind reports "still reachable" after g_option_context_parse
 - !1204 gtestutils: Add a new g_assert_no_errno() test macro
 - !1302 gobject: new g_param_is_valid_property_name() function.
 - !1329 Support nanoseconds in stat timestamps on Windows
 - !1341 MUI capabilities for GWin32RegistryKey
 - !1360 CI: Show execution environment before we start
 - !1395 tests: Move memory_monitor_tests under installed_tests_enabled
 - !1396 macros: Define G_GNUC_FALLTHROUGH for more compilers
 - !1397 tests: Skip MemoryMonitor test if GObject-Introspection is too old
 - !1398 gcontenttype: Fix crash in _get_generic_icon_name()
 - !1402 ci: Update Android Docker image for aarch64 CPU naming change
 - !1405 tests: Disable link-time warning for mem-overflow
 - !1406 Replace fallthrough comments with G_GNUC_FALLTHROUGH
 - !1408 tests: Don't compare strings by pointer
 - !1409 gdummytlsconnection: Add missing overrides for ALPN properties
 - !1413 gapplication: Fix a minor typo in the documentation
 - !1414 gstrutils: Set locale explicitly for search-utils test
 - !1415 meson: Don't use assert in test code
 - !1418 ginetaddress, ginetsocketaddress: Add missing (nullable) annotations
 - !1422 glib: Update Unicode Character Database to version 13.0.0
 - !1423 gobject: Clarify assertion failure on ref-after-finalize
 - !1424 docs: Fix configuration with gtk_doc=true and installed_tests=false
 - !1425 gdbusconnection: GDBusSignalCallback can have a NULL sender_name
 - !1426 gunidecomp: Update and reformat Unicode version support history
 - !1427 gicon: Clarify GVariant refcounting in docs
 - !1428 Add missing 'extern' to the dllexport version of GLIB_VAR/GOBJECT_VAR
 - !1429 Fix arch detection ifdefs in glib/valgrind.h
 - !1430 Use __builtin_trap() on Clang on any platform
 - !1431 glib-unix.c: fix heap corruption in g_unix_get_passwd_entry
 - !1432 docs: Mention new gio tool options
 - !1433 meson: Fix buildtype usage
 - !1434 gdbusconnection: Clarify nullability of SignalInstance.sender
 - !1436 glib: Update internal copy of valgrind.h from Valgrind 3.15 release
 - !1437 gmarkup tests: tab character escape/unescape
 - !1439 Don't misdetect stpcpy on windows platforms on clang
 - !1440 Silence clang errors about -Wformat-nonliteral due to missing intermediate attributes
 - !1441 Meson: Override every dependency glib provides
 - !1442 gfile: Fallback to fast-content-type if content-type is not set
 - !1443 gio: use TAPTestRunner in the memory monitor tests
 - !1444 Meson: Add glib-checks and glib-asserts options
 - !1452 Make symbols generated by gdbus-codegen exportable on Visual Studio-style builds
 - !1455 gdesktopappinfo: Note that search results are not filtered
 - !1456 GCredentials documentation fixes
 - !1458 meson: Exclude gosxutils.m when building for iOS
 - !1459 meson: Fix the gnulib checks for isnan* functions
 - !1460 glib: Sync the local modification to glib/valgrind.h to what was upstreamed
 - !1462 gvariant-core: Add a note about memory safety of children
 - !1463 gdesktopappinfo: Add several nullable annotation to GAppInfo getters
 - !1464 Update Fedora CI
 - !1466 CI: Switch to new Windows runners
 - !1469 goption: Treat an empty option context parameter string as NULL
 - !1475 Improve documentation of g_tls_database_verify_chain()
 - !1476 tests: Fix remaining race in gdbus-connection filter test
 - !1479 Improve documentation of client connection validation flags
 - !1480 CI: Make sure we use meson 0.49.2 in MSYS2
 - !1481 array: fix corrupt state of GPtrArray after g_ptr_array_extend_and_steal()
 - !1482 [th/g-ptr-array-variable-cleanups] minor cleanup of variables for GPtrArray
 - !1487 glib: annotate static inline functions with G_AVAILABLE-type macros
 - !1488 Rebuild Fedora CI image
 - !1491 gdatetime: update annotations
 - !1492 glib-mkenums: allow optional 'since' tag
 - !1493 meson: Remove stray ] in O_DIRECTORY check
 - !1496 Fix GLIB_UNAVAILABLE_STATIC_INLINE declaration
 - !1498 array: add internal ptr_array_new() helper for creating GPtrArray
 - !1503 docs: Add indexes for symbols added in 2.66
 - !1505 gobject: Handle runtime checks as such
 - !1506 tests: Speed up the cancellable test
 - !1508 tests: Speed up the file test and make it more reliable
 - !1512 Various fixes when building for iOS
 - !1513 Initialize the visited time of a new GBookmarkFile
 - !1515 meson: check for stpcpy using cc.links()
 - !1516 gthreadedsocketservice: Mark source_object of run signal as nullable
 - !1517 GWin32RegistryKey: Move assertions
 - !1518 strfuncs: Use a GPtrArray in strsplit()
 - !1522 meson: Fix gnulib printf checks
 - !1524 meson: Fix gnulib build where isnan*() is needed
 - !1525 Normalize C source files to end with exactly one newline
 - !1528 gtlsconnection: Improve documentation of peer-certificate[-errors]
 - !1530 tree: Fix various typos and outdated terminology
 - !1531 gvariant: Fix documentation for g_variant_get_string() to match reality
 - !1532 win32: spelling fix
 - !1535 glib.supp improvements

* Translation updates:
 - Bokmål, Norwegian
 - Catalan
 - Catalan (Valencia)
 - Chinese (Taiwan)
 - Dutch
 - French
 - Galician
 - German
 - Hebrew
 - Indonesian
 - Italian
 - Japanese
 - Latvian
 - Lithuanian
 - Malay
 - Romanian
 - Serbian
 - Slovak
 - Slovenian
 - Spanish
 - Turkish
 - Ukrainian


Overview of changes in GLib 2.64.0
==================================

* Use `posix_spawn()` to speed up launching test D-Bus instances (!1388)

* Bugs fixed:
 - #1783 Document using glib-mkenums with meson
 - #2049 Crash in g_array_copy
 - !1384 Some minor clang warning fixes
 - !1386 docs: Document generated headers caveats for genmarshal
 - !1387 ci: Correctly propagate exit status in run-style-check-diff.sh
 - !1388 gtestdbus: Use posix_spawn() to spawn dbus-daemon
 - !1389 Update GError docs to use G_DEFINE_QUARK

* Translation updates:
 - Czech
 - Danish


Overview of changes in GLib 2.63.6
==================================

* Fix potential relative read when calling g_printerr(), which could lead to a
  denial of service from a setuid-root process being used to block access to the
  TTY for another user (#1919)

* Fix SOCKS proxy resolver sometimes not being used when resolving addresses
  via Happy Eyeballs (CVE-2020-6750) (#1989)

* Several other Happy Eyeballs fixes for address resolution (#1871, #1872, #1902)

* Various race fixes in `GDBusConnection` and its unit tests (#1515)

* Fix a race condition with D-Bus name ownership (#1517)

* Drop `gio-launch-desktop` helper application in favour of calling `sh` directly (#1633)

* Fix win32 exception handling with C# exceptions (#2025)

* Fix thread safety of `GUnixMountMonitor` (#2030)

* Additional fixes to new thread pool attribute behaviour from GLib 2.63.4 to
  check if sched_setattr() is allowed by system policies before depending on it (#2039, !1356)

* Fix memory leaks and corruption when freeing `GSource`s while freeing a `GMainContext` (!1353)

* Drop inappropriate installation of object manager example documentation (!1359)

* Bugs fixed:
 - #938 gdbus call -a doesn't support message bus connections
 - #1515 gio/gdbus-threading test sometimes fails in CI
 - #1517 g_bus_own_name does not always call name_lost_handler when _REPLACE and _ALLOW_REPLACEMENT are set
 - #1633 should not install gio-launch-desktop into PATH
 - #1919 read from relative path in g_printerr() in 2.58.3
 - #1995 Tracker issue for Happy Eyeballs regressions
 - #2002 g_io_channel_read_line does not honour the line_term symbols set
 - #2025 W32 exception handling misbehaves when C# exceptions are thrown when running inside the Visual Studio debugger
 - #2030 Random nautilus test suite failures involving GUnixMountMonitor
 - #2039 sched_setattr() still can cause EPERM through natural causes
 - #2043 Low memory monitor test failed in CI
 - #2044 GApplication docs suggest invalid GVariant type
 - !1185 gtimezone: Tidy up UTC timezone creation
 - !1281 ci: Update Docker packages
 - !1283 gmodule: change _g_module_close to only take a handle.
 - !1298 tests: Speed up the GIO actions test
 - !1299 gapplication: Fix a minor typo in the documentation
 - !1339 gsocketclient: Refactor g_socket_client_connect_async()
 - !1353 GMainContext - Fix memory leaks and memory corruption when freeing sources while freeing a context
 - !1354 GThreadPool - Add test for !1340
 - !1355 glist: Add docs examples of how to combine with g_steal_pointer()
 - !1356 GThread - Check if sched_setattr is allowed by the system policies before depending on it
 - !1359 docs: Don’t install object manager example separately
 - !1363 Make tests pass if we are euid != 0 with capabilities
 - !1366 Fix oss-fuzz coverage link
 - !1372 gobject: Fix strict aliasing warnings with g_set_object()
 - !1376 gitlab-ci: 64-bit ARM is aarch64, not arm64
 - !1381 ghash: Document the iteration order over a hash table is not defined
 - !1382 tests: Bump the refcount timeout in gdbus-threading
 - !1383 ci: Enable parallelisation when running installed tests

* Translation updates:
 - Basque
 - English (United Kingdom)
 - French
 - Galician
 - German
 - Greek, Modern (1453-)
 - Hungarian
 - Indonesian
 - Japanese
 - Korean
 - Lithuanian
 - Polish
 - Portuguese (Brazil)
 - Spanish
 - Swedish
 - Turkish


Overview of changes in GLib 2.63.5
==================================

* Fix behaviour of `g_file_move()` fallback code to not follow symlinks (#986)

* Rename `--glib-min-version` argument of `gdbus-codegen` to `--glib-min-required`
  (this is not an API break as `--glib-min-version` was added earlier in the
  2.63 cycle) (#1993)

* Add gtk-doc checks to CI and fix a number of documentation issues
  (thanks to Xavier Claessens) (!978)

* Add `G_SIZEOF_MEMBER()` macro (!1333)

* Add a debug message if `g_setenv()` or `g_unsetenv()` are used after any
  threads have been spawned — this will be upgraded to a warning in future (!1337, #715)

* Skip memory monitor tests if xdg-desktop-portal or dbusmock are not available (!1296, !1338)

* Change the `libmount` configure option from a boolean to a Meson `feature` (!1344)

* Do not return `target-uri` from `g_file_peek_path()` when called on trash/recent files (!1346)

* Drop new TLS certificate API for PKCS #11 backed certificates, as the implementation
  is not ready yet (this is not an API break as the API was added earlier in the
  2.63 cycle) (!1347)

* Bugs fixed:
 - #986 g_file_move: remove G_FILE_COPY_NOFOLLOW_SYMLINKS section
 - #1551 CI: Add checks for `TODO` in MRs
 - #1925 Large number of routes installed into kernel cause high cpu usage
 - #1993 Rename gdbus-codegen --glib-min-version argument to --glib-min-required and add --glib-max-allowed
 - #2012 spawn_thread_queue not initialised in GThreadPool
 - #2020 g_network_monitor_base_add_network() improperly unrefs GInetAddressMask
 - !978 Various fixes to make gtkdoc-check pass on glib
 - !1018 docs: tag enclose 'all' and 'help' values
 - !1170 Avoid C++20 deprecated assignment to volatile
 - !1296 tests: Skip GMemoryMonitor tests if the dbusmock template is not available
 - !1307 Remove global declaration of GMemoryMonitor
 - !1322 gmain: Mark G_SOURCE_FUNC as available in 2.58
 - !1333 Add and use G_SIZEOF_MEMBER() macro
 - !1337 genviron: Message if g_setenv()/g_unsetenv() are used after threads spawned
 - !1338 tests: Skip GMemoryMonitor tests if xdg-desktop-portal is not available
 - !1344 meson: libmount autodectection
 - !1345 gio-tool-info: Print unix mount information where available
 - !1346 gfile: Do not return target-uri from g_file_peek_path()
 - !1347 Revert "gtlscertificate: Add support for PKCS #11 backed certificates"
 - !1348 ghash: Clarify that g_hash_table_add() always consumes the key
 - !1349 doc: Clarify that _locker_new() does not actually allocate memory
 - !1351 glib.supp: update g-threaded-resolver-getaddrinfo-config

* Translation updates:
 - Japanese
 - Lithuanian
 - Malay
 - Portuguese (Brazil)
 - Swedish


Overview of changes in GLib 2.63.4
==================================

* Fix various race conditions on signal emission in GDBus (#604, #978, #1232)

* Change thread pools so that thread attributes (in particular, priority) are
  inherited from the thread which created the `GThreadPool` initially, rather
  than from the thread which is pushing a new job into the pool (#1834, #2007)

* Expand support for running Windows apps with
  `g_app_info_launch_default_for_uri()` using rundll32 on Windows (#1932)

* Support multiple directories in `GSETTINGS_SCHEMA_DIR` environment variable (#1998)

* Support full Julian day range in `TZ` environment variable (#1999)

* Apply recursion depth limits to variants in D-Bus messages (!1201)

* Support adding call flags and timeouts to method calls generated by
  `gdbus-codegen` through the new `--glib-min-version` option (!1286)

* Fully deprecate TLS rehandshakes; they are now ignored due to TLS protocol
  changes (!1305)

* Bugs fixed:
 - #198 g_fopen and friends: should also state how to close a stream
 - #604 GDBus name watching dispatch is buggy/excessively-complicated
 - #833 g_object_set: document the need to cast varargs
 - #978 SIGSEGV in on_name_lost_or_acquired
 - #1232 Insufficient thread safety around GDBusObjectManagerClient
 - #1416 Re-add macOS CI
 - #1834 Unwanted priority/etc inheritance with GThreadPool and GThread and the POSIX implementation
 - #1932 Windows: Gio.AppInfo.launch_default_for_uri seems not to work for local files/folders
 - #1983 glib:gio / dbus-appinfo test fails: GLib-GIO:ERROR:../../../../Projects/glib/gio/tests/dbus-appinfo.c:326:on_flatpak_open: 'g_file_equal (files[0], f)' should be TRUE
 - #1997 Base64 encoding with "break_lines" claims to wrap at 72 characters but seems to wrap at 76
 - #1998 support multiple directories in GSETTINGS_SCHEMA_DIR
 - #1999 GTimeZone fails to accept full Julian day range when parsing the direct $TZ string format
 - #2007 Thread scheduler attributes fail under valgrind
 - !388 ci: Avoid downloading subprojects for each job
 - !1111 gio: test that launch_uris() exports files with the document portal when launching a flatpak
 - !1201 gdbusmessage: Limit recursion of variants in D-Bus messages
 - !1279 tests: Fix an error message set by foo_set_property()
 - !1286 gdbus-codegen: Add a GDBusCallFlags arg to method calls
 - !1291 gio-tool-list: Add an option to print display names
 - !1294 GMemoryMonitor docs fixes
 - !1295 gio: Fix socket test
 - !1301 GThread - Inherit parent thread priority by default for new Win32 threads
 - !1303 gvariant-core: Don't pass NULL second argument to memcpy
 - !1305 Fully deprecate TLS rehandshakes
 - !1308 gsocketclient: run timeout source on the task's main context
 - !1309 Fix crash in gutils when application is prevented access to passwd file
 - !1317 gfdonotificationbackend: remove notifications when bus name vanishes
 - !1320 subprojects: Temporarily avoid using wrapdb while it’s down
 - !1324 ci: Add some documentation to the style check CI test
 - !1325 Check for SYS_sched_getattr before using it unconditionally
 - !1330 W32: Correctly set st_ino when doing private stat()
 - !1334 gthread: Ensure GThreadSchedulerSettings is always defined

* Translation updates:
 - Catalan
 - Galician
 - Hungarian
 - Indonesian
 - Polish
 - Portuguese (Brazil)
 - Spanish


Overview of changes in GLib 2.63.3
==================================

* Add a `--glib-min-version` argument to `gdbus-codegen` which controls breaks in the API of generated code (#1726)

* Add `g_clear_list()` API to clear `GList`s to `NULL` (#1943)

* Add a `GMemoryMonitor` API to be notified of memory pressure situations using the low-memory-monitor project (!1005)

* Add support for dispose functions for `GSource` implementations (!1175)

* Tighten up validation of GObject signal and property names, allowing performance improvements (!1224)

* Fix installation path of GIO modules on MSVC to be the bindir (!1254)

* Bugs fixed:
 - #650 g_signal_lookup gives too many warnings
 - #1011 GListStore, easily find if the item is already inserted
 - #1130 gdbus-codegen: Add an option to strictly generate markdown in source comments
 - #1687 glocalvfs.c uses non-thread-safe getpwnam()
 - #1726 Warn when method/signal uses type 'h' but lacks GDBus.C.UnixFD annotation
 - #1935 Assert in _kqsub_free seems to be too strict
 - #1943 Consider g_clear_list()
 - #1947 Documentation clarification for g_uuid_string_random()
 - #1953 Documentation for g_type_init() and others missing from online gtk-doc documentation
 - #1961 A typo in the comment of `g_settings_schema_get_path`: threfore -> therefore
 - !1005 gio: Add GMemoryMonitor to monitor for low-memory
 - !1172 gptrarray: Add an example to the g_ptr_array_steal() docs
 - !1175 Implement a dispose function for GSource
 - !1223 Add additional valgrind suppressions
 - !1224 Signal name handling improvements
 - !1230 ci: Run installed-tests on Fedora
 - !1235 Add sudo to Fedora docker image
 - !1239 tests: Run "timeout tests" sequentially
 - !1248 ci: Update all Debian CI runners to use v5 of the Dockerfile
 - !1249 gio-tool-mount: Allow mounting by the given UUID
 - !1252 ci: Fix running all jobs on merge requests
 - !1253 gthread: Fix "zero as null pointer" warning
 - !1254 giomodule: gio modules are no longer installed in bindir on MSVC
 - !1255 ci: Build Docker images rather than OCI images if using podman
 - !1256 gdate: Add autoptr support
 - !1258 Minor CI fixups
 - !1261 gtk-doc: Ensure we have recent enough version
 - !1262 tests: Add tests for the gdbus-codegen executable
 - !1265 build: don't check for protected visibility
 - !1267 Revert "doc: Workaround gtkdoc-scan bug leading to undocumented symbols"
 - !1268 ci: Work-around successful installed tests having no logs
 - !1269 gvariant: Add guard to g_variant_get()
 - !1271 tests: Enable GDBus debug for a number of unreliable tests
 - !1274 trash portal: Don't follow symlinks
 - !1275 Small doc correction
 - !1277 Various gtk-doc improvements
 - !1278 Update installed tests CI
 - !1280 clang-format-diff: Output diff for multiple files, not just one
 - !1282 Revert "Revert "docs: remove GDBusObjectManager example""
 - !1284 Update POTFILES.in 191212
 - !1287 atomic/tests: test g_atomic_pointer_compare_and_exchange() with const pointers
 - !1289 gtype: Define auto-cleanup functions for Module class

* Translation updates:
 - Spanish


Overview of changes in GLib 2.63.2
==================================

* Use `lldb` rather than `gdb` on macOS for debugging (#1004)

* Switch the atomic builtins from `__sync_fetch_*()` to the slightly more modern
  `__atomic_*()` (#1750)

* Fix calculation of `gsize` width on various platforms (including OpenBSD) (#1777)

* Fix undefined behaviour causing brokenness in `g_utf8_find_prev_char()` when
  compiling with GCC ≥ 8 (#1917)

* Revert UNIX mode changes in `G_FILE_ATTRIBUTE_ID_UNIX_MODE` which broke OSTree (#1934)

* Slightly improve performance for signal emissions when no handlers are connected (!1083)

* Add `g_task_return_value()` and `g_task_propagate_value()` APIs to allow
  `GTask` to be used from language bindings more easily (!1216)

* Fix a file monitoring crash on kqueue-based systems (BSD) (!1221)

* Bugs fixed:
 - #1004 [PATCH] Make gbacktrace use lldb on Mac OS X
 - #1552 CI: Add code style checks
 - #1750 Switch from  __sync_fetch_*() to __atomic_*() in glib/gatomic.h
 - #1777 gsize: improper typedef on (at least) OpenBSD
 - #1895 Regression: glib does not compile on centos 6: "objcopy: unrecognized option '--add-symbol'"
 - #1917 Test utf8-pointer fails with static build, LTO, optimisations, and new GCC
 - #1930 glib/tests/bookmarkfile.c:385:test_modify: assertion failed: (stamp == now)
 - #1934 ostree tests broken since bfdc5fc4fc84ef8518d2d1a328c8482cf5a38e98: File '/tmp/test-tmp-libostree_test-basic-user.sh.test-QB4SA0/diff-test2' is not empty
 - #1938 GDateTime doesn't support leap seconds
 - #1940 atomics test fails on FreeBSD CI since !1123
 - !1039 Improve documentation for footgun function g_tls_client_connection_copy_session_state()
 - !1083 Use the GObject hole on 64bit arches for some flags to improve performance
 - !1202 CI updates after !1177
 - !1208 gutils: Slightly improve docs formatting for g_get_os_info()
 - !1209 Make ld executable configurable
 - !1210 gdbus-server-auth test: Include gcredentialsprivate.h
 - !1213 gsocket: Improve diagnostics on bind() failure
 - !1214 gvariant, gbytes: Avoid memcmp (NULL, ., 0) or memcmp (., NULL, 0)
 - !1216 Make GTask more binding-friendly
 - !1218 gdb: Fix GHashTable pretty printer off-by-one error
 - !1220 gparam: fix memory leak in g_param_value_defaults()
 - !1221 Add NOTE_REVOKE to the list of the monitoring events
 - !1225 gtlsconnection: clarify handshake() documentation
 - !1227 Deprecate old GTlsConnection functionality even harder!
 - !1231 Fix build on old libc that does not define _SC_HOST_NAME_MAX
 - !1238 gstrfuncs: use gsize type internally for strv functions
 - !1242 gfileinfo: Clarify the documentation for G_FILE_ATTRIBUTE_UNIX_MODE
 - !1243 docs: Fix "occurred" typos in API documentation

* Translation updates:
 - Spanish


Overview of changes in GLib 2.63.1
==================================

* Several usability improvements to command line `gio` tool (!1153)

* Add `g_array_steal()`, `g_ptr_array_steal()` and `g_byte_array_steal()` APIs (#285)

* Add `g_get_os_info()` API (!1063, !1160)

* Add `g_warning_once()` API (!1028)

* Always resolve `localhost` to loopback address in `GResolver` (!616)

* Add `GMainContextPusher` API (!983)

* Limit recursion in `g_variant_parse()` (!1173)

* Fix crash in `g_spawn()` with high FD numbers due to use of `select()` rather
  than `poll()` (#954)

* Allow passing empty `GValue`s to `g_param_value_set_default()` (!1186)

* Escape header guards generated by `gdbus-codegen` better (#1379)

* Bugs fixed:
 - #285 [PATCH] add array steal and memdup functions
 - #954 The g_spawn_sync() function uses select() which has limitations
 - #1318 rare failure in gdbus-peer test: invalid uninstantiatable type '(null)' in cast to 'GDBusServer'
 - #1379 gdbus-codegen generates invalid header guards when build directory contains a + character
 - #1622 NULL pointer derefs on g_vasprintf() failure
 - #1813 g_option_context_add_main_entries() is missing array annotation for entries parameter
 - #1831 No reply on private socket due to auth problem
 - #1836 gobject.c uses undefined annotation “(not optional)”
 - #1858 docs/reference/gobject/tut_gobject.xml: object properties example uses deprecated API
 - #1877 g_cancellable_source_new annotated with 'skip'
 - #1896 Use after free when calling g_dbus_connection_flush_sync() in a dedicated thread
 - #1897 glib 2.62.0 fails test 'test_writev_no_vectors' wih gcc7
 - #1903 use-after-free in mimeapps test causes intermittent segfault during testing
 - #1906 test_os_info fails on FreeBSD
 - #1916 objcopy not used from cross-compilation file in GIO tests
 - #1923 Recent Versions of GLib Break Dolphin File-Manager's Thumbnailing when Using 'gtk2' Style
 - !616 Always resolve localhost to loopback address
 - !983 gmain: Add GMainContextPusher convenience API
 - !1014 tests: Add a test for g_assert_finalize_object()
 - !1028 gmessages: Add g_warning_once()
 - !1035 Switching from C gnu89 to C gnu99 standard
 - !1063 gutils: Add g_get_os_info()
 - !1082 gdatetime: Document RFC 3339 extensions when parsing ISO 8601
 - !1105 syscall flood on every time*() function call
 - !1120 Update documentation with FreeBSD build instructions
 - !1135 gmain: use atomic operation instead of GMutex to access g_main_context_default()
 - !1146 Solaris build fixes
 - !1147 gmodule: fix typo in doc comment
 - !1148 gio/gfileinfo: fix parameter references
 - !1149 gio/gfile: fix parameter reference for value_p
 - !1150 gio/gfile: fix parameter references to @contents
 - !1151 gio/gfile: fix typo in doc comment
 - !1152 gwinhttpvfs: Handle g_get_prgname() returning NULL
 - !1153 Several gio-tool bash completion fixes and improvements
 - !1155 Strict-aliasing fixes to new atomic built-ins
 - !1157 Fix various compiler warnings on Android
 - !1160 Add Windows support to g_get_os_info()
 - !1161 hash: Remove an assertion from the hot path
 - !1163 gcharset: Expand the documentation for g_get_locale_variants()
 - !1165 Use uname as a fallback to get OS info
 - !1167 Fix some minor leaks in testfilemonitor
 - !1168 Fix gdatetime tests on toolbox
 - !1171 Revert "gdbus-codegen: emit GUnixFDLists if an arg has type 'h'"
 - !1173 gvariant: Limit recursion in g_variant_parse()
 - !1177 ci: Add libdbus development files to CI Docker images
 - !1179 Improve GPtrArray doc-comments
 - !1180 array: Avoid use of memcpy(dest, NULL, 0)
 - !1181 gmain: Clarify thread safety of some common GSource functions
 - !1182 gio: Fix typo in URL
 - !1186 Allow using an empty GValue with g_param_value_set_default()
 - !1189 gparamspecs: Fix type class leaks on error handling paths
 - !1197 Fix GDBus test failures on non-Linux (in particular FreeBSD)
 - !1200 Minor fixes from a scan-build run

* Translation updates:
 - Catalan
 - Chinese (Taiwan)
 - Spanish


Overview of changes in GLib 2.63.0
==================================

* Add g_fsync() API (#35)

* Fix regression in g_file_copy() when passing
  `G_FILE_COPY_TARGET_DEFAULT_PERMS` flag; the destination permissions would be
  private rather than following the process’ umask (!1142)

* Several `GDateTime` parsing fixes (!1127)

* Always build the tests if installed-tests are enabled, so that the tests can
  actually be installed (!1141)

* Rework atomic function implementations to use memory barrier in the correct
  place (when compiler intrinsics aren’t providing the atomics), and fix
  signedness issues (#1449, #1565)

* Use the OS’ `fdwalk()` function (if safe) to speed up `g_spawn_*()` on BSD (#1638)

* Remove the macOS `dyld` `GModule` implementation in favour of `dl` instead (!1093)

* Bump Python requirement to ≥ 3.5, which we implicitly relied on anyway through
  our Meson dependency (!1132)

* Bugs fixed:
 - #35 add g_fsync to API
 - #174 g_file_copy always preserves  permissions, even if G_FILE_COPY_ALL_METADATA flag is not set
 - #259 docs: fix a misunderstanding in g_type_add_interface_*
 - #767 g_signal_lookup fails if class is not referenced
 - #1052 g_io_write_chars calls abort when given a null byte as input
 - #1449 glib fallback atomic int/ptr get/set have memory barrier in wrong place
 - #1565 Signedness of atomic operations
 - #1638 g_spawn_*() is extremely slow under certain circumstances
 - #1809 Provide API for working with PKCS11 backed certificates
 - #1843 TSAN false positive with g_atomic_pointer_get/g_atomic_pointer_set under Clang
 - #1865 g_variant_get_data_as_bytes fails after serializing a variant
 - #1875 Segfault and Overflow in __gio_xdg_cache_mime_type_subclass() with Wps-Office installed
 - #1887 glib 2.62.0 breaks loading dylibs as modules
 - #1888 2.62: docs build on Windows broken
 - #1897 glib 2.62.0 fails test 'test_writev_no_vectors' wih gcc7
 - !1020 docs: Remove priv pointers from the tutorial example
 - !1062 gtype: mark the inline functions in G_DECLARE_*_TYPE() as UNUSED
 - !1080 tests: Fix skipping mkdir-with-parents-permission test
 - !1088 Various small scan-build fixes
 - !1090 giochannel: Clarify type of GSource callback in documentation
 - !1093 gmodule: remove macOS dyld implementation
 - !1095 Define G_IOV_MAX to 512 on macOS/iOS
 - !1099 gmem: clarify that g_malloc always uses the system allocator
 - !1109 doc: fix typo in gio/gsettings.c
 - !1110 gio: Add missing "gio remove" option to bash completion script
 - !1112 Add version macros for GLib 2.64
 - !1115 gdatetime: Fix error handling in g_date_time_new_ordinal()
 - !1116 gmarkup: Add a limit on the number of attributes in an element
 - !1119 Annotate the return value of various utility functions
 - !1124 docs: Fix typo in GConverter{Input,Output}Stream section titles
 - !1125 gdatetime: Fix error handling in g_date_time_new_week()
 - !1126 fileinfo: Mention that usec mtimes are set
 - !1129 gdate: Fix tautological comparison warnings on Android
 - !1130 Improve GLIB_DEPRECATED_MACRO_FOR output
 - !1131 gio/gfileinfo: fix param reference in doc comment
 - !1132 build: Bump Python requirement to ≥ 3.5
 - !1137 gregistrysettings: bump key name length to 2048
 - !1138 Always build tests if we enabled installed-tests
 - !1139 g_file_info_get_modification_date_time: Calculate in integer domain

* Translation updates:
 - Danish
 - Italian
 - Panjabi
 - Serbian
 - Turkish


Overview of changes in GLib 2.62.0
==================================

* Fix new `GFileInfo` APIs to work when `G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC`
  was not queried (!1087)

* Bugs fixed:
 - #487 Add valgrind test runs to CI
 - !1084 garray: Fix reference to GLIB_SIZEOF_INT
 - !1086 glib.supp: make gobject_init() calloc also of the possible kind
 - !1087 fileinfo: ignore USEC if not available

* Translation updates:
 - Friulian
 - Portuguese (Brazil)


Overview of changes in GLib 2.61.3
==================================

* Support setting thread name on BSD systems (#1761)

* Install previously-uninstalled headers for public `GNativeSocketAddress`
  object (#1854)

* Very initial support for Windows apps (UWP) (!1057)

* Add various new valgrind suppressions to `glib.supp` (#1879, !1075)

* Bugs fixed:
 - #83 Optimisation for g_nearest_pow() in garray.c
 - #512 GSignal: accumulator function not called to accumulate G_SIGNAL_RUN_CLEANUP object handler return values
 - #873 allow NULL arguments to parse_strv
 - #905 Patches from static analysis run on 2.40
 - #1057 goption: add sanity check to input parameters
 - #1309 GSettings object stops emitting "changed" signal on g_settings_reset after call to g_settings_delay
 - #1620 GDBus criticals from GVfs with GLib master
 - #1761 Setting thread-name on BSD systems
 - #1803 GDK_SCALE=X is not respected when using "gio open"
 - #1819 Invalid characters in Open Location dialog crashes GIMP
 - #1852 Regression: g_mkdir_with_parents() returns 0 on failure
 - #1854 glib/gio: GNativeSocketAddress headers not installed.
 - #1860 g_clear_handle_id does not trigger GLIB_VERSION_MAX_ALLOWED warning
 - #1863 Potential invalid writes on g_utf8_strreverse
 - #1867 A couple of en_GBisms
 - #1870 GSettingsBackend watches not thread-safe
 - #1879 Incomplete valgrind suppressions - 16 KiB leak reported by valgrind from loading libglib-2.0.so
 - #1880 glib/gbacktrace.c: If dup2 happened to return -1, don't call dup2 with same value
 - #1881 GIO_USE_VOLUME_MONITOR and GIO_USE_FILE_MONITOR do not work as documented
 - !1002 Remove mentions of mailing lists from the documentation
 - !1011 gapplication: Fix a leaking GRemoteActionGroup member
 - !1015 Post-release version bump
 - !1016 gnetworkmonitornm fixups
 - !1017 Improve ISO 8601 parsing by GDateTime
 - !1023 g_object_get_property: Improve documentation for use of G_VALUE_INIT
 - !1026 gutf8: Assert that written memory stays in bounds
 - !1027 gfileutils: Fix error propagation for other than ENOENT
 - !1031 meson: build gnulib if printf isn't good enough
 - !1032 meson: small printf check cleanups
 - !1033 win32: don't assume the format specifier for the stdlib printf/scanf like functions
 - !1034 glib/tests/fileutils: Add a reproducer for #1852
 - !1036 cond test: Don't make assumptions about struct sigaction member order
 - !1037 Meson: Override glib-compile-resources/schemas
 - !1044 Relax use of g_test_bug() to not require g_test_bug_base() to be called first
 - !1049 minor typos in the documentation
 - !1050 tests: Fix a pragma warning on FreeBSD
 - !1054 gerror: Add a docs paragraph about not displaying errors verbatim in UI
 - !1057 Some (probably) easy uwp patches
 - !1059 Update win32 readme, add myself to codeowners
 - !1066 libffi.wrap: Meson port has moved to FDO gitlab
 - !1068 gsubprocesslauncher.c: fix documentation
 - !1071 meson: Move libdl_dep to the top level
 - !1074 Adjust README formatting
 - !1075 glib.supp: add suppression for g_type_class_ref()

* Translation updates:
 - Basque
 - Catalan
 - Czech
 - English (United Kingdom)
 - French
 - Galician
 - German
 - Hungarian
 - Indonesian
 - Korean
 - Lithuanian
 - Polish
 - Romanian
 - Spanish
 - Swedish


Overview of changes in GLib 2.61.2
==================================

* Add various new array functions (#236, #269, #373)
 - `g_array_copy()`
 - `g_ptr_array_copy()`
 - `g_ptr_array_extend()`
 - `g_ptr_array_extend_and_steal()`
 - `g_array_binary_search()`

* Add `g_assert_finalize_object()` helper function for writing tests (#488)

* Rework how D-Bus connections are closed/unreffed when `g_test_dbus_down()` is
  called. Tests which leak a `GDBusConnection` may now time out and abort,
  rather than silently leaking. (#787)

* Add a deprecation macro for GLib macros, and use it; third-party uses of
  long-deprecated GLib macros may now start causing warnings. (#1060)

* Deprecate `GTime` and `GTimeVal`, and various functions which use them.
  Use `GDateTime` and `guint64` UNIX timestamps instead. (#1438)

* Stop using `G_DISABLE_DEPRECATED` to allow disabling deprecation warnings;
  third-party code should now be using
  `GLIB_VERSION_{MIN_REQUIRED, MAX_ALLOWED}` to control symbol usage (!871)

* Improve support for running `ninja test` when GLib is built statically (#1648)

* Improve `GNetworkMonitor` detection of offline states (#1788)

* Fix build failure on macOS related to missing `_g_content_type_get_mime_dirs`
  function (#1791)

* Add various installed utilities’ paths to `gio-2.0.pc` (#1796)

* Fix keyfile `GSettings` backend and portal (especially relevant to any version
  of GLib included in a flatpak runtime) (#1822, !985)

* More IPv6 ‘Happy Eyeballs’ fixes in `GNetworkAddress` (!865)

* Fix CVE-2019-12450, wide permissions of files when copying using GIO (!876)

* Bump the Meson dependency from 0.48.0 to 0.49.2; we won’t depend on anything
  higher than this for a while, as Debian 10 ships 0.49 (!924)

* Various test fixes for Windows (!930, !931)

* Initial support for Universal Windows Platform (UWP): certification, and use
  of packaged libraries (!951)

* Add experimental clang-cl support on Windows, allowing `g_autoptr()` support
  on Windows (!979)

* Bugs fixed:
 - #77 G_STDIO_NO_WRAP_ON_UNIX wraps
 - #236 Add a function to copy an array
 - #269 Additional convenience functions for g_ptr_array
 - #373 GArray could use a binary search function
 - #436 running tests leaves lots of coredumps
 - #453 find-enclosing-mount docs confusing
 - #488 Add g_object_assert_last_unref() helper macro to detect object leaks in tests
 - #590 A reader lock can be obtained even if a writer is already waiting for a lock
 - #638 g_atexit is defined when not declared
 - #737 Initialize GValue in g_object_get_property()
 - #787 gtestdbus: Properly close server connections
 - #804 gdbusproxy prefixes unstripped error
 - #870 Fix and enhance GDatetime for Windows
 - #872 ucs4 functions have wrong return transfer
 - #887 gdusmessage.c mishandles bounds of GDBusMessageType and related enums
 - #894 gvalue: Avoid expensive checks where possible
 - #940 Docs for g_socket_listener_set_backlog are not very helpful
 - #943 G_DEFINE_TYPE_WITH_PRIVATE docs not helpful
 - #1018 Allow guid key in dbus addresses
 - #1060 Add deprecation macro for macros
 - #1169 Tools can display gibberish messages from translations
 - #1270 g_get_charset always returns 8-bit codepage on Windows, crippling UTF-8 output
 - #1438 Deprecate GTimeVal- and GTime-based APIs
 - #1635 g_socket_join_multicast_group iface parameter fails on win32/64
 - #1648 2.58.2: Assorted asserts fail in Arch Linux when built statically
 - #1729 g_content_type_guess segfaults when passed an empty data buffer on Mac OS
 - #1788 GNetworkMonitor claims I am offline
 - #1790 documentation on g_file_info_get_attribute_as_string
 - #1791 _g_content_type_get_mime_dirs missing from libgio-2.0.0.dylib on MacOS
 - #1792 glib-genmarshal generated valist marshal does not respect static scope for some types
 - #1793 glib-genmarshal generates wrong code for va marshaler for VARIANT type
 - #1794 API Proposal: g_timer_is_active
 - #1796 Add gio-querymodules variable to pkg-config file
 - #1797 glib/tests/win32 test failing on 64-bit Visual Studio builds
 - #1798 /contenttype/tree reliably fails on FreeBSD since !863
 - #1807 g_dbus_server_new_sync() documentation references nonexistent function
 - #1808 Stopping a GDBusServer should clean up Unix socket paths (if not abstract) and nonce-tcp nonce files
 - #1811 Introspection info for g_unichar_compose's 3rd arg should be OUT
 - #1822 keyfile gsettings backend not loading
 - #1823 Documentation for disabling selinux is incorrect
 - #1825 GKeyFileSettingsBackend created without filename construct property and unchecked assertion
 - #1828 Small typo in gio manpage
 - #1837 Specify for each (optional) parameter, whether it is OUT or INOUT
 - #1838 Reword documentation for G_DECLARE_FINAL_TYPE
 - #1847 Setting GLIB_VERSION_{MIN_REQUIRED, MAX_ALLOWED} to before 2.56 triggers warnings
 - !533 docs: Document pitfall of deprecation pragmas
 - !563 ci: Add scan-build job in a new ‘analysis’ pipeline stage
 - !678 glib-compile-schemas: Improve translatable strings
 - !817 gdate: Officially mark GTime as deprecated
 - !851 gsettings: Document that lists are returned in no defined order
 - !853 gobject: Fix apostrophe usage in a few small bits of documentation
 - !859 gobject: Add a g_assert_finalize_object() macro
 - !863 gunicollate/cygwin: Don't use __STDC_ISO_10646__ for wchar_t related checks
 - !865 gnetworkaddress: fix "happy eyeballs" logic
 - !867 Post-release version bump
 - !871 Drop G_DISABLE_DEPRECATED
 - !873 Use atomic reference counting for GSource
 - !874 Clamp number of vectors to IOV_MAX / UIO_MAXIOV for GOutputStream writev()...
 - !875 CI/msys2: disable coverage reporting, lcov doesn't support gcc9 yet
 - !876 CVE-2019-12450: gfile: Limit access to files when copying
 - !877 gio: specify proper c_marshaller and va_marshallers
 - !883 tests: Fix small race in GSubprocess tests
 - !884 garcbox.c: Fix typo atomit => atomic
 - !885 goption: Clarify G_OPTION_ARG_FILENAME documentation
 - !889 Include <sys/filio.h> for FIONREAD
 - !901 gmain: Clarify that g_source_destroy() doesn’t drop a reference
 - !904 Add glib-genmarshal tests and fix some valist marshaller bugs
 - !906 property action: Add state hints
 - !908 Improve testfilemonitor test repeatability and debuggability
 - !909 D-Bus auth mechanism improvements
 - !914 ci: Run scan-build in a different build directory
 - !915 docs: fix typo on arrays examples in gvariant-text
 - !917 docs: Fix name of IRC channel in CONTRIBUTING.md
 - !919 glib/tests/refcount.c: Fix tests on non-GCC-isque compilers
 - !920 gmacros: Only use deprecated attributes on enumerators with GCC ≥ 6.5
 - !923 Check if compiler symbols are defined before using them
 - !924 Bump the required version of Meson
 - !930 glib/tests/convert.c: Skip tests that aren't meaningful for Windows
 - !931 glib/tests/fileutils.c: Fix stdio Wrapper Test on Windows
 - !934 build: Increase the slow test timeout to 180s
 - !935 Ignore */__pycache__/* directories
 - !937 Fix module tests on Visual Studio builds
 - !939 gstdio: minor cleanups
 - !941 list model: Expand items-changed docs
 - !944 gutils: Don't limit the length of the host name to 99
 - !945 Avoid overrunning stack at the end of the varargs.
 - !947 gobject/tests/signals.c: Fix tests on Windows
 - !948 GObject: Fix mkenums.py and genmarshal.py tests on Windows
 - !950 ci: Enable CI on FreeBSD 12
 - !951 Preliminary patches for Universal Windows Platform support
 - !952 gio: Make minor docs improvements
 - !953 g_utf8_normalize: Doc comment return missing nullable annotation
 - !954 Fix the ISO 15924 code for Manichaean
 - !955 gmacros: Use _Static_assert when C11 is available
 - !958 gthread: fix minor errno problem in GCond
 - !961 gmain: Fix g_main_context_prepare priority annotation
 - !962 gmacros: Use _Static_assert only for non-expr static assert
 - !964 gmacros.h: Use static_assert on MSVC if possible
 - !968 Fix typo in request handle
 - !970 gdatetime: Unset LC_ALL for the test as well
 - !971 docs.c: Forward link from g_auto* → G_DEFINE_AUTO*
 - !973 doc: fix typo in gio/gresource.c
 - !979 Experimental clang-cl support
 - !980 gmacros.h: Add better support for clang-cl
 - !981 gio: fix typo in g_settings_reset documentation
 - !982 Various doc fixes
 - !985 Keyfile portal fixes
 - !987 gio/tests: Remove code and comments referring to libtool
 - !991 fix atomic detection on older gcc versions
 - !992 docs: Add example to g_test_summary() documentation
 - !994 gio: Fix minor docs mistakes
 - !996 Small array test fixes
 - !997 gdbusaddress: Add missing transfer annotation
 - !1007 Resubmission of !832 “Try to create the complete path right away and fall back”
 - !1009 gapplication: remove inactivity_timeout source on finalize

* Translation updates:
 - Hungarian
 - Indonesian
 - Portuguese (Brazil)
 - Spanish


Overview of changes in GLib 2.61.1
==================================

* `g_unichar_isxdigit()` and `g_unichar_xdigit_value()` now handle full-width
  characters (U+FF21–U+FF26 and U+FF41–U+FF46) (#58)

* Deprecate `gtester` utility and its test reporting format and enable TAP
  output by default instead — the `--tap` option to tests is now a no-op
  (#1441, #1619)

* Add `g_test_summary()` to allow test authors to programmatically summarise
  what each unit test in a test suite does (#1450)

* Upgrade to Unicode Character Database v12.1 (#1713, !822)

* More IPv6 Happy Eyeballs fixes to `GNetworkAddress` and `GSocketClient`
  (#1747, #1771, #1774)

* Fix valgrind and gdb support for the new `GHashTable` changes (#1749, #1780)

* Fix GTask wait times growing faster than the number of task threads (#1683)

* Change `GApplication` to ignore `-psn_*` arguments on the macOS command line,
  as they are irrelevant (#1784)

* Add `g_autoqueue()` helper macros, similar to `g_autolist()` (!474)

* Add pre-allocated link helpers for `GList` and `GQueue`:
 - `g_list_insert_before_link()`
 - `g_queue_insert_before_link()`
 - `g_queue_insert_after_link()`

* Improve network availability detection with NetworkManager to treat lower
  levels of connectivity as having reduced availability (!781)

* Add `g_clear_signal_handler()` to allow disconnecting from a `GObject` signal
  and clearing the signal handler ID to zero in a single call (!819)

* Add `g_autoptr()` support for `GRWLock` (!825)

* Define `G_OS_UNIX`, not `G_OS_WIN32`, when GLib is built agains Cygwin (!862)

* Bugs fixed:
 - #29 GScanner: should explicitly document modifiable fields (value, next_value, ...)
 - #58 g_unichar_isxdigit() and g_unichar_xdigit_value() should deal with full-width a-fA-F
 - #106 Boxed types should be documented better
 - #135 g_unichar_totitle(0) returns 0x00001F88 instead of 0
 - #429 g_format_size() is broken on Windows
 - #1441 Deprecate gtester
 - #1450 Add API for tests to describe what they're checking
 - #1619 GTest should have a way to default to TAP
 - #1683 GTask: task_wait_time is increased constantly when the number of running thread is greather than 10
 - #1713 Upgrade to Unicode Character Database v12
 - #1739 meson build failure libdl
 - #1747 Critical in g_socket_client_async_connect_complete
 - #1749 New GHashTable implementation confuses valgrind
 - #1753 Remove memory leaks from gio/test/resolver.c
 - #1755 Please revert #535 gmacros: Try to use the standard __func__ first in G_STRFUNC
 - #1759 test_month_names: assertion failed
 - #1760 Document for g_resolver_lookup_records why it returns a list of list of gchar*.
 - #1763 tests: -p runs tests in the reverse of the specified order
 - #1768 g_strlcat(): Possible buffer overflow in implementation
 - #1771 GNetworkAddressAddressEnumerator unsafely modifies cache in GNetworkAddress
 - #1774 Leaks in gsocketclient.c connection code
 - #1776 glib/date test fails
 - #1780 GDB pretty-printer for GHashTable no longer works
 - #1782 Error in documentation for cross-compile.
 - #1784 MacOS adds a -psn_X_XXXXXX parameter to the command line
 - !474 Add g_autoqueue
 - !476 Add pre-allocated link helpers for GList and GQueue
 - !556 gtestutils: Make --tap compatible with -p and --GTestSkipCount
 - !732 gsocket: Clarify in docs that `flags` arguments can be platform specific
 - !766 W32: swap special g_get_prgname() for platform_get_argv0()
 - !774 Only build tests if certain conditions are met.
 - !780 Add copyright and licensing terms to test report generator
 - !781 gnetworkmonitornm: Fix network available detection
 - !782 build: Fix check for RTLD_NEXT
 - !785 Remove monitor test
 - !787 build: Remove */.gitignore files
 - !791 glib/gconstructor.h: Include stdlib.h for MSVC builds
 - !792 general: Remove a few unhelpful references to ‘master’
 - !795 gdesktopappinfo: Add support for MATE and Xfce4 terminals
 - !802 gio: tests, don't check for libdl on OpenBSD
 - !806 Get to 100% coverage on GQueue tests
 - !808 Update the Docker images used for CI
 - !809 Modified version of !784 — Adding tests cases for a better coverage of glib/tests/strfuncs.c
 - !813 gappinfo: Add precondition checks to GAppLaunchContext env methods
 - !814 gschema.dtd: Add target attribute to alias
 - !819 Clear signal handler
 - !820 ci: Keep JUnit report script working on Debian stable
 - !821 Various minor cleanups to autoptrs
 - !822 glib: Update Unicode Character Database to version 12.1.0
 - !825 Add autoptr support for GRWLock
 - !831 build: (Long time after) post-release version bump
 - !835 Fix typo in German translation
 - !836 Document the best practices for binding GInitiallyUnowned
 - !862 build: define G_OS_UNIX, not G_OS_WIN32 under cygwin

* Translation updates:
 - Basque
 - Catalan
 - German
 - Indonesian
 - Spanish


Overview of changes in GLib 2.61.0
==================================

* Changes to `iconv` configure options, including the default iconv
  implementation on macOS — distributors may need to check their configure
  scripts (#1557)

* Build fixes when building GLib with `G_DISABLE_ASSERT` defined (#1708)

* Fix documentation for `gdbus-tool wait` to use correct units (#1737)

* Improvements to symlink handling on Windows (!269)

* Add exception handling for crashes on Windows (!582)

* Set `G_WITH_CYGWIN` again when GLib is built on Cygwin (this was a regression
  from the autotools build) (!736)

* Use `GCocoaNotificationBackend` by default on macOS, rather than
  `GGtkNotificationBackend` (!745)

* Use Windows symbol visibility when GLib is built on Cygwin, as PE binaries
  are subject to W32 visibility mechanics — this affects the definition of
  `_GLIB_EXTERN` (!752)

* Add coloured output support to `gdbus introspect` (!761)

* Bugs fixed:
 - #682 docs: advise not to use non-literal strings as qdata keys
 - #1177 gparted crashes due to g_quark_from_static_string used in global initialization
 - #1258 the buffer written to by g_input_stream_read is not marked as an out parameter
 - #1557 By default glib tries to use libc instead of native iconv on OSX
 - #1566 Meld Windows shows error on startup "There was a problem starting c:\Program"
 - #1614 GIO tests fail on FreeBSD CI with: Unexpected error from C library during 'pthread_mutex_lock': Invalid argument
 - #1708 Building GLib with G_DISABLE_ASSERT fails
 - #1709 GResource generation test incompatible with stable LLVM on Linux
 - #1710 Crash in g_cancellable_cancel
 - #1712 gdbus-proxy test is flaky
 - #1724 unconditional check in fuzzing/meson.build
 - #1725 gosxappinfo.h is not installed on macOS
 - #1727 Cannot use trash folder with an NFS mount using automount / autofs
 - #1728 GSocket does not support ENOTSOCK
 - #1732 Win32: lookup_by_name_async segfaults for not available domains
 - #1737 gdbus-tool wait command timeout argument incorrect unit reference
 - !67 glib: update internal gnulib from upstream
 - !269 Win32 symlink code refactoring
 - !493 tests: Check that cancelling g_file_replace don't overwrite existing file
 - !582 Basic W32 exception handling for glib
 - !680 Fix warnings glib
 - !690 Fix thread safety issues
 - !694 gvariant-parser: Fix pattern coalesce of M and *
 - !706 Fix data races in task test and gmenumodel test
 - !709 Bump release version for 2.62 series
 - !710 socket: Fix annotation for flags in g_socket_receive_message
 - !712 gwin32: Fix comment for g_win32_veh_handler
 - !716 Various minor documentation fixes
 - !717 Improve formatting of GCC attribute documentation
 - !718 GSocketClient - Free last error if a connection attempt fails and on retry the...
 - !719 Handle an UNKNOWN NetworkManager connectivity as NONE
 - !721 codegen: Fix use of uninitialised variable
 - !723 Provide examples for GNUC attribute macros
 - !724 meson: do a build-time check for strlcpy before attempting runtime check
 - !728 gsocket: Remove (type) annotation from flags arguments
 - !730 Improve gdbus-address parsing tests
 - !735 docs: Use the right g_autoptr function when using an auxiliary function
 - !736 Set G_WITH_CYGWIN again
 - !737 gresolver: Don’t use gai_strerror() on Windows, as it isn’t threadsafe
 - !741 Fix use-after-free triggered by gnome-session-binary
 - !745 gcocoanotificationbackend: give more priority than the gtk one
 - !749 gio: Add missing autocleanup definition for GSettingsSchema{Key,Source}
 - !750 Check for RTLD_NEXT
 - !752 Use W32 visibility for Cygwin
 - !754 Check for /proc/self/cmdline
 - !757 Fix gnulib build on older Visual Studio builds
 - !760 Properly ensure the cocoa notification backend type
 - !761 RFC: gdbus-tool: Add --color option for introspect
 - !762 gutils: Add (nullable) annotation to g_get_prgname()
 - !765 gslice: Use a convenience macro
 - !769 ci: Generate a cover report for the test suite
 - !772 tests: Check that option-argv0 test succeeds on Linux
 - !776 tests: Only run --external-data test on GNU ld/objcopy
 - !779 Fix 2.62 documentation symbols

* Translation updates:
 - Dutch


Overview of changes in GLib 2.60.0
==================================

* Further fixes to the Happy Eyeballs (RFC 8305) implementation (#1653, #1679, #1693)

* Add support for the XDG trash portal (#1676, !276)

* Bugs fixed:
 - #1653 gsocketclient-slow test is flaky
 - #1658 keyfile settings backend: Consider tightening permissions
 - #1668 Fill in CODE-OWNERS file
 - #1675 glib-compile-resources: c_name generation issue
 - #1676 Trash portal tries to open files as read-only but D-Bus API documents against that
 - #1679 socket-service test is flaky
 - #1693 Happy Eyeballs failure in gsocketclient-slow test
 - #1697 gthreadresolver: do_lookup_records does res_ninit with an uninitialized state
 - #1698 g_base64_encode(NULL, 0) causes critical warnings
 - !276 Support the trash portal
 - !639 gvariant-parser: Fix error handling when type coalescing fails
 - !666 Socket fixes to W32 test suite
 - !674 Update gvdb submodule
 - !676 Initialize a variable
 - !677 gerror: Add a missing precondition assertion in documentation
 - !686 gio: Also support modules built with MSVC
 - !688 gsocketclient: Fix critical on cancellation
 - !689 glib-compile-resources: Fix a minor leak
 - !691 gtask: Separate GTask fields memory locations to avoid data races
 - !692 glib.supp: Add more variations of existing suppressions
 - !696 Move closures refcount test to gobject/tests/
 - !698 gthreadedresolver: Remove unused thread pool
 - !699 tests: Fix closure-refcount to preserve old semantics
 - !702 Rename gobjectenumtypes.[ch] to glib-enumtypes.[ch]
 - !703 Clean up gmarshal.[ch]

* Translation updates:
 - Catalan
 - Czech
 - French
 - Friulian
 - German
 - Italian
 - Korean
 - Romanian
 - Serbian


Overview of changes in GLib 2.59.3
==================================

* Fix support for g_get_user_special_dir() on macOS, including support for the Downloads directory (#1048)

* Ensure that cancelling a GTask cannot cause its callback to be called synchronously (in the same call chain as the original *_async() call) (#1608)

* Further fixes to the Happy Eyeballs (RFC 8305) implementation (#1644, #1680)

* Various fixes for installation of installed tests (thanks to Iain Lane) (!649, !651)

* Various fixes for tests when run on Windows (thanks to LRN) (!665, !667)

* Bugs fixed:
 - #535 gmacros: Try to use the standard __func__ first in G_STRFUNC
 - #875 gio-gvfs on Windows: Don't mishandle other non-native URIs in gwinhttpvfs.c
 - #1048 "Desktop" shortcut appears twice in file chooser sidebar on OSX
 - #1608 Cancellation might not be asynchronous under certain circumstances
 - #1644 network-address test failure in CI: IPv6 Broken (g-io-error-quark, 24)
 - #1680 Regression: g_socket_client_connect_to_host_async() sometimes gets "Connection refused" when connecting to localhost
 - #1686 gdbus-peer test is sometimes timing out
 - !613 Use win32 io channel on windows for the protocol test
 - !634 Win32: gio/gsocket.c: Set WSAEWOULDBLOCK on G_POLLABLE_RETURN_WOULD_BLOCK
 - !638 gvariant-parser: Fix parsing of G_MININT* values in GVariant text format
 - !640 tests: Tag socket-service test as ‘flaky’
 - !641 Minor typo fixes to GSpawn documentation
 - !645 gsocketlistener: Fix multiple returns of GTask when accepting sockets
 - !647 gsocketclient: Ensure task is always returned on cancel
 - !648 gio/tests/task: Run the worker indefinitely until it's cancelled
 - !649 gio tests: Install test1.overlay file when building installed tests
 - !650 gstring: fully document semantics of @len for g_string_insert_len
 - !651 tests: Install the slow-connect-preload.so library and use it
 - !667 GSubprocess fixes for W32 test suite
 - !668 tests: Mark gdbus-peer test as flaky
 - !669 GWin32VolumeMonitor: Sort the volumes correctly
 - !670 gpollableoutputstream: Fix the description of the interface
 - !672 Fix some tests when running as root

* Translation updates:
 - Catalan
 - Danish
 - French
 - Indonesian
 - Kazakh
 - Portuguese (Brazil)
 - Slovenian
 - Turkish


Overview of changes in GLib 2.59.2
==================================

* Fix check on GDBusMessage size when reading it. (#1642)

* Add async GIO API: g_file_query_default_handler_async(), g_app_info_launch_uris_async() (#1249, #1347)

* Fix some bugs in the Happy Eyeballs implementation. (#1646, #1649)

* Install a new generated header with enum types for Unicode enums. (!481)

* Support the XDG trash portal. (!276)

* Bugs fixed:
 - #1224 TSAN patches
 - #1249 xdg-open/gnome-open doesn't work if service isn't started
 - #1347 g_app_info_launch_default_for_uri_async  is not really async
 - #1376 gmarkup: Optimize g_markup_escape_text()
 - #1642 minor mismatch between error and code in g_dbus_message_bytes_needed
 - #1646 Criticals in g_socket_client_enumerator_callback()
 - #1649 Critical in g_socket_client_connected_callback
 - #1673 G_MININT constants broken in g-i
 - !276 Support the trash portal
 - !481 Define enum types for Unicode enums
 - !585 gio: do not pass O_PATH file descriptors to portal APIs
 - !593 Don't fail trash test if ~/.local doesn't exist or mount points can't be determined (master)
 - !609 Make `g_app_info_launch_uris_async()` really asynchronous
 - !619 gvariant: Fix a mistake in docs
 - !622 Fixing warnings
 - !626 gdbus: Avoid printing null strings
 - !627 gsocketclient: Fix criticals
 - !629 Various memory leak cleanups to GSettings tests (subset)
 - !630 docs: Ignore more version macros

* Translation updates:
 - Galician
 - Hungarian
 - Lithuanian
 - Polish
 - Spanish


Overview of changes in GLib 2.59.1
==================================

* Autotools support is gone. (!580)

* g_format_size() now uses a no-break space to separate digits and units;
  translations will need to be updated accordingly. (#1625)

* New g_queue_clear_full() API. (#1464)

* Fix argument quoting on win32 when spawning subprocesses. (!419)

* Allow polling more than 64 handles on win32 using g_poll(). (#1071)

* Tag various tests as ‘flaky’. These are no longer run routinely on our
  upstream CI machines, and downstream packagers may want to not run them (or
  not treat those test failures as package build failures) on their test
  machines either. They are in the `flaky` test suite. (!579)

* Add overlay support to g_resources_get_info(). (#1445)

* Support defaults and locks in the keyfile GSettings backend. This will be
  used for flatpaks. (!450)

* Accept unquoted strings in the keyfile GSettings backend to simplify things
  for sysadmins. (!603)

* Update our contribution guidelines (`CONTRIBUTING.md`). (!590)

* Add writev() and writev_all() APIs to GOutputStream and GPollableOutputStream,
  and provide implementations of them for many subclasses. (#1431)

* Bugs fixed:
 - #424 Add 'proxy' debugging support
 - #1055 Provide alignment macros
 - #1071 Eliminate MAXIMUM_WAIT_OBJECTS limitation in g_poll() on Windows
 - #1445 g_resources_get_info doesn't respect resource overlays
 - #1464 Add g_queue_clear_full() API
 - #1500 GListStore needs double checking on some warnings
 - #1623 xdg-open: file with colon results in “The specified location is not supported”
 - #1625 Unbreakable space needed when showing size of folder/file
 - #1636 GTask getters don’t return TRUE/FALSE after bitfield changes
 - #1637 EXCEPTION_ACCESS_VIOLATION in g_clear_pointer
 - #1639 GListStore implementation of g_list_model_get_item() returns wrong results on integer overflow
 - #1655 gvariant-parser warnings
 - #1663 G_MININT32 triggers compiler warning C4146 with Visual C++
 - #1666 `G_DEFINE_DYNAMIC_TYPE_EXTENDED` causes warnings with -Wcast-function-type
 - !319 giomodule: Print the type of each default GIO module
 - !333 Add writev() API to GOutputStream and GPollableOutputStream
 - !419 gspawn, win32: qouted args - escape end backslash
 - !450 Settings portal
 - !512 gtype: Clarify type of GInterfaceInitFunc
 - !516 gthread: Add g_private_set_alloc0() convenience API
 - !535 win32 gpoll: overcome the 64 handles limit
 - !545 goption: Fix an annotation on g_option_context_parse_strv()
 - !560 docs: Fix dconf GSETTINGS_BACKEND name in gio overview
 - !564 gtype: Document type for iface_default_init() function
 - !568 Add separate definitions of g_assert_[non]null() for C++
 - !571 docs: Add note on how to check a gboolean condition
 - !575 gio: Update bad cert error in accept-certificate and GTlsError docs
 - !579 Temporarily disable flaky tests
 - !580 Drop autotools support
 - !583 gmacros: MSVC supports the noreturn function attribute
 - !587 Remove unused .pc.in files
 - !588 MSVC: Move dirent implementation to glib/dirent/
 - !590 Update contribution documentation
 - !591 gfileinfo: Fix annotation for g_file_info_set_attribute_stringv
 - !592 Remove leftover build/ directory
 - !595 gtestutils: pass open file descriptors to subprocess
 - !597 tests: Tag gsocketclient-slow test as ‘flaky’
 - !598 gdbus-proxy test fails with GLib-GIO:ERROR:glib/gio/tests/gdbus-proxy.c:832:fail_test: code should not be reached
 - !599 gdtlsconnection: do not return on a void method
 - !601 gio: Support "help" in extension point env vars
 - !602 Update POTFILES.in
 - !603 keyfile settings: Accept unquoted strings
 - !608 build: Add -Wno-pedantic flag to compiler arguments
 - !611 gnetworkaddress: fix use-after-free for network address
 - !612 gdir: shutup a warning when building with msvc
 - !615 Fix a couple of wrong compiler warnings

* Translation updates:
 - Spanish
 - Swedish


Overview of changes in GLib 2.59.0
==================================

* This will be the last development release with autotools support. As our
  Meson support has been around since 2.56.x, and was used to release tarballs
  in 2.58.x, the next development release (2.59.1) will drop autotools as used
  to build GLib. The macros installed for other packages to use will remain.

* Add `G_TEST_OPTION_ISOLATE_DIRS` to redirect `XDG_*_HOME` to a temporary
  directory for each unit test. (#538)

* Support `Property.EmitsChangedSignal` annotations in `gdbus-codegen`. (#542)

* Add `g_assert_cmpvariant()` API for unit tests. (#1191)

* Hide bind mounts from GIO mount listings. (#1271)

* Automatically realign data passed to `g_variant_new_from_bytes()` or
  `g_variant_new_from_data()` if it is not correctly aligned. This prevents
  misaligned accesses on architectures which don’t support them. Callers should
  still aim to correctly align data to get higher performance. (#1342)

* Support `ld -b binary` (on platforms which support it; i.e. Linux) to provide
  large pre-compiled `GResource` resources with a fast compilation time. (#1489)

* Unconditionally install GLib m4 macros, so that projects which depend on GLib
  and which still build using autotools can continue to build even once GLib has
  ported entirely to Meson. (#1520)

* Various fixes to the Meson build.

* Drop Python 2 support and require Python 3.4+. See discussion on
  https://mail.gnome.org/archives/desktop-devel-list/2018-July/msg00004.html.
  (!196)

* `GHashTable` performance and memory improvements for common cases. See
  https://hpjansson.org/blag/2018/07/24/a-hash-table-re-hash/. (!208)

* Add flags that allow a `GApplication` to signal and replace a currently
  running other instance of the same `GApplication`. This will be used for app
  upgrades with flatpak. (!250)

* Autostart xdg-desktop-portal when using the network monitor and proxy monitor
  portal backends. (!317)

* Add a g_task_set_name() API to allow `GTask`s to be described; useful for
  debugging. (!384)

* Enable FreeBSD CI on every commit for upstream GLib. (!387)

* Various GVariant, GMarkup and GDBus fuzzing fixes, including buffer overflow
  fixes. (!411)

* Various fixes to eliminate thread races, found by thread sanitizer (tsan).

* Deprecate TLS/DTLS rehandshaking, as it has been removed from the protocol in
  TLS 1.3. (!478)

* Support reading arguments from a file with `glib-mkenums`, which is useful
  for long argument lists due to having deeply nested build directories, on
  systems with a low limit on the command line length. (!489)

* Make `g_environ_*()` case-insensitive on Windows, as the environment itself
  is case-insensitive on Windows. (!500)

* Add Application Layer Protocol Negotiation (ALPN) support to `GTlsConnection`
  and `GDtlsConnection`, so that higher layer protocols can be negotiated when
  setting up a TLS connection, without additional round trips and latency. This
  is needed for eventual HTTP/2 support. (!520)

* Add support for TPM keys in PEM files when loading TLS certificates. (!522)

* Add a `GRecMutexLocker` auto-pointer wrapper for `GRecMutex`. (!528)

* Bugs fixed:
 - #107 The "g_key_file_get_comment" interface returns comment with unexpected new line symbol at the end
 - #179 g_object_unref assert in debug code
 - #277 'destroy_data' in g_cclosure_new is registered as finalize notifier instread invalidate.
 - #538 Add helpers to redirect XDG_*_HOME to a temp dir for unit tests
 - #542 gdbus-codegen does not honor "Property.EmitsChangedSignal" annotations
 - #656 check for -Werror=format-security broken
 - #734 Provide a way to instantiate a GDBusProxy-derived class from a GDBusConnection and a object path without blocking
 - #827 gmain: Clarify that g_source_set_callback() is safe on attached sources
 - #1055 Provide alignment macros
 - #1119 GVolumeMonitor: Results don't reflect current state but state when application was launched
 - #1191 add g_assert_equal_variants
 - #1261 Add option to leave <default> in gschema empty
 - #1271 fstab binds appear as mounts (x-gvfs-hide is being ignored)
 - #1310 gdbusproxy: make g-name-owner property useful with unique names
 - #1313 Meson: Rework the config.h generation
 - #1342 Automatically realign data passed to g_variant_new_from_bytes() or g_variant_new_from_data()
 - #1343 g_date_set_parse: Parses "September" in Polish incorrectly
 - #1362 Incorrect documentation about GSettings child add/remove notifications
 - #1452 GFileInfo: unable to retrieve correct modification time of links and mounted volumes on Windows
 - #1471 Incorporate oss-fuzz fuzz targets into GLib
 - #1489 Use `ld -b binary` to speed up GResource generation for linking
 - #1498 distcheck fails in distclean
 - #1506 error: redefinition of typedef 'GKqueueFileMonitor'
 - #1509 test_timeval_to_iso8601_overflow: 'out' should be NULL
 - #1513 GIcon regression?
 - #1514 gio/appinfo test sometimes fails in CI
 - #1518 /network-monitor/create-in-thread fails in (LXC) containers on glib-2-56
 - #1520 Change conditions for installing m4 macros
 - #1522 Trash not working on NTFS folder accessed from symlink
 - #1523 GIO NetworkMonitor doesn't reflect the current network state
 - #1525 GTask allows (buggy) application code to cause callback to be called twice, without warning
 - #1527 Meson doesn't install data for installed-tests
 - #1528 Meson tests are hard to debug in an autobuilder environment
 - #1530 tests/mainloop-test appears to be flaky
 - #1535 meson: installed-test metadata not run in TAP mode
 - #1536 meson: spurious dependencies on convenience libraries in .pc files
 - #1537 meson: absolute paths to ${builddir} included in gtk-doc HTML
 - #1538 meson: G_HAVE_GROWING_STACK defined differently
 - #1539 meson: Some files are unnecessarily installed executable
 - #1541 meson: timeloop-closure test not installed
 - #1542 meson: /usr/lib/glib2.0/installed-tests/glib/gdbus-peer: error while loading shared libraries: libgdbus-example-objectmanager.so: cannot open shared object file: No such file or directory
 - #1544 meson: gtester-report #! not replaced with ${PYTHON}
 - #1546 Cross-compilation fails in 2.58
 - #1556 build: Too long file path issue with meson on Windows
 - #1562 GDate test suite fails with latest glibc
 - #1570 ghash.c:694:27: left shift of 1 by 31 places cannot be represented in type 'int'
 - #1572 Flags validation fails
 - #1575 g_date_time_format() should have format attribute
 - #1576 Fails to build with Meson on Debian armel (armv5te EABI softfloat little-endian)
 - #1580 glib-compile-resources using strings breaks building e.g. GTK+ on MS Visual C, which limits strings to 65535 chars
 - #1581 Memory used for reference counted data might be misaligned.
 - #1588 Moving a bookmark item to the same URI causes a crash
 - #1589 g_log_writer_is_journald memoizes a single result, even though it accepts a parameter
 - #1590 tests: g-file-info-filesystem-readonly fails if run more than once with fuse & bindfs installed
 - #1594 Return value of g_dbus_connection_get_unique_name not annotated as nullable
 - #1600 g_timeout_source_new_seconds overflows when given interval > (G_MAXUINT / 1000)
 - #1601 appinfo test fix is defective
 - #1605 g_date_time_format fails when used with non ASCII format string on POSIX locale
 - #1615 gdbus-codegen not generating nullable annotation
 - !196 [RFC] build: Drop Python 2 support and require Python 3.4+
 - !200 Add a new GTlsError to indicate protocol downgrade attacks
 - !208 GHashTable improvements
 - !219 glocalfilemonitor: Fallback to poll file monitor for NFS
 - !238 W32 GFileInfo improvements
 - !250 Application replace
 - !264 glib-compile-resources: encode data as string
 - !268 build: simplify alloca checks. See #1313
 - !272 dtrace: Add missing const attributes to types in glib_probes.d
 - !273 gtlsbackend: add support for setting the default TLS database
 - !277 Use "command -v" instead of "which"
 - !282 meson: Add macOS libtool versioning for ABI compatibility
 - !286 gspawn: Fix build on systems without O_CLOEXEC
 - !287 glib-compile-resources: Fix generated code compiling with C++ compilers
 - !289 tests: Add more tests to finish branch coverage of GHashTable
 - !290 build: fix installation dir of glib-gettextize
 - !292 Remove all ChangeLog files
 - !293 Document new volume class `loop`
 - !294 portal network monitor: Always emit changed signal on changed
 - !295 meson: fix typo
 - !296 Add G_GNUC_FALLTHROUGH for __attribute__(fallthrough))
 - !297 build: Drop AC_C_CONST from configure.ac
 - !302 Document that GTimeVal is subject to the year 2038 problem on 32-bit systems
 - !303 liststore: Simplify code
 - !304 Add more GListStore/GListModel tests
 - !309 codegen: Change pointer casting to remove type-punning warnings
 - !312 Enable GIO tests on Windows
 - !316 gdbus: Improve error when well-known name is unowned
 - !317 Autostart xdg-desktop-portal if needed
 - !322 gnetworkmonitornm: Set a GError properly on an error handling path
 - !332 gmarkup: Make the documentation even more explicit about untrusted input
 - !334 gio: automake: Add libgmodule dependency
 - !338 gcharset: fix leaking g_get_language_names_with_category
 - !339 Add g_desktop_app_info_get_string_list(); fix g_key_file_free()
 - !340 tests: Mark two more tests as slow
 - !345 Fix build failure on systems without POSIX spawn
 - !347 Use Meson 0.48.0 for CI
 - !348 Documentation tweaks for g_array_free
 - !353 Meson: Do not run tests/refcount with --tap
 - !354 Fix spelling mistakes detected by Debian's Lintian tool
 - !358 Autotools: Move libmount from Libs.private to Requires.private
 - !360 CI: Test static build on installed glib
 - !363 Tests: Mark printf wrappers with G_GNUC_PRINTF
 - !364 ci: Enable FreeBSD CI
 - !366 gunixmounts: Mark mounts as system internal instead of filtering out
 - !372 gmacros: Fix G_[UN]LIKELY to not mask -Wparentheses
 - !374 gthreadpool: Include prgname in thread name
 - !375 m4macros: Allow information from pkg-config to be overridden
 - !376 gthread: Clarify priority handling in GRWLock
 - !379 Ignore g_return_*if_fail() branches in lcov coverage report
 - !381 Add UTF-8 communication tests for GSubprocess
 - !384 gtask: Add a g_task_set_name() method
 - !387 ci: Enable FreeBSD CI in the official repository
 - !396 m4: Fix AM_PATH_GLIB_2_0 macro
 - !400 grefcount: add missing gatomic.h
 - !403 build-sys: Pass CFLAGS to $(DTRACE)
 - !405 ci/msys2: fix path to the lcov config file
 - !406 meson: Mark 1bit-emufutex test as slow
 - !407 meson: Increase test timeouts
 - !410 gfileutils: Add examples to g_path_get_dirname() documentation
 - !411 Various GVariant, GMarkup and GDBus fuzzing fixes
 - !412 Enable compile time check of g_date_time_format() format
 - !413 Add support for g_auto(s)list to G_DECLARE'd types
 - !414 gio, tests: ensure objectmanager sources are generated
 - !415 gseekable: fix 'attmepting' typo
 - !416 gdbus-peer: Make sure to not include objectmanager-gen.c source
 - !417 Fix ^*ay handling in g_variant_iter_loop()
 - !418 Meson: Cleanup a FIXME now that we have dict addition
 - !420 gdbus-codegen: add autocleanup for FooObject
 - !422 GMarkup buffer overflow fixes for error handling, round 2
 - !423 gutils: Check whether getauxval function exists
 - !424 ci: Fix Docker image version
 - !425 gdate: Reinitialize using_twodigit_years and locale_era_adjust.
 - !435 gdatetime: Fix formatting of time zones offsets in range -01:00 to +00:00
 - !436 valgrind: Add glib_init()-related suppressions
 - !440 Fix minor memory leaks in tests
 - !443 tests: Avoid multithreaded use of g_test_rand_int_range
 - !444 gvarianttypeinfo: Consistently use atomics to access ref_count
 - !446 gmain: Fix data races in GUnixSignalWatchSource and GChildWatchSource
 - !451 closures test: Avoid timeout on ARM64 CPUs
 - !452 Atomic reference count in GVariant, ContainerInfo and GDBus introspection
 - !453 tests: Fix some data races in tests
 - !454 gdbusproxy: make g-name-owner property useful with unique names
 - !458 glib-compile-resources: Fix size allocation for compressed streams
 - !460 gatomicrefcount: Make g_atomic_ref_count_init non-atomic
 - !461 Meson: Fix build error in gdbus-example-objectmanager
 - !462 meson: add aarch64 memory barrier handling
 - !463 gio, tests: fix leak of dbus connection.
 - !467 Update documentation of g_tls_connection_handshake() again
 - !469 docs: add index of new symbols for gio > 2.52
 - !470 docs: Clarify return/error behaviour of D-Bus signal subscriptions
 - !472 gdbusmessage: Gracefully handle message signatures with invalid types
 - !477 gthread: Remove unsynchronized access to g_once_init_list from assertion
 - !478 Deprecate TLS rehandshaking
 - !480 docs: add a missing semicolon
 - !482 Check for 'z' library before fallbacking to subproject
 - !483 meson: Turn selinux into a meson feature and make it auto by default
 - !484 Meson: Add 'nls' option to disable translation
 - !485 gdbus-codegen: Tag interfaces and properties so annotated with G_PARAM_DEPRECATED
 - !486 Check for zlib header
 - !489 glib-mkenums: Support reading @rspfiles for arguments
 - !490 gspawn: Fix g_spawn deadlock in a multi-threaded program on Linux
 - !491 Meson: Add missing include_directories when using glib as subproject
 - !492 g_value_get_variant: return value is transfer-none not transfer-full
 - !494 Resolve "Follow-up from "gunixmounts: Stop considering cifs/nfs as system file systems""
 - !500 genviron: make g_environ_* case-insensitive on Windows
 - !504 tests: Unset LANGUAGE when running gdatetime tests
 - !505 Support isolating directories for unit tests
 - !508 ci: Install additional locales used during tests
 - !510 Add new Linux Testing project version number to configure script
 - !511 gvariant: Fix error handling for parsing Unicode escapes
 - !514 fix gdbus-codegen --interface-info-{header,body}
 - !515 binding: Clarify the use of g_object_unref() to remove a binding
 - !517 Meson: Fix deprecation warning with upcoming 0.49.0 release
 - !518 Meson: Fix declare_dependency() calls
 - !520 GTlsConnection: add ALPN support
 - !521 tests: Rename macro to avoid conflict with encoding prefix
 - !522 gtlscertificate: Add support for TPM keys in PEM files
 - !524 gdatetime: Fix typo in the comment
 - !528 Add GRecMutexLocker
 - !530 tests: Minor improvements to mkenums.py and taptestrunner.py used by it
 - !534 gtlscertificate: Fix bug in PEM private key parser
 - !536 Various minor docs fixes
 - !541 gtimezone: Fallback to /etc/timezone on Gentoo
 - !546 spawn: add shebang line to script
 - !547 Do not check for NULL when calling free()
 - !549 Improve documentation of g_assert_error()
 - !551 Revert "tests: Fix GOptionContext leak in GSubprocess tests"
 - !554 Only subscribe to owner-changed signals on message bus connections
 - !555 Suppress -Wint-in-bool-context warning with G_DEFINE_INTERFACE and g++

* Translation updates:
 - Brazilian Portuguese
 - Czech
 - Danish
 - Greek
 - Hungarian
 - Lithuanian
 - Norwegian bokmål
 - Polish
 - Slovak
 - Slovenian
 - Spanish
 - Swedish
 - Turkish


Overview of changes in GLib 2.58.0
==================================

* Tarball built with `ninja dist`, so if you want to build this release with
  autotools (which is supported), you will need to re-run autogen.sh. This
  release, and all micro releases in the 2.58.x series, support being built
  with Meson or autotools. See:
  https://mail.gnome.org/archives/gtk-devel-list/2018-June/msg00012.html

* Fix cancellation of g_subprocess_communicate_async() calls. See !266.

* Drop support for the __int64 type, which further breaks compilation on old
  MSVC versions (before VS2013). See #1313.

* Expose GSettings schema directory in gio-2.0.pc as `schemasdir`. See !274.

* Support v3 of the xdg-desktop-portal network monitor API. See !265, !279.

* Fix G_MODULE_SUFFIX on macOS when GLib is built with Meson — it should be `so`
  rather than `dylib`. Projects that use Meson and the `g_module_build_path()`
  API such as glib-networking should pass `name_suffix:` to `shared_module()` to
  ensure that plugins continue to be called libfoo.so on macOS. See !280.

Bugs fixed:
 !280 meson: Always set G_MODULE_SUFFIX to `so` on macOS
 !266 subprocess: Fix communicate_cancelled signature
 !279 Revert "Add a gnet utility" (see !265)
 !265 Network monitor again
 !274 gio: Provide schemas directory information in pkg-config file
 !239 gvariant: Fix more bounds checking in GVariant text format parser
 !195 garray: add overflow checks before expanding array
 #1497 g_strdup_printf warns on invalid format specifier with G_GUINT64_FORMAT on Win32
 !270 autotools: remove support for the __int64 type. See #1313
 !267 ci: Add an autotools job

* Translation updates:
 Czech
 Galician
 Indonesian
 Italian
 Kazakh
 Korean
 Turkish


Overview of changes in GLib 2.57.3
==================================

* G_GNUC_MALLOC’s definition has been tightened up to match an updated
  definition from GCC. Many uses of G_GNUC_MALLOC which were previously
  appropriate may cause miscompilation with newer GCC versions. Check your uses
  of it against the updated documentation. See #1465.

* Many minor documentation fixes.

* Fix for gint64 and int64_t compatibility on macOS and BSD. See #972.

* Fix free space metadata on some file systems (notably FAT). See #328.

* Support installed-tests with our Meson build system. See #1444.

* Forbid @filename@/@basename@ in glib-mkenums templates, which is a change to
  its long-standing behaviour (which was long-standing nonsensical). See !241.

* Various stat() fixes on Windows. See #1452, #1476.

* MinGW-w64 ABI warning: In case you build 64 bit glib without LFS support by
  passing --disable-largefile (not the default) and use GStatBuf, you need to
  rebuild your application as the size of GStatBuf has changed for this case.
  See #1476.

* Improve TAP compatibility of g_test_incomplete(). See #1474.

* Change fallback preferences when loading icons. See !72.

Bugs fixed:
 !263 build: Clean files left behind after gio/tests/gresource.c test
 !262 gmem: Only evaluate pointer argument to g_clear_pointer() once
 #1465 Many uses of G_GNUC_MALLOC are incorrect
 #1448 g_error does not abort() as documented
 #1494 g_clear_pointer may not use the correct calling convention with its callback
 #972 Mismatch between gint64 and int64_t on 64-bit macOS/BSD
 !251 gtestdbus: Fix watcher crash on FreeBSD
 #1492 gcc-8: -Wcast-function-type: new warnings for g_list_copy_deep()
 !252 tests: fix gnotification tests broken due to the recent icon name fallback changes
 #328 filesystem::{free,size,used} not set for full FAT fs
 !248 network monitor portal: update properties initially
 #1373 Incorrect transfer annotation for g_binding_unbind.
 #1444 the meson build doesn't support installed tests
 #1027 Fix trashing on overlayfs
 #1454 gvdb does not treat corrupt files as empty as promised; dconf suffers
 !243 tests: Explicitly set TZ=UTC for g_time_val_from_iso8601() testing
 #1488 ‘O_CLOEXEC’ undeclared (first use in this function)
 !241 glib-mkenums: forbid @filename@/@basename@ in fhead and ftail
 !240 gtimer: Ensure arithmetic is correctly signed for ISO 8601 parsing
 #1452 GFileInfo: unable to retrieve correct modification time of links and mounted volumes on Windows
 !234 DOC: Documentation fix in GTask description
 #1363 Meson: Review cross compilation properties
 !225 gtimer: Add overflow checks to g_time_val_from_iso8601()
 !230 gbookmarkfile: Fix some more minor leaks when metadata elements are repeated
 !229 Fix up g_bytes_compare() documentation
 #1476 g_stat - possbile memory corruption causing SEGFAULT
 !199 Update TLS documentation
 #1474 g_test_incomplete() makes test_case_run() return FALSE
 #1475 glib/tests/atomic.c test_types() trips -Werror=bad-function-cast on Debian armel
 #1472 Test for BROKEN_IP_MREQ_SOURCE_STRUCT is broken on Windows / Mingw
 !220 date test: Use g_test_skip(), not g_test_incomplete()
 #1467 malloc difference causes refstring test to fail on FreeBSD
 !230 gbookmarkfile: Fix some more minor leaks when metadata elements are repeated
 #1466 Not Able to Build glib 2.57.2 in Mingw-w64 x64 bits
 #1433 test_posix_parse: assertion failed (g_time_zone_get_abbreviation (tz, 0) == "UTC"): ("LMT" == "UTC")
 #1446 Follow-up from "Document difference between g_assert() and g_assert_*() wrt G_DISABLE_ASSERT"
 !206 grefstring: Avoid an unnecessary NUL assignment
 #1458 g_volume_get_mount returns NULL value after g_volume_mount_finish is called with no error
 !72 gio: icons should fallback to non-preferred style appropriately.

* Translation updates:
 Brazilian
 Chinese (Taiwan)
 French
 German
 Lithuanian
 Polish
 Romanian
 Turkish


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
==================================

 * 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.

 * 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
==================================

* GTask no longer imposes a fixed limit on the number of tasks that
  can be run_in_thread() simultaneously, since doing this inevitably
  results in deadlocks in some use cases. Instead, it now has a base
  number of threads that can be used "for free", but will gradually
  add more threads to the pool if too much time passes without any
  tasks completing.

  The exact behavior may continue to change in the future, and it's
  possible that some future version of GLib may not do any
  rate-limiting at all. As a result, you should no longer assume that
  GTask will rate-limit tasks itself (or, by extension, that calls to
  certain async gio methods will automatically be rate-limited for
  you). If you have a very large number of tasks to run, and don't
  want them to all run at once, you should rate-limit them yourself.

* 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.

* g_test_run() no longer runs tests in exactly the order they are
  registered; instead, it groups them according to test suites (ie,
  path components) like the documentation always claimed it did. In
  some cases, this can result in a sub-optimal ordering of tests,
  relative to the old behavior. The fix is to change the test paths to
  properly group together the tests that should run together. (eg, if
  you want to run test_foo_simple(), test_bar_simple(), and
  test_foo_using_bar() in that order, they should have test paths like
  "/simple/foo", "/simple/bar", "/complex/foo-using-bar", not
  "/foo/simple", "/bar/simple", "/foo/using-bar" (which would result
  in test_foo_using_bar() running before test_bar_simple()).

  (The behavior actually changed in GLib 2.36, but it was not
  documented at the time, since we didn't realize it mattered.)

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
==============================================

* It is no longer necessary to call g_type_init().  If you are
  loading GLib as a dynamic module, you should be careful to avoid
  unloading it, then subsequently loading it again.  This never
  really worked before, but it is now explicitly undefined behavior.
  Note that if g_type_init() was the only explicit use of a GObject
  API and you are using linker flags such as --no-add-needed, then
  you may have to artificially use some GObject call to keep the
  linker from optimizing away -lgobject. We recommend to use
  g_type_ensure (G_TYPE_OBJECT) for this purpose.

* 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.

* The 'flowinfo' and 'scope_id' fields of GInetSocketAddress
  (introduced in GLib 2.32) have been fixed to be in host byte order
  rather than network byte order. This is an incompatible change, but
  the previous behavior was clearly broken, so it seems unlikely that
  anyone was using it.

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
===============================================

* GIO now looks for thumbnails in XDG_CACHE_HOME, following a
  recent alignment of the thumbnail spec with the basedir spec.

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

* 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
===============================================

* It is no longer necessary to use g_thread_init() or to link against
  libgthread.  libglib is now always thread-enabled. Custom thread
  system implementations are no longer supported (including errorcheck
  mutexes).

* The thread and synchronisation APIs have been updated.
  GMutex and GCond can be statically allocated without explicit
  initialisation, as can new types GRWLock and GRecMutex.  The
  GStatic_______ variants of these types have been deprecated.  GPrivate
  can also be statically allocated and has a nicer API (deprecating
  GStaticPrivate).  Finally, g_thread_create() has been replaced with a
  substantially simplified g_thread_new().

* The g_once_init_enter()/_leave() functions have been replaced with
  macros that allow for a pointer to any gsize-sized object, not just a
  gsize*.  The assertions to ensure that a pointer to a correctly-sized
  object is being used will not work with generic pointers (ie: (void*)
  and (gpointer) casts) which would have worked with the old version.

* It is now mandatory to include glib.h instead of individual headers.

* The -uninstalled variants of the pkg-config files have been dropped.

* For a long time, gobject-2.0.pc mistakenly declared a public
  dependency on gthread-2.0.pc (when the dependency should have been
  private).  This means that programs got away with calling
  g_thread_init() without explicitly listing gthread-2.0.pc among their
  dependencies.

  gthread has now been removed as a gobject dependency, which will cause
  such programs to break.

  The fix for this problem is either to declare an explicit dependency
  on gthread-2.0.pc (if you care about compatibility with older GLib
  versions) or to stop calling g_thread_init().

* g_debug() output is no longer enabled by default.  It can be enabled
  on a per-domain basis with the G_MESSAGES_DEBUG environment variable
  like
    G_MESSAGES_DEBUG=domain1,domain2
  or
    G_MESSAGES_DEBUG=all

* 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
================================================

* GObject includes a generic marshaller, g_cclosure_marshal_generic.
  To use it, simply specify NULL as the marshaller in g_signal_new().
  The generic marshaller is implemented with libffi, and consequently
  GObject depends on libffi now.

* 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
===============================================

* The GApplication API has changed compared to the version that was
  included in the 2.25 development snapshots. Existing users will need
  adjustments.

* 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
===================================================

* It is now allowed to call g_thread_init(NULL) multiple times, and
  to call glib functions before g_thread_init(NULL) is called
  (although the later is mainly a change in docs as this worked before
  too). See the GThread reference documentation for the details.

* GObject now links to GThread and threads are enabled automatically
  when g_type_init() is called.

* GObject no longer allows to call g_object_set() on construct-only properties
  while an object is being initialized. If this behavior is needed, setting a
  custom constructor that just chains up will re-enable this functionality.

* GMappedFile on an empty file now returns NULL for the contents instead of
  returning an empty string. The documentation specifically states that code
  may not rely on nul-termination here so any breakage caused by this change
  is a bug in application code.

* 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
===================================================

* Repeated calls to g_simple_async_result_set_op_res_gpointer used
  to leak the data. This has been fixed to always call the provided
  destroy notify.

* 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
===================================================

* The functions for launching applications (e.g. g_app_info_launch() +
  friends) now passes a FUSE file:// URI if possible (requires gvfs
  with the FUSE daemon to be running and operational). With gvfs 2.26,
  FUSE file:// URIs will be mapped back to gio URIs in the GFile
  constructors. The intent of this change is to better integrate
  POSIX-only applications, see bug #528670 for the rationale.  The
  only user-visible change is when an application needs to examine an
  URI passed to it (e.g. as a positional parameter). Instead of
  looking at the given URI, the application will now need to look at
  the result of g_file_get_uri() after having constructed a GFile
  object with the given URI.

* 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
===================================================

* The recommended way of using GLib has always been to only include the
  toplevel headers glib.h, glib-object.h and gio.h. GLib enforces this by
  generating an error when individual headers are directly included.
  To help with the transition, the enforcement is not turned on by
  default for GLib headers (it is turned on for GObject and GIO).
  To turn it on, define the preprocessor symbol G_DISABLE_SINGLE_INCLUDES.

* 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
===================================================

* GLib now includes GIO, which adds optional dependencies against libattr
  and libselinux for extended attribute and SELinux support. Use
  --disable-xattr and --disable-selinux to build without these.

* 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
==================================================

* The functions g_snprintf() and g_vsnprintf() have been removed from
  the gprintf.h header, since they are already declared in glib.h. This
  doesn't break documented use of gprintf.h, but people have been known
  to include gprintf.h without including glib.h.

* The Unicode support has been updated to Unicode 4.1. This adds several
  new members to the GUnicodeBreakType enumeration.

* The support for Solaris threads has been retired. Solaris has provided
  POSIX threads for long enough now to have them available on every
  Solaris platform.

* 'make check' has been changed to validate translations by calling
  msgfmt with the -c option. As a result, it may fail on systems with
  older gettext implementations (GNU gettext < 0.14.1, or Solaris gettext).
  'make check' will also fail on systems where the C compiler does not
  support ELF visibility attributes.

* The GMemChunk API has been deprecated in favour of a new 'slice
  allocator'. See the g_slice documentation for more details.

* A new type, GInitiallyUnowned, has been introduced, which is
  intended to serve as a common implementation of the 'floating reference'
  concept that is e.g. used by GtkObject. Note that changing the
  inheritance hierarchy of a type can cause problems for language
  bindings and other code which needs to work closely with the type
  system. Therefore, switching to GInitiallyUnowned should be done
  carefully. g_object_compat_control() has been added to GLib 2.8.5
  to help with the transition.

* 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
=================================================

* GLib 2.6 introduces the concept of 'GLib filename encoding', which is the
  on-disk encoding on Unix, but UTF-8 on Windows. All GLib functions
  returning or accepting pathnames have been changed to expect
  filenames in this encoding, and the common POSIX functions dealing
  with pathnames have been wrapped. These wrappers are declared in the
  header <glib/gstdio.h> which must be included explicitly; it is not
  included through <glib.h>.

  On current (NT-based) Windows versions, where the on-disk file names
  are Unicode, these wrappers use the wide-character API in the C
  library. Thus applications can handle file names containing any
  Unicode characters through GLib's own API and its POSIX wrappers,
  not just file names restricted to characters in the system codepage.

  To keep binary compatibility with applications compiled against
  older versions of GLib, the Windows DLL still provides entry points
  with the old semantics using the old names, and applications
  compiled against GLib 2.6 will actually use new names for the
  functions. This is transparent to the programmer.

  When compiling against GLib 2.6, applications intended to be
  portable to Windows must take the UTF-8 file name encoding into
  consideration, and use the gstdio wrappers to access files whose
  names have been constructed from strings returned from GLib.

* Likewise, g_get_user_name() and g_get_real_name() have been changed
  to return UTF-8 on Windows, while keeping the old semantics for
  applications compiled against older versions of GLib.

* The GLib uses an '_' prefix to indicate private symbols that
  must not be used by applications. On some platforms, symbols beginning
  with prefixes such as _g will be exported from the library, on others not.
  In no case can applications use these private symbols. In addition to that,
  GLib+ 2.6 makes several symbols private which were not in any installed
  header files and were never intended to be exported.

* To reduce code size and improve efficiency, GLib, when compiled
  with the GNU toolchain, has separate internal and external entry
  points for exported functions. The internal names, which begin with
  IA__, may be seen when debugging a GLib program.

* On Windows, GLib no longer opens a console window when printing
  warning messages if stdout or stderr are invalid, as they are in
  "Windows subsystem" (GUI) applications. Simply redirect stdout or
  stderr if you need to see them.

* The child watch functionality tends to reveal a bug in many
  thread implementations (in particular the older LinuxThreads
  implementation on Linux) where it's not possible to call waitpid()
  for a child created in a different thread. For this reason, for
  maximum portability, you should structure your code to fork all
  child processes that you want to wait for from the main thread.

* A problem was recently discovered with g_signal_connect_object();
  it doesn't actually disconnect the signal handler once the object being
  connected to dies, just disables it. See the API docs for the function
  for further details and the correct workaround that will continue to
  work with future versions of GLib.

* 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.
                                

