From 23c868e255b8a510a0bf4e8e35075ab2f83f8df9 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 13 Jan 2021 13:58:57 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20Move=20=E2=80=98Notes=E2=80=99=20sectio?= =?UTF-8?q?n=20from=20README=20to=20NEWS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The content of the section was more appropriate to the `NEWS` file, and no longer helpful for anyone reading the `README`. The `README` is meant to be a quick introduction to the project and how to contribute to it, not a set of notes for packagers and distributors. That’s what `NEWS` is. Signed-off-by: Philip Withnall --- NEWS | 248 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 284 ------------------------------------------------------ 2 files changed, 248 insertions(+), 284 deletions(-) diff --git a/NEWS b/NEWS index d0b82586a..f46fa6675 100644 --- a/NEWS +++ b/NEWS @@ -3436,6 +3436,10 @@ Translation updates: 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 @@ -3709,6 +3713,21 @@ Overview of changes in GLib 2.47.1 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 @@ -4624,6 +4643,21 @@ 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. @@ -5751,6 +5785,28 @@ Overview of changes fron GLib 2.36.0 to 2.37.0 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 @@ -6234,6 +6290,13 @@ The remaining changes should not cause problems. 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 @@ -6754,6 +6817,49 @@ Overview of changes from GLib 2.32.0 to 2.32.1 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 @@ -7431,6 +7537,11 @@ list below attempts to summarise, but not every change is listed. 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 @@ -7996,6 +8107,10 @@ Overview of Changes from GLib 2.28.0 to 2.29.2 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... @@ -9251,6 +9366,23 @@ Overview of Changes from GLib 2.24.0 to GLib 2.25.0 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 @@ -9612,6 +9744,10 @@ Overview of Changes from GLib 2.22.0 to GLib 2.22.1 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: @@ -9971,6 +10107,18 @@ Overview of Changes from GLib 2.20.0 to GLib 2.20.1 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: @@ -10350,6 +10498,13 @@ Overview of Changes from GLib 2.18.0 to GLib 2.18.1 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 @@ -10764,6 +10919,10 @@ Overview of Changes from GLib 2.16.0 to GLib 2.16.1 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: @@ -11685,6 +11844,36 @@ Overview of Changes from GLib 2.10.0 to GLib 2.10.1 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] @@ -12119,6 +12308,65 @@ Overview of Changes from GLib 2.6.0 to GLib 2.6.1 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 which must be included explicitly; it is not + included through . + + 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 diff --git a/README.md b/README.md index 4bc4113ce..9ef3b3d6b 100644 --- a/README.md +++ b/README.md @@ -47,287 +47,3 @@ Closes: #123 Otherwise, create a new merge request that introduces the change, filing a separate issue is not required. - -## Notes - -### Notes about GLib 2.48 - -* 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. - -### Notes about GLib 2.46 - -* 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. - -### Notes about GLib 2.40 - -* 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.) - -### Notes about GLib 2.36 - -* 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. - -### Notes about GLib 2.34 - -* 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. - -### Notes about GLib 2.32 - -* 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 - -### Notes about GLib 2.30 - -* 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. - -### Notes about GLib 2.28 - -* The GApplication API has changed compared to the version that was - included in the 2.25 development snapshots. Existing users will need - adjustments. - -### Notes about GLib 2.26 - -* Nothing noteworthy. - -### Notes about GLib 2.24 - -* 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. - -### Notes about GLib 2.22 - -* 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. - -### Notes about GLib 2.20 - -* 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. - -### Notes about GLib 2.18 - -* 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. - -### Notes about GLib 2.16 - -* 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. - -### Notes about GLib 2.10 - -* 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. - -### Notes about 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 which must be included explicitly; it is not - included through . - - 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.