Overview of changes in GLib 2.69.1
==================================

* Support categories in desktop notifications (`GNotification`)
  (work by Guido Günther) (#2446)

* Add `GPowerProfileMonitor` for monitoring when to use less power (due to being
  on battery power, electricity being expensive or high-carbon, etc.)
  (work by Patrick Griffis, Bastien Nocera) (#2444)

* Allow static names to be set for `GSource`s to avoid unnecessary string copies
  (work by Matthias Clasen) (!2196)

* Bugs fixed:
 - #203 API: need g_module_open() variant with GError
 - #2058 win32: GPrivate can leak some objects
 - #2321 Add a GTypeFlag for final types
 - #2429 safe_fdwalk/safe_closefrom for Solaris 11.3/11.4
 - #2439 gio trash doesn't recognize existing trash directory in non-fs-root mount
 - #2446 Support `categories` for notifications
 - #2452 g_string_replace() loops 2**32 times when replacing empty string
 - !2177 gio/tests/g-file-info: don't assume million-in-one events don't happen
 - !2178 Clarify GValue documentation
 - !2179 Update GValue doc: How to use GBoxed with GValue
 - !2180 correctly use 3 parameters for close_range
 - !2181 gclosure: Fix the invoke() return_value annotation
 - !2182 glocalfileinfo: Fix usec/nsec confusion with filetimes on Windows
 - !2184 gspawn: Use CLOSE_RANGE_CLOEXEC if available
 - !2188 g_boxed_type_register_static, G_DEFINE_BOXED_TYPE: added correlating information
 - !2192 Fix more warnings
 - !2193 glib.supp: Expand match kinds for g_get_language_names() suppressions
 - !2194 Add GPowerProfileMonitor
 - !2195 Fix some test suite memory leaks
 - !2196 mainloop: Add g_source_set_static_name
 - !2197 GResource compiler: Prefix static [con|de]strutors with c_name
 - !2198 Port internal uses to use g_source_set_static_name()
 - !2200 Fix doc stanzas for GDataInputStream properties
 - !2201 Fix a Unicode typo
 - !2202 Document the stance on ID-based mainloop APIs
 - !2204 tests: Add a test for Unicode normalization
 - !2205 GWin32RegistryKey / GWin32AppInfo registry watch fixes
 - !2206 Adapt documentation to gi-docgen
 - !2210 GWin32AppInfo: Fix missing initialization

* Translation updates:
 - Indonesian
 - Portuguese
 - Portuguese (Brazil)
 - Russian
 - Ukrainian


Overview of changes in GLib 2.69.0
==================================

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

* Fix building third-party projects against GLib on CentOS 7 (work by
  Ignacio Casal Quinteiro) (#2387)

* Add `g_thread_pool_new_full()` API to allow queued `GThreadPool` data to be
  freed if the pool is freed early (work by Nitin Wartkar) (#121)

* Ensure `dlerror()` is used with locking as it’s not thread-safe in some libc
  implementations (#399)

* Add `g_dbus_is_error_name()` and `g_dbus_is_interface_name()` convenience
  functions (work by Nitin Wartkar) (#402)

* Drop internal libpcre copy in favour of a subproject from wrapdb (#962, #642)

* Add `g_prefix_error_literal()` helper function (work by Emmanuel Fleury,
  building on work by Dan Williams) (#663)

* Add `g_bytes_get_region()` to get data from a `GBytes` with range checks
  (work by Nitin Wartkar, building on work by Allison Karlitskaya) (#1098)

* Add `g_object_take_ref()` to sink a floating ref (work by Nitin Wartkar,
  building on work by Allison Karlitskaya) (#1112)

* Optimise grefcount atomic operations (work by Nishal Kulkarni) (#1583)

* Fix resolving child GSettings schemas from the parent’s schema source (work
  by Christian Persch) (#1884)

* Fix `g_date_time_format()` return value encoding if `LC_TIME` is not a UTF-8
  locale but other locale settings are (work by Frederic Martinsons) (#2055)

* Set app name in freedesktop.org notifications with `GNotification` (work
  by André Apitzsch) (#2069)

* Significantly improve retrieval of mount data on Windows (work by LRN based
  on initial analysis by Jehan Pagès) (#2096)

* Add `g_file_info_get_(access|creation)_date_time()` accessors (work
  by Abanoub Ghadban) (#2281)

* Always apply the remove_dot_segments algorithm to URIs in `g_uri_parse()`;
  previously it was only applied to relative URIs (work
  by Carlos Garcia Campos) (#2342)

* Rename git `master` branch to `main` (#2348)

* Various macro and version check cleanup (work by Gaël Bonithon,
  Robin Verdenal-Tallieux, Nishal Kulkarni) (#2376, #2388, #2389)

* Add a `GTlsConnectionClass.get_negotiated_protocol` vfunc so that
  `g_tls_connection_get_negotiated_protocol()` can be made thread-safe
  (work by Michael Catanzaro) (#2393)

* Improve guess about whether a Windows process is a console process
  (work by Princeton Ferro with input from LRN) (!1662)

* Add `g_steal_fd()` function (work by Simon McVittie) (!1966)

* Add `g_spawn_check_wait_status()` and distinguish more carefully between
  wait status and exit status in the `GSpawn` API (work by Simon McVittie) (!1967)

* Document GLib’s security policy; see
  https://gitlab.gnome.org/GNOME/glib/-/blob/main/SECURITY.md (!1985)

* Add `g_tree_remove_all()` (work by Lighto-Ku) (!1986)

* Simplify exception handling on Windows to eliminate risk of it failing due
  to prior heap corruption (work by LRN) (!2031)

* Fix handling EOF when reading from SOCKS5 proxy stream (work
  by Benjamin Berg) (!2032)

* Unset the registered state of a `GApplication` after it has shut down (work
  by Marco Trevisan) (!2056)

* Support `GPattern` as a boxed type (work by Marco Trevisan) (!2066)

* Add `g_tls_connection_get_protocol_version()` and
  `g_tls_connection_get_ciphersuite_name()` to get TLS connection information
  (work by Michael Catanzaro) (!2077)

* Make TLS private key properties readable in `GTlsCertificate` (work
  by Michael Catanzaro) (!2087)

* Fix detection of static libintl when building on macOS (work
  by Jonas Hahnfeld) (!2109)

* Add `g_strv_builder_addv()` and `g_strv_builder_add_many()` to the
  `GStrvBuilder` API (work by Alexandros Theodotou) (!2112)

* Add `not-valid-before`, `not-valid-after`, `subject-name`, `issuer-name`,
  `dns-names`, `ip-addresses` properties to `GTlsCertificate`
  (work by Ross Wollman) (!2113, !2142)

* Add PKCS#11 flags to `GTlsPasswordFlags` (work by Patrick Griffis) (!2126)

* Bugs fixed:
 - #121 GThreadPool and the ability to free data waiting to be handled
 - #229 g_match_info_fetch_named not return empty string as expected
 - #310 ref doc doesn't talk about "helper getters" optimization in g_file_info.c
 - #399 dlerror() not thread-safe in all libc, making gmodule-dl.c's fetch_dlerror fail sometimes
 - #402 please consider: #define g_dbus_is_error_name(x) g_dbus_is_interface_name (x)
 - #626 Add documentation example for GArray and g_array_set_clear_func()
 - #642 update to pcre 8.35+
 - #663 [patch] add g_prefix_error_literal()
 - #793 Potentially confusing error message when object doesn't exist
 - #817 gobject: Allow passing %NULL for @data in g_object_remove_toggle_ref
 - #962 drop embedded pcre copy
 - #1036 gdbusproxy stops tracking if dbus service restarts
 - #1098 GBytes: add range-checked pointer getter
 - #1112 GObject: add g_object_take_ref()
 - #1583 Optimise gatomicrefcount operations
 - #1864 Somewhat misleading documentation of GSourceFuncs
 - #1884 `g_settings_get_child` not compatible with `g_settings_schema_source_new_from_directory`
 - #2011 Add additional unit tests for D-Bus name watching
 - #2055 g_date_time_format() does not return UTF-8 if LC_TIME is not UTF8 but other locale settings are UTF-8
 - #2069 FreedesktopNotification fails to set app_name
 - #2096 SHGetFileInfoW() is not reliable (time-wise)
 - #2281 Add g_file_info_get_(access|creation)_date_time()
 - #2300 Crash on Windows MSVC build around gio
 - #2311 testfilemonitor test leaks ip_watched_file_t struct
 - #2340 GIO tests fail to build with clang-cl
 - #2342 g_uri_parse doesn't apply the remove_dot_segments algorithm to the path
 - #2348 Investigate renaming master git branch to main
 - #2352 RUN_FIRST | RUN_CLEANUP signals with a default handler ignore return values from user handlers
 - #2359 GLib 2.68.0: gio-querymodules segfaults on Windows
 - #2361 g_key_file_load_from_file segfaults on "Key[*]="like lines
 - #2363 g_newa() doesn’t check for multiplication overflow
 - #2368 g_task_run_in_thread () limits are not clear
 - #2369 glocalfile: Add native exfat magic number to  filesystem list
 - #2376 GLIB_VERSION_MAX_ALLOWED < 2.60 does not warn when using G_GNUC_FALLTHROUGH
 - #2387 json-glib does not build with glib 2.68.1
 - #2388 Pixman compilation error due to glib
 - #2389 Use G_GNUC_CHECK_VERSION to check the GNUC version
 - #2393 g_tls_connection_get_negotiated_protocol() is not threadsafe
 - #2397 Slow to list device in windows
 - #2399 Change spelling of ‘serialise’ to ‘serialize’ in documentation
 - #2405 Mention that GNotification requires an installed .desktop file to work
 - #2409 Project crashes when executing g_application_mark_busy
 - #2414 Devhelp: Glib Reference Manual/Glib Overview/Running Glib Applications formatting issue.
 - #2416 certificate: g_tls_certificate_new_from_pem invalid read on non null terminated data
 - #2417 GFile: `g_file_replace_contents()` reports `G_IO_ERROR_WRONG_ETAG` when saving from a symlink
 - #2418 gatomic: __atomic functions are called for CV-qualified output variables
 - #2423 resources.c:656:test_resource_binary_linked: 'found' should be TRUE
 - !1514 gbookmarkfile: Don't crash if we're not visited
 - !1662 gspawn-win32: improve guess whether process is console process
 - !1812 docs: Expand documentation about D-Bus GUIDs
 - !1957 Fix more warnings
 - !1965 gversionmacros: Add version macros for GLib 2.70
 - !1966 Add g_steal_fd() to API
 - !1967 Distinguish more clearly between wait status and exit status
 - !1969 glib_typeof: Move definition to its own header
 - !1985 docs: Add a policy for handling security issues
 - !1986 make g_tree_remove_all public
 - !1996 Include glibconfig.h to get the G_OS_UNIX token
 - !1998 gpollableinputstream: Add missing annotation
 - !1999 goption.c: Simplfy parse_short_option()
 - !2004 Some improvements to clang-cl builds
 - !2005 introspection: Remove 'caller-allocates' from POD types
 - !2006 fuzzing: Add fuzz tests for functions which parse paths
 - !2008 tests: Deactivate tls-bindings test suite for windows
 - !2011 docs: Fix example program link
 - !2012 docs: Replace git.gnome.org with gitlab.gnome.org urls
 - !2013 fuzzing: Fix assertion failure in fuzz_paths.c
 - !2016 GIO W32: Pin gio DLL
 - !2023 gtlspassword: Fix g-i annotation of return for g_tls_password_get_value
 - !2025 [th/gdbus-cleanup] two minor cleanup patches for gdbusconnection.c
 - !2026 Split g_test_log() messages that contain multiple lines
 - !2027 Fix a handful of minor leaks found by Coverity
 - !2030 Fix more warnings
 - !2031 Re-simplify exception handling on Windows
 - !2032 gsocks5proxy: Handle EOF when reading from a stream
 - !2033 Fix annotation of count arguments
 - !2036 gmacros.h: use G_GNUC_CHECK_VERSION
 - !2038 Fix more warnings
 - !2039 Implement G_ANALYZER_NORETURN for Coverity
 - !2040 Fix more warnings
 - !2041 refcount: Clarify when the ref count ends up undefined
 - !2042 grefcount: Clarify that the initial reference count is 1
 - !2043 gmacros.h: use g_macro__has_attribute() where possible
 - !2046 gerror: Clarify docs around message requirements
 - !2047 Fix more warnings
 - !2048 Fix more warnings
 - !2049 Fix typo in g_socket_listener_accept_async()'s comment
 - !2050 gdbus: document completion after idle action for g_dbus_connection_signal_unsubscribe()
 - !2051 Add nullable annotations in GUnixMountEntry
 - !2052 g_string_replace(): Fix documentation of 'limit' parameter
 - !2054 docs: Fix formatting of code block
 - !2055 Improve handling of FILENAME_MAX
 - !2056 application: Unset the registered state after shutting down
 - !2063 Fix more warnings
 - !2066 gpattern: Register as Boxed type and support introspection for it
 - !2067 gmacros: missing check if __STDC_VERSION__ is defined
 - !2069 gdbus-tool: Actually use argv[0] basename as program name
 - !2071 gstring: Cleanup documentation of g_string_replace
 - !2074 Fix more warnings
 - !2075 gdtlsconnection: Fix a check for a vfunc being implemented
 - !2077 tls: add functions to get protocol version and ciphersuite name
 - !2078 gthreadedresolver: don't ignore flags in lookup_by_name_with_flags
 - !2080 guuid: fix shift operation to parse hex string in uuid_parse_string()
 - !2081 Fix more warnings
 - !2085 gcredentials.h: Fix comment typo
 - !2087 gtlscertificate: make private key properties readable
 - !2088 Fix more warnings
 - !2090 docs: Standardize spelling of serializ*
 - !2091 Fix more warnings (clang)
 - !2098 grefcount: Optimise g_atomic_ref_count_dec
 - !2099 gmacros.h: G_NORETURN: remove useless checks
 - !2100 tests: Add missing return value check in string test
 - !2101 Fix more warnings
 - !2104 tests: Drop use of g_test_bug_base()
 - !2105 tests: Use a temporary file in the bookmarkfile tests
 - !2106 Fix more warnings
 - !2108 glib spawn-singlethread test only if F_DUPFD_CLOEXEC is defined
 - !2109 meson: Fix detection of static libintl on macOS
 - !2112 gstrvbuilder: add addv and add_many to the API
 - !2113 tls: expose cert details on GTlsCertificate
 - !2119 Fix more warnings
 - !2120 gdbusobjectmanagerclient: Call GetManagedObjects async
 - !2123 gdbus: Add various missing (nullable) or (not nullable) annotations
 - !2126 gtlspassword: Add flags signifying PIN type for PKCS#11
 - !2127 gutils: ensure g_find_program_in_path() return an absolute path
 - !2130 Revert "tests: Deactivate tls-bindings test suite for windows"
 - !2139 gdbus, win32: Fix accidental dllexport in static builds
 - !2142 tls: expose SAN details on GTlsCertificate
 - !2143 compiling.xml: Don't recommend backticks
 - !2144 pcre: Drop internal libpcre copy
 - !2145 gunixmounts: Document NULL return value for g_unix_mount_for()
 - !2152 tests: A few small improvements to GBytes tests
 - !2153 docs: Fix annotations for optional arguments
 - !2155 glocalfilemonitor: Avoid a deadlock on finalization
 - !2162 testgdate: fix -Wmisleading-indentation warning
 - !2166 gtlscertificate: Add more annotations to new properties
 - !2167 g_value_set_string description: clarified (unified), that v_string is a copy.
 - !2173 gasyncqueue: Add missing (nullable) annotation to free function
 - !2174 data-to-c.py: generate new-line at the end of the file

* Translation updates:
 - Chinese (China)
 - English (United Kingdom)
 - Hebrew
 - Nepali
 - Occitan (post 1500)
 - Serbian


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.
                                

