glibconfig-sysdefs.h
glib.spec
stamp-h.in
+glibconfig.h.win32
Owen Taylor <otaylor@gtk.org>
Sebastian Wilhelmi <wilhelmi@ira.uka.de>
-There are also many others who have contributed patches and fixes;
-we thank them, for helping us in advancing GLIB.
-
The random number generator "Mersenne Twister", which is used by GLib,
-is developed and originally coded by:
+was developed and originally coded by:
Makoto Matsumoto <matumoto@math.keio.ac.jp>
Takuji Nishimura <nisimura@math.keio.ac.jp>
+
+There are also many others who have contributed patches and fixes;
+we thank them, for helping us in advancing GLIB.
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
+
+ * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+ * incorporated proposed cleanups from gtk-devel-list.
+
+ * bumped version number to GLib-1.3.1
+
+ * glib.h:
+ * gqueue.c:
+ * gstring.c:
+ * glist.c:
+ removed string tokenisation (we got g_strsplit() and g_strjoin()
+ already) and readline functions.
+ s/g_list_delete/g_list_delete_link.
+ implemented g_slist_delete_link.
+ removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+ macro, g_atexit() is provided for public consumption.
+ added GTrashStack inline utility functions.
+ reimplement double eneded queues.
+ removed GStack implementation, people can use a queue or a (singly)
+ linked list for this task.
+ deprecated g_strescape(), we need the SunOS variants here.
+
+ * gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+ * *.*: CVS merges.
+
+ * upgrade to libtool 1.3.3.
+
1999-07-21 Tor Lillqvist <tml@iki.fi>
Win32: With the latest gcc (2.95, pre-release), we can have binary
win32-related files that are made from corresponding .in files.
Is there a cleaner way than explicitly writing rules that invoke
config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+ is..... and to..... macros, which take unsigned chars, not chars!
+ Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * gerror.c (g_on_error_query): check isatty() before querying so
+ we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmain.c: provide a poll prototype for SunOS, as they do not do
+ it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+ (Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.3
+
+1999-05-08 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am tests/Makefile.am: Correct rules for making the
+ win32-related files that are made from corresponding .in files.
+ Is there a cleaner way than explicitly writing rules that invoke
+ config.status?
+
+Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.status
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30 Tor Lillqvist <tml@iki.fi>
+
+ * Makefile.am: Don't distribute glibconfig.h.win32.in, but
+ glibconfig.h.win32. Generate it when making a dist. Also generate
+ makefile.msc and config.h.win32 from corresponding .in files when
+ making dist.
+
+ * configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+ @GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+ * glibconfig.h.win32.in: Use static mutex structure and initial
+ value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+ * tests/Makefile.am: Distribute makefile.msc. Generate it when
+ making dist.
+
+ * tests/makefile.msc.in: New file.
+
+ * tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+ the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): behave conservative with
+ G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+ to be "null" in that case.
+
+1999-04-20 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_vsnprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Added missing
+ #ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+ the first place!)
+
+1999-04-18 Havoc Pennington <hp@pobox.com>
+
+ * gutils.c (g_snprintf): When using the vsnprintf()
+ implementation, '\0'-terminate the resulting string
+ and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+ expected token as well, so we get "- expected end of file" instead of
+ "- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.2
+
+1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
+
+ * g_strchug(): s/strcpy/memmove/
+
+1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Adjusted the test for an unimplemented
+ getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: bumped versin number to GLib 1.2.2, interface 2,
+ binary 2.
+
+ * NEWS: updates.
+
+Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
+
+ * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+ and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
+ time string concatenation.
+
+Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Check for two threads
+ calling g_main_iterate at once.
+
+ * gmain.c: If the set of poll file descriptors changes
+ during a call to poll(), abort that call, and start
+ a new poll. My test program still segfaults
+ obscurely on glibc 2.0 (in read()!!!), but now it works on
+ glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Fixed slight bug, that made configure hang on some
+ systems. Please do not merge this into 1.3 branch. It's taken care
+ of differently there. Info from J. Rhett Aultman
+ <cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.1
+
+ * README:
+ INSTALL:
+ NEWS:
+ sanity_check: updated
+
+ * glibconfig.h.win32.in:
+ Makefile.am:
+ docs/glib-config.1.in:
+ docs/Makefile.am: Added files used to generate new files.
+
+ * glibconfig.h.win32:
+ docs/glib-config.1: Removed, now generated.
+
+ * configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
+
+ * glib.h:
+ * gmain.c: add user_data to the GSource ->check and ->prepare functions,
+ so it can be used to e.g. pass a GPollFd.
+ (g_main_poll): only add poll records with an events mask != 0 to the
+ fd_array. don't even bother calling poll_func() if fds=timeout=0.
+ added debugging printouts around poll_func() invokation that can be
+ enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+ * acinclude.m4
+ * config.guess
+ * config.sub
+ * ltconfig
+ * ltmain.sh: upgrade to libtool 1.2f
+
+ * autogen.sh: libtool is not required to autogen glib
+
+ * acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+ needed)
+
+1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed another stupid fault of mine: Did
+ s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in bumped versin number to GLib 1.2.1, interface 1,
+ binary 1.
+
+ * NEWS: updates.
+
+ * glib.h: added GLIB_CHECK_VERSION() macro similar to
+ GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
+
+ * gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ (g_mem_profile):
+ (g_mem_chunk_print):
+ (g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+ messages.
+
+ * gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+ to g_return_if_fail().
+ * grel.c (g_*): changed a bunch of g_assert() statements to
+ g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in: Also accept _Pctime_r instead of ctime_r, while
+ seraching for the right `_REENTRANT' flag. This is for Digital
+ UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: check for working realloc (NULL,).
+ * gmem.c (g_realloc): use malloc() for initial allocation on systems
+ where realloc(NULL,) will not work (this is the case on SunOS, reported
+ by Tom Geiger).
+
+Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
+
+ * ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+ flag around the call to g_hook_free() to avoid spurious
+ warnings (happens during destruction phase).
+
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+ from config.h.win32 to glibconfig.h.win32
+
+ * acconfig.h, configure.in, config.h.win32: Added test for DCE
+ versions of mutex_trylock and cond_timedwait. The win32 versions
+ are posix, aren't they?
+
+1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+ Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gutils.c (g_get_any_init): Fixed yet another bloody
+ implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+ <olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+ test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * Released GLib 1.2.0
+
+ * AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+ * *.[ch]: inserted additional note to look for ChangeLog and
+ AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
+
+ * Made specfile generated, tweaked slightly
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
Simple install procedure
========================
- % gzip -cd glib-1.3.0.tar.gz | tar xvf - # unpack the sources
- % cd glib-1.3.0 # change to the toplevel directory
+ % gzip -cd glib-1.3.1.tar.gz | tar xvf - # unpack the sources
+ % cd glib-1.3.1 # change to the toplevel directory
% ./configure # run the `configure' script
% make # build GLIB
[ Become root if necessary ]
--- /dev/null
+Email: gtk-bugs@gimp.org
grand.c \
gscanner.c \
gslist.c \
- gstack.c \
gstrfuncs.c \
gstring.c \
gthread.c \
-What's new in GLib 1.3.0:
+What's new in GLib 1.3.1:
-* Look at ChangeLog.
+* 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 thread-safe random number generator Mersenne Twister.
+
+
+Overview of Changes in GLib 1.2.1:
+
+* g_realloc() fix for SunOS (please report further problems).
+* Continued the never ending fix vendetta regarding getpwuid(),
+ this time AIX has been the culprit.
+* Upgrade to libtool 1.2f
+* Miscellaneous other buglets fixed.
What's new in GLib 1.2.0 (since GLib 1.0.x):
* GRelations for n-way mapping of certain data
* An n-way tree implementation
* GDate functionality for calendar date manipulations
-* GAllocator type and assocated functions
+* GAllocator type and associated functions
* Added generic callback maintenance functions (ghook)
* Generic functions for TAB completions
* Endian defines (G_*_ENDIAN)
Overview of Changes in GLib 1.1.6:
* New GDate functionality for calendar date manipulations (g_date_*)
-* New GAllocator type and assocated functions
+* New GAllocator type and associated functions
* New functions g_slist_copy and g_list_copy to duplicate a list with all
its data pointers.
* New function g_array_insert_vals and new macro g_array_insert_val to
General Information
===================
-This is GLib version 1.3.0. GLib is a library which includes support
+This is GLib version 1.3.1. GLib is a library which includes support
routines for C such as lists, trees, hashes, memory allocation, and
many other things.
# we rewrite this file
rm -f glibconfig-sysdefs.h
-dnl we to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they
+dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they
dnl are available for $ac_help expansion (don't we all *love* autoconf?)
AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
#
-# The following version number definitions apply to GLib and GModule
-# as a whole, so if changes occoured in either of them, they are both
+# The following version number definitions apply to GLib, GModule and GThread
+# as a whole, so if changes occoured in any of them, they are all
# treated with the same interface and binary age.
#
# Making releases:
# GLIB_BINARY_AGE += 1;
# if any functions have been added, set GLIB_INTERFACE_AGE to 0.
# if backwards compatibility has been broken,
-# set GLIB_BINARY_AGE and GLIB_INTERFACE_AGE to 0.
+# set GLIB_BINARY_AGE _and_ GLIB_INTERFACE_AGE to 0.
#
GLIB_MAJOR_VERSION=1
GLIB_MINOR_VERSION=3
-GLIB_MICRO_VERSION=0
+GLIB_MICRO_VERSION=1
GLIB_INTERFACE_AGE=0
GLIB_BINARY_AGE=0
GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
AC_SUBST(GLIB_MAJOR_VERSION)
AC_SUBST(GLIB_MINOR_VERSION)
+AC_SUBST(GLIB_MICRO_VERSION)
AC_SUBST(GLIB_VERSION)
AC_SUBST(GLIB_INTERFACE_AGE)
AC_SUBST(GLIB_BINARY_AGE)
*.cps
*.fns
*.vrs
+glib-config.1
man_MANS = glib-config.1
-EXTRA_DIST = glib-config.1 \
+EXTRA_DIST = glib-config.1.in \
glib.html \
glib_toc.html
--- /dev/null
+.TH GLIB 1 "16 December 1998" Version @VERSION@
+.SH NAME
+glib-config - script to get information about the installed version of GLib
+.SH SYNOPSIS
+.B glib-config [\-\-prefix\fI[=DIR]\fP] [\-\-exec\-prefix\fI[=DIR]\fP] [\-\-version] [\-\-libs] [\-\-cflags] [LIBRARIES]
+.SH DESCRIPTION
+.PP
+\fIglib-config\fP is a tool that is used to configure to determine
+the compiler and linker flags that should be used to compile
+and link programs that use \fIGLib\fP. It is also used internally
+to the .m4 macros for GNU autoconf that are included with \fIGLib\fP.
+.
+.SH OPTIONS
+.l
+\fIglib-config\fP accepts the following options:
+.TP 8
+.B LIBRARIES
+\fIGLib\fP has three libraries 'glib', 'gmodule' and 'gthread'. If you specify one of
+them, only the appropriate things for that library will be printed.
+.TP 8
+.B \-\-version
+Print the currently installed version of \fIGLib\fP on the standard output.
+.TP 8
+.B \-\-libs
+Print the linker flags that are necessary to link a \fIGLib\fP program.
+.TP 8
+.B \-\-cflags
+Print the compiler flags that are necessary to compile a \fIGLib\fP program.
+.TP 8
+.B \-\-prefix=PREFIX
+If specified, use PREFIX instead of the installation prefix that \fIGLib\fP
+was built with when computing the output for the \-\-cflags and
+\-\-libs options. This option is also used for the exec prefix
+if \-\-exec\-prefix was not specified. This option must be specified
+before any \-\-libs or \-\-cflags options.
+.TP 8
+.B \-\-exec\-prefix=PREFIX
+If specified, use PREFIX instead of the installation exec prefix that
+\fIGLib\fP was built with when computing the output for the \-\-cflags
+and \-\-libs options. This option must be specified before any
+\-\-libs or \-\-cflags options.
+.SH SEE ALSO
+.BR gtk-config (1),
+.BR gimp (1),
+.BR gimptool (1)
+.SH COPYRIGHT
+Copyright \(co 1998 Owen Taylor
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.
query3);
fflush (stdout);
- fgets (buf, 8, stdin);
+#ifndef NATIVE_WIN32
+ if (isatty(0) && isatty(1))
+ fgets (buf, 8, stdin);
+ else
+ strcpy (buf, "E\n");
+#else
+ fgets (buf, 8, stdin);
+#endif
if ((buf[0] == 'E' || buf[0] == 'e')
&& buf[1] == '\n')
* MT safe
*/
+#define DEBUG_MSG(x) /* */
+#ifdef G_ENABLE_DEBUG
+/* #define DEBUG_MSG(args) g_message args ; */
+#endif
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
{
gchar num[4][NUM_LEN+1];
gint i;
- const gchar *s;
+ const guchar *s;
/* We count 4, but store 3; so we can give an error
* if there are 4.
}
#ifdef G_ENABLE_DEBUG
-# if 0
- g_message ("**GDate prepared a new set of locale-specific parse rules.");
-# endif
+ DEBUG_MSG (("**GDate prepared a new set of locale-specific parse rules."));
i = 1;
while (i < 13)
{
-# if 0
- g_message (" %s %s", long_month_names[i], short_month_names[i]);
-# endif
+ DEBUG_MSG ((" %s %s", long_month_names[i], short_month_names[i]));
++i;
}
if (using_twodigit_years)
- {
-# if 0
- g_message ("**Using twodigit years with cutoff year: %u", twodigit_start_year);
-# endif
- }
+ DEBUG_MSG (("**Using twodigit years with cutoff year: %u", twodigit_start_year));
{
gchar *strings[3];
i = 0;
}
++i;
}
-# if 0
- g_message ("**Order: %s, %s, %s", strings[0], strings[1], strings[2]);
- g_message ("**Sample date in this locale: `%s'", buf);
-# endif
+ DEBUG_MSG (("**Order: %s, %s, %s", strings[0], strings[1], strings[2]));
+ DEBUG_MSG (("**Sample date in this locale: `%s'", buf));
}
#endif
}
g_date_prepare_to_parse (str, &pt);
-#ifdef G_ENABLE_DEBUG
-# if 0
- g_message ("Found %d ints, `%d' `%d' `%d' and written out month %d",
- pt.num_ints, pt.n[0], pt.n[1], pt.n[2], pt.month);
-# endif
-#endif
+ DEBUG_MSG (("Found %d ints, `%d' `%d' `%d' and written out month %d",
+ pt.num_ints, pt.n[0], pt.n[1], pt.n[2], pt.month));
if (pt.num_ints == 4)
}
#ifdef G_ENABLE_DEBUG
else
- g_message ("Rejected DMY %u %u %u", day, m, y);
+ DEBUG_MSG (("Rejected DMY %u %u %u", day, m, y));
#endif
G_UNLOCK (g_date_global);
}
query3);
fflush (stdout);
- fgets (buf, 8, stdin);
+#ifndef NATIVE_WIN32
+ if (isatty(0) && isatty(1))
+ fgets (buf, 8, stdin);
+ else
+ strcpy (buf, "E\n");
+#else
+ fgets (buf, 8, stdin);
+#endif
if ((buf[0] == 'E' || buf[0] == 'e')
&& buf[1] == '\n')
GDestroyNotify notify);
static gboolean g_io_unix_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_io_unix_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_io_unix_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
static gboolean
g_io_unix_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
*timeout = -1;
return FALSE;
static gboolean
g_io_unix_check (gpointer source_data,
- GTimeVal *current_time)
+ GTimeVal *current_time,
+ gpointer user_data)
{
GIOUnixWatch *data = source_data;
g_list_append
g_list_concat
g_list_copy
- g_list_delete
g_list_find
g_list_find_custom
g_list_first
g_quark_from_string
g_quark_to_string
g_quark_try_string
- g_queue_free
- g_queue_get_size
- g_queue_new
- g_queue_pop_back
- g_queue_pop_front
- g_queue_push_back
- g_queue_push_front
g_rand_double
g_rand_double_range
g_rand_free
g_source_remove
g_source_remove_by_source_data
g_source_remove_by_user_data
- g_stack_free
- g_stack_new
- g_stack_pop
g_static_mutex_get_mutex_impl
g_static_private_get
g_static_private_set
* And it provides a way to store and retrieve a `gint' in/from a `gpointer'.
* This is useful to pass an integer instead of a pointer to a callback.
*
- * GINT_TO_POINTER(i), GUINT_TO_POINTER(i)
- * GPOINTER_TO_INT(p), GPOINTER_TO_UINT(p)
+ * GINT_TO_POINTER (i), GUINT_TO_POINTER (i)
+ * GPOINTER_TO_INT (p), GPOINTER_TO_UINT (p)
*
- * Finally, it provide the following wrappers to STDC functions:
+ * Finally, it provides the following wrappers to STDC functions:
*
- * g_ATEXIT
- * To register hooks which are executed on exit().
- * Usually a wrapper for STDC atexit.
- *
- * void g_memmove(gpointer dest, gconstpointer void *src, gulong count);
+ * void g_memmove (gpointer dest, gconstpointer void *src, gulong count);
* A wrapper for STDC memmove, or an implementation, if memmove doesn't
* exist. The prototype looks like the above, give or take a const,
* or size_t.
* macros, so we can refer to them as strings unconditionally.
*/
#ifdef __GNUC__
-#define G_GNUC_FUNCTION (__FUNCTION__)
-#define G_GNUC_PRETTY_FUNCTION (__PRETTY_FUNCTION__)
+#define G_GNUC_FUNCTION __FUNCTION__
+#define G_GNUC_PRETTY_FUNCTION __PRETTY_FUNCTION__
#else /* !__GNUC__ */
-#define G_GNUC_FUNCTION ("")
-#define G_GNUC_PRETTY_FUNCTION ("")
+#define G_GNUC_FUNCTION ""
+#define G_GNUC_PRETTY_FUNCTION ""
#endif /* !__GNUC__ */
/* we try to provide a usefull equivalent for ATEXIT if it is
typedef struct _GScanner GScanner;
typedef struct _GScannerConfig GScannerConfig;
typedef struct _GSList GSList;
-typedef struct _GStack GStack;
typedef struct _GString GString;
typedef struct _GStringChunk GStringChunk;
typedef struct _GTimer GTimer;
+typedef struct _GTrashStack GTrashStack;
typedef struct _GTree GTree;
typedef struct _GTuples GTuples;
typedef union _GTokenValue GTokenValue;
typedef struct _GIOChannel GIOChannel;
+/* Tree traverse flags */
typedef enum
{
G_TRAVERSE_LEAFS = 1 << 0,
G_TRAVERSE_MASK = 0x03
} GTraverseFlags;
+/* Tree traverse orders */
typedef enum
{
G_IN_ORDER,
typedef void (*GVoidFunc) (void);
-struct _GList
+struct _GArray
{
- gpointer data;
- GList *next;
- GList *prev;
+ gchar *data;
+ guint len;
};
-struct _GSList
+struct _GByteArray
{
- gpointer data;
- GSList *next;
+ guint8 *data;
+ guint len;
};
-struct _GStack
+struct _GDebugKey
{
- GList *list;
+ gchar *key;
+ guint value;
};
-struct _GQueue
+struct _GList
{
- GList *list;
- GList *list_end;
- guint list_size;
+ gpointer data;
+ GList *next;
+ GList *prev;
};
-struct _GString
+struct _GPtrArray
{
- gchar *str;
- gint len;
+ gpointer *pdata;
+ guint len;
};
-struct _GArray
+struct _GQueue
{
- gchar *data;
- guint len;
+ GList *head;
+ GList *tail;
+ guint length;
};
-struct _GByteArray
+struct _GSList
{
- guint8 *data;
- guint len;
+ gpointer data;
+ GSList *next;
};
-struct _GPtrArray
+struct _GString
{
- gpointer *pdata;
- guint len;
+ gchar *str;
+ gint len;
};
-struct _GTuples
+struct _GTrashStack
{
- guint len;
+ GTrashStack *next;
};
-struct _GDebugKey
+struct _GTuples
{
- gchar *key;
- guint value;
+ guint len;
};
GCompareFunc func);
GList* g_list_concat (GList *list1,
GList *list2);
-GList* g_list_delete (GList *list,
- GList *link);
GList* g_list_remove (GList *list,
gpointer data);
GList* g_list_remove_link (GList *list,
GList *llink);
+GList* g_list_delete_link (GList *list,
+ GList *link);
GList* g_list_reverse (GList *list);
GList* g_list_copy (GList *list);
GList* g_list_nth (GList *list,
GSList* g_slist_remove (GSList *list,
gpointer data);
GSList* g_slist_remove_link (GSList *list,
- GSList *llink);
+ GSList *link);
+GSList* g_slist_delete_link (GSList *list,
+ GSList *link);
GSList* g_slist_reverse (GSList *list);
GSList* g_slist_copy (GSList *list);
GSList* g_slist_nth (GSList *list,
GCompareFunc compare_func);
gpointer g_slist_nth_data (GSList *list,
guint n);
-#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
-
-
-/* Stacks
- */
-
-GStack * g_stack_new (void);
-void g_stack_free (GStack *stack);
-gpointer g_stack_pop (GStack *stack);
-
-#define g_stack_empty(stack) \
- ((((GStack *)(stack)) && ((GStack *)(stack))->list) ? FALSE : TRUE)
-
-#define g_stack_peek(stack) \
- ((((GStack *)(stack)) && ((GStack *)(stack))->list) ? \
- ((GStack *)(stack))->list->data : NULL)
-
-#define g_stack_index(stack,ptr) \
- ((((GStack *)(stack)) && ((GStack *)(stack))->list) ? \
- g_list_index (((GStack *)(stack))->list, (ptr)) : -1)
-
-#define g_stack_push(stack,data) G_STMT_START { \
- if ((GStack *)(stack)) \
- ((GStack *)(stack))->list = \
- g_list_prepend (((GStack *)(stack))->list, (data)); \
- } G_STMT_END
-
+#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
/* Queues
*/
-
-GQueue * g_queue_new (void);
-void g_queue_free (GQueue *q);
-guint g_queue_get_size (GQueue *q);
-void g_queue_push_front (GQueue *q, gpointer data);
-void g_queue_push_back (GQueue *q, gpointer data);
-gpointer g_queue_pop_front (GQueue *q);
-gpointer g_queue_pop_back (GQueue *q);
-
-#define g_queue_empty(queue) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? FALSE : TRUE)
-
-#define g_queue_peek_front(queue) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? \
- ((GQueue *)(queue))->list->data : NULL)
-
-#define g_queue_peek_back(queue) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list_end) ? \
- ((GQueue *)(queue))->list_end->data : NULL)
-
-#define g_queue_index(queue,ptr) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? \
- g_list_index (((GQueue *)(queue))->list, (ptr)) : -1)
-
-#define g_queue_push g_queue_push_back
-#define g_queue_pop g_queue_pop_front
-#define g_queue_peek g_queue_peek_front
-
-
-
+GQueue* g_queue_create (void);
+void g_queue_free (GQueue *queue);
+void g_queue_push_head (GQueue *queue,
+ gpointer data);
+void g_queue_push_tail (GQueue *queue,
+ gpointer data);
+gpointer g_queue_pop_head (GQueue *queue);
+gpointer g_queue_pop_tail (GQueue *queue);
+gboolean g_queue_is_empty (GQueue *queue);
+gpointer g_queue_peek_head (GQueue *queue);
+gpointer g_queue_peek_tail (GQueue *queue);
+void g_queue_push_head_link (GQueue *queue,
+ GList *link);
+void g_queue_push_tail_link (GQueue *queue,
+ GList *link);
+GList* g_queue_pop_head_link (GQueue *queue);
+GList* g_queue_pop_tail_link (GQueue *queue);
/* Hash tables
...); /* NULL terminated */
gchar* g_strjoin (const gchar *separator,
...); /* NULL terminated */
-/* Return a duplicate of the string with \ and " characters escaped by
- * a \. The returned string should be freed with g_free().
- */
+/* deprecated function */
gchar* g_strescape (gchar *string);
gpointer g_memdup (gconstpointer mem,
}
#endif /* G_CAN_INLINE */
+
+/* Trash Stacks
+ * elements need to be >= sizeof (gpointer)
+ */
+G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
+ gpointer data_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC void
+g_trash_stack_push (GTrashStack **stack_p,
+ gpointer data_p)
+{
+ GTrashStack *data = data_p;
+
+ data->next = *stack_p;
+ *stack_p = data;
+}
+#endif /* G_CAN_INLINE */
+
+G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC gpointer
+g_trash_stack_pop (GTrashStack **stack_p)
+{
+ GTrashStack *data;
+
+ data = *stack_p;
+ if (data)
+ {
+ *stack_p = data->next;
+ memset (data, 0, sizeof (GTrashStack));
+ }
+
+ return data;
+}
+#endif /* G_CAN_INLINE */
+
+G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC gpointer
+g_trash_stack_peek (GTrashStack **stack_p)
+{
+ GTrashStack *data;
+
+ data = *stack_p;
+
+ return data;
+}
+#endif /* G_CAN_INLINE */
+
+G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC guint
+g_trash_stack_height (GTrashStack **stack_p)
+{
+ GTrashStack *data;
+ guint i = 0;
+
+ for (data = *stack_p; data; data = data->next)
+ i++;
+
+ return i;
+}
+#endif /* G_CAN_INLINE */
+
+
/* String Chunks
*/
GStringChunk* g_string_chunk_new (gint size);
/* Strings
*/
-typedef enum
-{
- G_STRING_ERROR_NONE, /* No error occurred */
- G_STRING_ERROR_INVAL, /* Invalid input value to function */
- G_STRING_ERROR_READ, /* read() returned an error - check errno */
- G_STRING_ERROR_NODATA, /* No more input data - result string may contain data */
- G_STRING_ERROR_LENGTH /* max_length reached */
-} GStringError;
-
-#define g_string_length(fstring) (fstring ? fstring->len : 0)
-#define g_string_str(fstring) (fstring ? fstring->str : NULL)
-#define g_string_char(fstring, n) (fstring->str[n])
-
-#define g_string_copy(a,b) (g_string_assign(a, b->str))
-#define g_string_dup(fstring) (fstring ? g_string_new(fstring->str) :\
- g_string_new(NULL))
-
-#define g_string_cmp(a,b) (strcmp(g_string_str(a), \
- g_string_str(b)))
-#define g_string_ncmp(a,b,n) (strncmp(g_string_str(a), \
- g_string_str(b), n))
-#define g_string_casecmp(a,b) (g_strcasecmp(g_string_str(a), \
- g_string_str(b)))
-#define g_string_ncasecmp(a,b,n) (g_strncasecmp(g_string_str(a), \
- g_string_str(b), n))
-
-#define g_string_strcmp(a,b) (strcmp(g_string_str(a), b))
-#define g_string_strcasecmp(a,b) (g_strcasecmp(g_string_str(a), b))
-#define g_string_strncasecmp(a,b,n) (g_strncasecmp(g_string_str(a), b, n))
-
GString* g_string_new (const gchar *init);
GString* g_string_sized_new (guint dfl_size);
void g_string_free (GString *string,
void g_string_sprintfa (GString *string,
const gchar *format,
...) G_GNUC_PRINTF (2, 3);
-GStringError g_string_readline (GString *dest_str,
- gint max_length,
- gint fd);
-GStringError g_string_readline_buffered (GString *dest_str,
- GString *buff_str,
- gint max_length,
- gint fd,
- gint match_bare_cr);
-GList* g_string_tokenise (GString *string,
- gchar *delims,
- gint max_tokens,
- gint allow_empty);
-void g_string_tokenise_free (GList *tokens,
- gint free_token);
/* Resizable arrays, remove fills any cleared spot and shortens the
const gchar *format,
GDate *date);
+
/* GRelation
*
* Indexed Relations. Imagine a really simple table in a
{
gboolean (*prepare) (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
gboolean (*check) (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
gboolean (*dispatch) (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
# Note that this is NOT a relocatable package
%define ver @VERSION@
-%define rel SNAP
+%define rel 1
%define prefix /usr
Summary: Handy library of utility functions
grand.c \
gscanner.c \
gslist.c \
- gstack.c \
gstrfuncs.c \
gstring.c \
gthread.c \
query3);
fflush (stdout);
- fgets (buf, 8, stdin);
+#ifndef NATIVE_WIN32
+ if (isatty(0) && isatty(1))
+ fgets (buf, 8, stdin);
+ else
+ strcpy (buf, "E\n");
+#else
+ fgets (buf, 8, stdin);
+#endif
if ((buf[0] == 'E' || buf[0] == 'e')
&& buf[1] == '\n')
* MT safe
*/
+#define DEBUG_MSG(x) /* */
+#ifdef G_ENABLE_DEBUG
+/* #define DEBUG_MSG(args) g_message args ; */
+#endif
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
{
gchar num[4][NUM_LEN+1];
gint i;
- const gchar *s;
+ const guchar *s;
/* We count 4, but store 3; so we can give an error
* if there are 4.
}
#ifdef G_ENABLE_DEBUG
-# if 0
- g_message ("**GDate prepared a new set of locale-specific parse rules.");
-# endif
+ DEBUG_MSG (("**GDate prepared a new set of locale-specific parse rules."));
i = 1;
while (i < 13)
{
-# if 0
- g_message (" %s %s", long_month_names[i], short_month_names[i]);
-# endif
+ DEBUG_MSG ((" %s %s", long_month_names[i], short_month_names[i]));
++i;
}
if (using_twodigit_years)
- {
-# if 0
- g_message ("**Using twodigit years with cutoff year: %u", twodigit_start_year);
-# endif
- }
+ DEBUG_MSG (("**Using twodigit years with cutoff year: %u", twodigit_start_year));
{
gchar *strings[3];
i = 0;
}
++i;
}
-# if 0
- g_message ("**Order: %s, %s, %s", strings[0], strings[1], strings[2]);
- g_message ("**Sample date in this locale: `%s'", buf);
-# endif
+ DEBUG_MSG (("**Order: %s, %s, %s", strings[0], strings[1], strings[2]));
+ DEBUG_MSG (("**Sample date in this locale: `%s'", buf));
}
#endif
}
g_date_prepare_to_parse (str, &pt);
-#ifdef G_ENABLE_DEBUG
-# if 0
- g_message ("Found %d ints, `%d' `%d' `%d' and written out month %d",
- pt.num_ints, pt.n[0], pt.n[1], pt.n[2], pt.month);
-# endif
-#endif
+ DEBUG_MSG (("Found %d ints, `%d' `%d' `%d' and written out month %d",
+ pt.num_ints, pt.n[0], pt.n[1], pt.n[2], pt.month));
if (pt.num_ints == 4)
}
#ifdef G_ENABLE_DEBUG
else
- g_message ("Rejected DMY %u %u %u", day, m, y);
+ DEBUG_MSG (("Rejected DMY %u %u %u", day, m, y));
#endif
G_UNLOCK (g_date_global);
}
query3);
fflush (stdout);
- fgets (buf, 8, stdin);
+#ifndef NATIVE_WIN32
+ if (isatty(0) && isatty(1))
+ fgets (buf, 8, stdin);
+ else
+ strcpy (buf, "E\n");
+#else
+ fgets (buf, 8, stdin);
+#endif
if ((buf[0] == 'E' || buf[0] == 'e')
&& buf[1] == '\n')
GDestroyNotify notify);
static gboolean g_io_unix_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_io_unix_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_io_unix_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
static gboolean
g_io_unix_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
*timeout = -1;
return FALSE;
static gboolean
g_io_unix_check (gpointer source_data,
- GTimeVal *current_time)
+ GTimeVal *current_time,
+ gpointer user_data)
{
GIOUnixWatch *data = source_data;
g_list_append
g_list_concat
g_list_copy
- g_list_delete
g_list_find
g_list_find_custom
g_list_first
g_quark_from_string
g_quark_to_string
g_quark_try_string
- g_queue_free
- g_queue_get_size
- g_queue_new
- g_queue_pop_back
- g_queue_pop_front
- g_queue_push_back
- g_queue_push_front
g_rand_double
g_rand_double_range
g_rand_free
g_source_remove
g_source_remove_by_source_data
g_source_remove_by_user_data
- g_stack_free
- g_stack_new
- g_stack_pop
g_static_mutex_get_mutex_impl
g_static_private_get
g_static_private_set
* And it provides a way to store and retrieve a `gint' in/from a `gpointer'.
* This is useful to pass an integer instead of a pointer to a callback.
*
- * GINT_TO_POINTER(i), GUINT_TO_POINTER(i)
- * GPOINTER_TO_INT(p), GPOINTER_TO_UINT(p)
+ * GINT_TO_POINTER (i), GUINT_TO_POINTER (i)
+ * GPOINTER_TO_INT (p), GPOINTER_TO_UINT (p)
*
- * Finally, it provide the following wrappers to STDC functions:
+ * Finally, it provides the following wrappers to STDC functions:
*
- * g_ATEXIT
- * To register hooks which are executed on exit().
- * Usually a wrapper for STDC atexit.
- *
- * void g_memmove(gpointer dest, gconstpointer void *src, gulong count);
+ * void g_memmove (gpointer dest, gconstpointer void *src, gulong count);
* A wrapper for STDC memmove, or an implementation, if memmove doesn't
* exist. The prototype looks like the above, give or take a const,
* or size_t.
* macros, so we can refer to them as strings unconditionally.
*/
#ifdef __GNUC__
-#define G_GNUC_FUNCTION (__FUNCTION__)
-#define G_GNUC_PRETTY_FUNCTION (__PRETTY_FUNCTION__)
+#define G_GNUC_FUNCTION __FUNCTION__
+#define G_GNUC_PRETTY_FUNCTION __PRETTY_FUNCTION__
#else /* !__GNUC__ */
-#define G_GNUC_FUNCTION ("")
-#define G_GNUC_PRETTY_FUNCTION ("")
+#define G_GNUC_FUNCTION ""
+#define G_GNUC_PRETTY_FUNCTION ""
#endif /* !__GNUC__ */
/* we try to provide a usefull equivalent for ATEXIT if it is
typedef struct _GScanner GScanner;
typedef struct _GScannerConfig GScannerConfig;
typedef struct _GSList GSList;
-typedef struct _GStack GStack;
typedef struct _GString GString;
typedef struct _GStringChunk GStringChunk;
typedef struct _GTimer GTimer;
+typedef struct _GTrashStack GTrashStack;
typedef struct _GTree GTree;
typedef struct _GTuples GTuples;
typedef union _GTokenValue GTokenValue;
typedef struct _GIOChannel GIOChannel;
+/* Tree traverse flags */
typedef enum
{
G_TRAVERSE_LEAFS = 1 << 0,
G_TRAVERSE_MASK = 0x03
} GTraverseFlags;
+/* Tree traverse orders */
typedef enum
{
G_IN_ORDER,
typedef void (*GVoidFunc) (void);
-struct _GList
+struct _GArray
{
- gpointer data;
- GList *next;
- GList *prev;
+ gchar *data;
+ guint len;
};
-struct _GSList
+struct _GByteArray
{
- gpointer data;
- GSList *next;
+ guint8 *data;
+ guint len;
};
-struct _GStack
+struct _GDebugKey
{
- GList *list;
+ gchar *key;
+ guint value;
};
-struct _GQueue
+struct _GList
{
- GList *list;
- GList *list_end;
- guint list_size;
+ gpointer data;
+ GList *next;
+ GList *prev;
};
-struct _GString
+struct _GPtrArray
{
- gchar *str;
- gint len;
+ gpointer *pdata;
+ guint len;
};
-struct _GArray
+struct _GQueue
{
- gchar *data;
- guint len;
+ GList *head;
+ GList *tail;
+ guint length;
};
-struct _GByteArray
+struct _GSList
{
- guint8 *data;
- guint len;
+ gpointer data;
+ GSList *next;
};
-struct _GPtrArray
+struct _GString
{
- gpointer *pdata;
- guint len;
+ gchar *str;
+ gint len;
};
-struct _GTuples
+struct _GTrashStack
{
- guint len;
+ GTrashStack *next;
};
-struct _GDebugKey
+struct _GTuples
{
- gchar *key;
- guint value;
+ guint len;
};
GCompareFunc func);
GList* g_list_concat (GList *list1,
GList *list2);
-GList* g_list_delete (GList *list,
- GList *link);
GList* g_list_remove (GList *list,
gpointer data);
GList* g_list_remove_link (GList *list,
GList *llink);
+GList* g_list_delete_link (GList *list,
+ GList *link);
GList* g_list_reverse (GList *list);
GList* g_list_copy (GList *list);
GList* g_list_nth (GList *list,
GSList* g_slist_remove (GSList *list,
gpointer data);
GSList* g_slist_remove_link (GSList *list,
- GSList *llink);
+ GSList *link);
+GSList* g_slist_delete_link (GSList *list,
+ GSList *link);
GSList* g_slist_reverse (GSList *list);
GSList* g_slist_copy (GSList *list);
GSList* g_slist_nth (GSList *list,
GCompareFunc compare_func);
gpointer g_slist_nth_data (GSList *list,
guint n);
-#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
-
-
-/* Stacks
- */
-
-GStack * g_stack_new (void);
-void g_stack_free (GStack *stack);
-gpointer g_stack_pop (GStack *stack);
-
-#define g_stack_empty(stack) \
- ((((GStack *)(stack)) && ((GStack *)(stack))->list) ? FALSE : TRUE)
-
-#define g_stack_peek(stack) \
- ((((GStack *)(stack)) && ((GStack *)(stack))->list) ? \
- ((GStack *)(stack))->list->data : NULL)
-
-#define g_stack_index(stack,ptr) \
- ((((GStack *)(stack)) && ((GStack *)(stack))->list) ? \
- g_list_index (((GStack *)(stack))->list, (ptr)) : -1)
-
-#define g_stack_push(stack,data) G_STMT_START { \
- if ((GStack *)(stack)) \
- ((GStack *)(stack))->list = \
- g_list_prepend (((GStack *)(stack))->list, (data)); \
- } G_STMT_END
-
+#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
/* Queues
*/
-
-GQueue * g_queue_new (void);
-void g_queue_free (GQueue *q);
-guint g_queue_get_size (GQueue *q);
-void g_queue_push_front (GQueue *q, gpointer data);
-void g_queue_push_back (GQueue *q, gpointer data);
-gpointer g_queue_pop_front (GQueue *q);
-gpointer g_queue_pop_back (GQueue *q);
-
-#define g_queue_empty(queue) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? FALSE : TRUE)
-
-#define g_queue_peek_front(queue) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? \
- ((GQueue *)(queue))->list->data : NULL)
-
-#define g_queue_peek_back(queue) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list_end) ? \
- ((GQueue *)(queue))->list_end->data : NULL)
-
-#define g_queue_index(queue,ptr) \
- ((((GQueue *)(queue)) && ((GQueue *)(queue))->list) ? \
- g_list_index (((GQueue *)(queue))->list, (ptr)) : -1)
-
-#define g_queue_push g_queue_push_back
-#define g_queue_pop g_queue_pop_front
-#define g_queue_peek g_queue_peek_front
-
-
-
+GQueue* g_queue_create (void);
+void g_queue_free (GQueue *queue);
+void g_queue_push_head (GQueue *queue,
+ gpointer data);
+void g_queue_push_tail (GQueue *queue,
+ gpointer data);
+gpointer g_queue_pop_head (GQueue *queue);
+gpointer g_queue_pop_tail (GQueue *queue);
+gboolean g_queue_is_empty (GQueue *queue);
+gpointer g_queue_peek_head (GQueue *queue);
+gpointer g_queue_peek_tail (GQueue *queue);
+void g_queue_push_head_link (GQueue *queue,
+ GList *link);
+void g_queue_push_tail_link (GQueue *queue,
+ GList *link);
+GList* g_queue_pop_head_link (GQueue *queue);
+GList* g_queue_pop_tail_link (GQueue *queue);
/* Hash tables
...); /* NULL terminated */
gchar* g_strjoin (const gchar *separator,
...); /* NULL terminated */
-/* Return a duplicate of the string with \ and " characters escaped by
- * a \. The returned string should be freed with g_free().
- */
+/* deprecated function */
gchar* g_strescape (gchar *string);
gpointer g_memdup (gconstpointer mem,
}
#endif /* G_CAN_INLINE */
+
+/* Trash Stacks
+ * elements need to be >= sizeof (gpointer)
+ */
+G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
+ gpointer data_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC void
+g_trash_stack_push (GTrashStack **stack_p,
+ gpointer data_p)
+{
+ GTrashStack *data = data_p;
+
+ data->next = *stack_p;
+ *stack_p = data;
+}
+#endif /* G_CAN_INLINE */
+
+G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC gpointer
+g_trash_stack_pop (GTrashStack **stack_p)
+{
+ GTrashStack *data;
+
+ data = *stack_p;
+ if (data)
+ {
+ *stack_p = data->next;
+ memset (data, 0, sizeof (GTrashStack));
+ }
+
+ return data;
+}
+#endif /* G_CAN_INLINE */
+
+G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC gpointer
+g_trash_stack_peek (GTrashStack **stack_p)
+{
+ GTrashStack *data;
+
+ data = *stack_p;
+
+ return data;
+}
+#endif /* G_CAN_INLINE */
+
+G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
+#ifdef G_CAN_INLINE
+G_INLINE_FUNC guint
+g_trash_stack_height (GTrashStack **stack_p)
+{
+ GTrashStack *data;
+ guint i = 0;
+
+ for (data = *stack_p; data; data = data->next)
+ i++;
+
+ return i;
+}
+#endif /* G_CAN_INLINE */
+
+
/* String Chunks
*/
GStringChunk* g_string_chunk_new (gint size);
/* Strings
*/
-typedef enum
-{
- G_STRING_ERROR_NONE, /* No error occurred */
- G_STRING_ERROR_INVAL, /* Invalid input value to function */
- G_STRING_ERROR_READ, /* read() returned an error - check errno */
- G_STRING_ERROR_NODATA, /* No more input data - result string may contain data */
- G_STRING_ERROR_LENGTH /* max_length reached */
-} GStringError;
-
-#define g_string_length(fstring) (fstring ? fstring->len : 0)
-#define g_string_str(fstring) (fstring ? fstring->str : NULL)
-#define g_string_char(fstring, n) (fstring->str[n])
-
-#define g_string_copy(a,b) (g_string_assign(a, b->str))
-#define g_string_dup(fstring) (fstring ? g_string_new(fstring->str) :\
- g_string_new(NULL))
-
-#define g_string_cmp(a,b) (strcmp(g_string_str(a), \
- g_string_str(b)))
-#define g_string_ncmp(a,b,n) (strncmp(g_string_str(a), \
- g_string_str(b), n))
-#define g_string_casecmp(a,b) (g_strcasecmp(g_string_str(a), \
- g_string_str(b)))
-#define g_string_ncasecmp(a,b,n) (g_strncasecmp(g_string_str(a), \
- g_string_str(b), n))
-
-#define g_string_strcmp(a,b) (strcmp(g_string_str(a), b))
-#define g_string_strcasecmp(a,b) (g_strcasecmp(g_string_str(a), b))
-#define g_string_strncasecmp(a,b,n) (g_strncasecmp(g_string_str(a), b, n))
-
GString* g_string_new (const gchar *init);
GString* g_string_sized_new (guint dfl_size);
void g_string_free (GString *string,
void g_string_sprintfa (GString *string,
const gchar *format,
...) G_GNUC_PRINTF (2, 3);
-GStringError g_string_readline (GString *dest_str,
- gint max_length,
- gint fd);
-GStringError g_string_readline_buffered (GString *dest_str,
- GString *buff_str,
- gint max_length,
- gint fd,
- gint match_bare_cr);
-GList* g_string_tokenise (GString *string,
- gchar *delims,
- gint max_tokens,
- gint allow_empty);
-void g_string_tokenise_free (GList *tokens,
- gint free_token);
/* Resizable arrays, remove fills any cleared spot and shortens the
const gchar *format,
GDate *date);
+
/* GRelation
*
* Indexed Relations. Imagine a really simple table in a
{
gboolean (*prepare) (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
gboolean (*check) (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
gboolean (*dispatch) (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
G_UNLOCK (current_allocator);
}
-GList*
+inline GList*
g_list_alloc (void)
{
GList *list;
}
}
-void
+inline void
g_list_free_1 (GList *list)
{
if (list)
return list;
}
-GList*
+inline GList*
g_list_remove_link (GList *list,
GList *link)
{
return list;
}
-
GList*
-g_list_delete (GList *list, GList *link)
+g_list_delete_link (GList *list,
+ GList *link)
{
list = g_list_remove_link (list, link);
g_list_free_1 (link);
return list;
}
-
GList*
g_list_copy (GList *list)
{
#include "config.h"
+/* uncomment the next line to get poll() debugging info */
+/* #define G_MAIN_POLL_DEBUG */
+
+
+
#include "glib.h"
#include <sys/types.h>
#include <time.h>
gint priority);
static void g_main_add_poll_unlocked (gint priority,
GPollFD *fd);
+static void g_main_wakeup (void);
static gboolean g_timeout_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_timeout_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_timeout_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
static gboolean g_idle_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_idle_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_idle_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
#endif /* NATIVE_WIN32 */
static GPollFD wake_up_rec;
static gboolean poll_waiting = FALSE;
+
+/* Flag indicating whether the set of fd's changed during a poll */
+static gboolean poll_changed = FALSE;
#endif /* G_THREADS_ENABLED */
#ifdef HAVE_POLL
+/* SunOS has poll, but doesn't provide a prototype. */
+# if defined (sun) && !defined (__SVR4)
+extern gint poll (GPollFD *ufds, guint nfsd, gint timeout);
+# endif /* !sun */
static GPollFunc poll_func = (GPollFunc) poll;
#else /* !HAVE_POLL */
#ifdef NATIVE_WIN32
#ifndef NO_FD_SET
# define SELECT_MASK fd_set
#else /* !NO_FD_SET */
+# ifndef _AIX
+typedef long fd_mask;
+# endif /* _AIX */
# ifdef _IBMR2
# define SELECT_MASK void
# else /* !_IBMR2 */
#ifdef G_THREADS_ENABLED
/* Now wake up the main loop if it is waiting in the poll() */
-
- if (poll_waiting)
- {
- poll_waiting = FALSE;
-#ifndef NATIVE_WIN32
- write (wake_up_pipe[1], "A", 1);
-#else
- ReleaseSemaphore (wake_up_semaphore, 1, NULL);
-#endif
- }
+ g_main_wakeup ();
#endif
+
G_UNLOCK (main_loop);
return return_val;
g_get_current_time (¤t_time);
G_LOCK (main_loop);
+
+#ifdef G_THREADS_ENABLED
+ if (poll_waiting)
+ {
+ g_warning("g_main_iterate(): main loop already active in another thread");
+ G_UNLOCK (main_loop);
+ return FALSE;
+ }
+#endif G_THREADS_ENABLED
/* If recursing, finish up current dispatch, before starting over */
if (pending_dispatches)
hook = g_hook_first_valid (&source_list, TRUE);
while (hook)
{
- GSource *source = (GSource *)hook;
+ GSource *source = (GSource*) hook;
gint source_timeout = -1;
if ((n_ready > 0) && (source->priority > current_priority))
{
gboolean (*prepare) (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
prepare = ((GSourceFuncs *) hook->func)->prepare;
in_check_or_prepare++;
G_UNLOCK (main_loop);
- if ((*prepare) (source->source_data, ¤t_time, &source_timeout))
+ if ((*prepare) (source->source_data, ¤t_time, &source_timeout, source->hook.data))
hook->flags |= G_SOURCE_READY;
G_LOCK (main_loop);
if (!(hook->flags & G_SOURCE_READY))
{
gboolean (*check) (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
check = ((GSourceFuncs *) hook->func)->check;
in_check_or_prepare++;
G_UNLOCK (main_loop);
- if ((*check) (source->source_data, ¤t_time))
+ if ((*check) (source->source_data, ¤t_time, source->hook.data))
hook->flags |= G_SOURCE_READY;
G_LOCK (main_loop);
hook = g_hook_next_valid (&source_list, hook, TRUE);
}
-
+
/* Now invoke the callbacks */
if (pending_dispatches)
"prepare() member or from a second thread, iteration not possible");
return;
}
-
+
loop->is_running = TRUE;
while (loop->is_running)
g_main_iterate (TRUE, TRUE);
gboolean use_priority,
gint priority)
{
+#ifdef G_MAIN_POLL_DEBUG
+ GTimer *poll_timer;
+#endif
GPollFD *fd_array;
GPollRec *pollrec;
-
gint i;
gint npoll;
+
#ifdef G_THREADS_ENABLED
#ifndef NATIVE_WIN32
if (wake_up_pipe[0] < 0)
i = 0;
while (pollrec && (!use_priority || priority >= pollrec->priority))
{
- fd_array[i].fd = pollrec->fd->fd;
- fd_array[i].events = pollrec->fd->events;
- fd_array[i].revents = 0;
-
+ if (pollrec->fd->events)
+ {
+ fd_array[i].fd = pollrec->fd->fd;
+ /* In direct contradiction to the Unix98 spec, IRIX runs into
+ * difficulty if you pass in POLLERR, POLLHUP or POLLNVAL
+ * flags in the events field of the pollfd while it should
+ * just ignoring them. So we mask them out here.
+ */
+ fd_array[i].events = pollrec->fd->events & ~(G_IO_ERR|G_IO_HUP|G_IO_NVAL);
+ fd_array[i].revents = 0;
+ i++;
+ }
+
pollrec = pollrec->next;
- i++;
}
#ifdef G_THREADS_ENABLED
poll_waiting = TRUE;
+ poll_changed = FALSE;
#endif
- G_UNLOCK (main_loop);
+
npoll = i;
- (*poll_func) (fd_array, npoll, timeout);
- G_LOCK (main_loop);
-
+ if (npoll || timeout != 0)
+ {
+#ifdef G_MAIN_POLL_DEBUG
+ g_print ("g_main_poll(%d) timeout: %d\r", npoll, timeout);
+ poll_timer = g_timer_new ();
+#endif
+
+ G_UNLOCK (main_loop);
+ (*poll_func) (fd_array, npoll, timeout);
+ G_LOCK (main_loop);
+
+#ifdef G_MAIN_POLL_DEBUG
+ g_print ("g_main_poll(%d) timeout: %d - elapsed %12.10f seconds",
+ npoll,
+ timeout,
+ g_timer_elapsed (poll_timer, NULL));
+ g_timer_destroy (poll_timer);
+ pollrec = poll_records;
+ i = 0;
+ while (i < npoll)
+ {
+ if (pollrec->fd->events)
+ {
+ if (fd_array[i].revents)
+ {
+ g_print (" [%d:", fd_array[i].fd);
+ if (fd_array[i].revents & G_IO_IN)
+ g_print ("i");
+ if (fd_array[i].revents & G_IO_OUT)
+ g_print ("o");
+ if (fd_array[i].revents & G_IO_PRI)
+ g_print ("p");
+ if (fd_array[i].revents & G_IO_ERR)
+ g_print ("e");
+ if (fd_array[i].revents & G_IO_HUP)
+ g_print ("h");
+ if (fd_array[i].revents & G_IO_NVAL)
+ g_print ("n");
+ g_print ("]");
+ }
+ i++;
+ }
+ pollrec = pollrec->next;
+ }
+ g_print ("\n");
+#endif
+ } /* if (npoll || timeout != 0) */
+
#ifdef G_THREADS_ENABLED
if (!poll_waiting)
{
}
else
poll_waiting = FALSE;
+
+ /* If the set of poll file descriptors changed, bail out
+ * and let the main loop rerun
+ */
+ if (poll_changed)
+ {
+ g_free (fd_array);
+ return;
+ }
#endif
pollrec = poll_records;
i = 0;
while (i < npoll)
{
- pollrec->fd->revents = fd_array[i].revents;
+ if (pollrec->fd->events)
+ {
+ pollrec->fd->revents = fd_array[i].revents;
+ i++;
+ }
pollrec = pollrec->next;
- i++;
}
g_free (fd_array);
newrec->next = pollrec;
n_poll_records++;
+
+#ifdef G_THREADS_ENABLED
+ poll_changed = TRUE;
+
+ /* Now wake up the main loop if it is waiting in the poll() */
+ g_main_wakeup ();
+#endif
}
void
pollrec = pollrec->next;
}
+#ifdef G_THREADS_ENABLED
+ poll_changed = TRUE;
+
+ /* Now wake up the main loop if it is waiting in the poll() */
+ g_main_wakeup ();
+#endif
+
G_UNLOCK (main_loop);
}
#endif
}
+/* Wake the main loop up from a poll() */
+static void
+g_main_wakeup (void)
+{
+#ifdef G_THREADS_ENABLED
+ if (poll_waiting)
+ {
+ poll_waiting = FALSE;
+#ifndef NATIVE_WIN32
+ write (wake_up_pipe[1], "A", 1);
+#else
+ ReleaseSemaphore (wake_up_semaphore, 1, NULL);
+#endif
+ }
+#endif
+}
+
/* Timeouts */
static gboolean
-g_timeout_prepare (gpointer source_data,
+g_timeout_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
glong msec;
GTimeoutData *data = source_data;
}
static gboolean
-g_timeout_check (gpointer source_data,
- GTimeVal *current_time)
+g_timeout_check (gpointer source_data,
+ GTimeVal *current_time,
+ gpointer user_data)
{
GTimeoutData *data = source_data;
/* Idle functions */
static gboolean
-g_idle_prepare (gpointer source_data,
+g_idle_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
timeout = 0;
return TRUE;
static gboolean
g_idle_check (gpointer source_data,
- GTimeVal *current_time)
+ GTimeVal *current_time,
+ gpointer user_data)
{
return TRUE;
}
#if defined(ENABLE_MEM_PROFILE) && defined(ENABLE_MEM_PROFILE_EXCLUDES_MEM_CHUNKS)
#define ENTER_MEM_CHUNK_ROUTINE() \
- g_static_set (allocating_for_mem_chunk, \
- g_static_get (allocating_for_mem_chunk) + 1)
+ g_private_set (allocating_for_mem_chunk, \
+ g_private_get (allocating_for_mem_chunk) + 1)
#define LEAVE_MEM_CHUNK_ROUTINE() \
- g_static_set (allocating_for_mem_chunk, \
- g_static_get (allocating_for_mem_chunk) - 1)
+ g_private_set (allocating_for_mem_chunk, \
+ g_private_get (allocating_for_mem_chunk) - 1)
#else
#define ENTER_MEM_CHUNK_ROUTINE()
#define LEAVE_MEM_CHUNK_ROUTINE()
static gulong freed_mem = 0;
static GPrivate* allocating_for_mem_chunk = NULL;
#define IS_IN_MEM_CHUNK_ROUTINE() \
- GPOINTER_TO_UINT (g_static_get (allocating_for_mem_chunk))
+ GPOINTER_TO_UINT (g_private_get (allocating_for_mem_chunk))
#endif /* ENABLE_MEM_PROFILE */
/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1999 Free Software Foundation, Inc.
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * GQueue: Double ended queue implementation, piggy backed on GList.
+ * Copyright (C) 1998 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* Boston, MA 02111-1307, USA.
*/
+/*
+ * MT safe
+ */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include "glib.h"
-#include <glib.h>
+G_LOCK_DEFINE_STATIC (queue_memchunk);
+static GMemChunk *queue_memchunk = NULL;
+static GTrashStack *free_queue_nodes = NULL;
+GQueue*
+g_queue_create (void)
+{
+ GQueue *queue;
+ G_LOCK (queue_memchunk);
+ queue = g_trash_stack_pop (&free_queue_nodes);
-GQueue *
-g_queue_new (void)
-{
- GQueue *q = g_new (GQueue, 1);
+ if (!queue)
+ {
+ if (!queue_memchunk)
+ queue_memchunk = g_mem_chunk_new ("GLib GQueue chunk",
+ sizeof (GNode),
+ sizeof (GNode) * 128,
+ G_ALLOC_ONLY);
+ queue = g_chunk_new (GQueue, queue_memchunk);
+ }
+ G_UNLOCK (queue_memchunk);
- q->list = q->list_end = NULL;
- q->list_size = 0;
+ queue->head = NULL;
+ queue->tail = NULL;
+ queue->length = 0;
- return q;
+ return queue;
}
-
void
-g_queue_free (GQueue *q)
+g_queue_free (GQueue *queue)
{
- if (q)
- {
- if (q->list)
- g_list_free (q->list);
- g_free (q);
- }
-}
+ g_return_if_fail (queue != NULL);
+ g_list_free (queue->head);
-guint
-g_queue_get_size (GQueue *q)
-{
- return (q == NULL) ? 0 : q->list_size;
+ G_LOCK (queue_memchunk);
+ g_trash_stack_push (&free_queue_nodes, queue);
+ G_UNLOCK (queue_memchunk);
}
-
void
-g_queue_push_front (GQueue *q, gpointer data)
+g_queue_push_head (GQueue *queue,
+ gpointer data)
{
- if (q)
- {
- q->list = g_list_prepend (q->list, data);
+ g_return_if_fail (queue != NULL);
- if (q->list_end == NULL)
- q->list_end = q->list;
+ queue->head = g_list_prepend (queue->head, data);
+ if (!queue->tail)
+ queue->tail = queue->head;
+ queue->length++;
+}
- q->list_size++;
- }
+void
+g_queue_push_head_link (GQueue *queue,
+ GList *link)
+{
+ g_return_if_fail (queue != NULL);
+ g_return_if_fail (link != NULL);
+ g_return_if_fail (link->prev != NULL);
+ g_return_if_fail (link->next != NULL);
+
+ link->next = queue->head;
+ if (queue->head)
+ queue->head->prev = link;
+ else
+ queue->tail = link;
+ queue->head = link;
+ queue->length++;
}
+void
+g_queue_push_tail (GQueue *queue,
+ gpointer data)
+{
+ g_return_if_fail (queue != NULL);
+
+ queue->tail = g_list_append (queue->tail, data);
+ if (queue->tail->next)
+ queue->tail = queue->tail->next;
+ else
+ queue->head = queue->tail;
+ queue->length++;
+}
void
-g_queue_push_back (GQueue *q, gpointer data)
+g_queue_push_tail_link (GQueue *queue,
+ GList *link)
{
- if (q)
+ g_return_if_fail (queue != NULL);
+ g_return_if_fail (link != NULL);
+ g_return_if_fail (link->prev != NULL);
+ g_return_if_fail (link->next != NULL);
+
+ link->prev = queue->tail;
+ if (queue->tail)
+ queue->tail->next = link;
+ else
+ queue->head = link;
+ queue->tail = link;
+ queue->length++;
+}
+
+gpointer
+g_queue_pop_head (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+
+ if (queue->head)
{
- q->list_end = g_list_append (q->list_end, data);
+ GList *node = queue->head;
+ gpointer data = node->data;
- if (! q->list)
- q->list = q->list_end;
+ queue->head = node->next;
+ if (queue->head)
+ queue->head->prev = NULL;
else
- q->list_end = q->list_end->next;
+ queue->tail = NULL;
+ g_list_free_1 (node);
+ queue->length--;
- q->list_size++;
+ return data;
}
-}
+ return NULL;
+}
-gpointer
-g_queue_pop_front (GQueue *q)
+GList*
+g_queue_pop_head_link (GQueue *queue)
{
- gpointer data = NULL;
+ g_return_val_if_fail (queue != NULL, NULL);
- if ((q) && (q->list))
+ if (queue->head)
{
- GList *node;
+ GList *node = queue->head;
- node = q->list;
- data = node->data;
-
- if (! node->next)
- {
- q->list = q->list_end = NULL;
- q->list_size = 0;
- }
+ queue->head = node->next;
+ if (queue->head)
+ {
+ queue->head->prev = NULL;
+ node->next = NULL;
+ }
else
- {
- q->list = node->next;
- q->list->prev = NULL;
- q->list_size--;
- }
+ queue->tail = NULL;
+ queue->length--;
- g_list_free_1 (node);
+ return node;
}
- return data;
+ return NULL;
}
-
gpointer
-g_queue_pop_back (GQueue *q)
+g_queue_pop_tail (GQueue *queue)
{
- gpointer data = NULL;
+ g_return_val_if_fail (queue != NULL, NULL);
- if ((q) && (q->list))
+ if (queue->tail)
{
- GList *node;
+ GList *node = queue->tail;
+ gpointer data = node->data;
+
+ queue->tail = node->prev;
+ if (queue->tail)
+ queue->tail->next = NULL;
+ else
+ queue->head = NULL;
+ queue->length--;
+ g_list_free_1 (node);
- node = q->list_end;
- data = node->data;
+ return data;
+ }
+
+ return NULL;
+}
- if (! node->prev)
+GList*
+g_queue_pop_tail_link (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+
+ if (queue->tail)
+ {
+ GList *node = queue->tail;
+
+ queue->tail = node->prev;
+ if (queue->tail)
{
- q->list = q->list_end = NULL;
- q->list_size = 0;
- }
+ queue->tail->next = NULL;
+ node->prev = NULL;
+ }
else
- {
- q->list_end = node->prev;
- q->list_end->next = NULL;
- q->list_size--;
- }
-
- g_list_free_1 (node);
+ queue->head = NULL;
+ queue->length--;
+
+ return node;
}
+
+ return NULL;
+}
- return data;
+gboolean
+g_queue_is_empty (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, TRUE);
+
+ return queue->head == NULL;
}
+gpointer
+g_queue_peek_head (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+ return queue->head ? queue->head->data : NULL;
+}
+
+gpointer
+g_queue_peek_tail (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+
+ return queue->tail ? queue->tail->data : NULL;
+}
"%s%s `%s'",
print_unexp ? "" : "invalid ",
identifier_spec,
- scanner->value.v_string);
+ scanner->token == G_TOKEN_IDENTIFIER ? scanner->value.v_string : "null");
break;
case G_TOKEN_BINARY:
identifier_spec);
break;
+ case G_TOKEN_EOF:
+ g_snprintf (expected_string, expected_string_len, "end of file");
+ break;
+
case G_TOKEN_NONE:
break;
}
G_UNLOCK (current_allocator);
}
-GSList*
+inline GSList*
g_slist_alloc (void)
{
GSList *list;
}
}
-void
+inline void
g_slist_free_1 (GSList *list)
{
if (list)
return list;
}
-GSList*
+inline GSList*
g_slist_remove_link (GSList *list,
GSList *link)
{
}
GSList*
+g_slist_delete_link (GSList *list,
+ GSList *link)
+{
+ list = g_slist_remove_link (list, link);
+ g_slist_free_1 (link);
+
+ return list;
+}
+
+GSList*
g_slist_copy (GSList *list)
{
GSList *new_list = NULL;
#else /* !GLIB_NATIVE_BEOS */
/* this is declared differently (const) in string.h on BeOS */
extern char *strsignal (int sig);
-#endif
+#endif /* !GLIB_NATIVE_BEOS */
return strsignal (signum);
#elif NO_SYS_SIGLIST
switch (signum)
}
void
-g_strdown (gchar *string)
+g_strdown (gchar *string)
{
- register gchar *s;
+ register guchar *s;
g_return_if_fail (string != NULL);
}
void
-g_strup (gchar *string)
+g_strup (gchar *string)
{
- register gchar *s;
+ register guchar *s;
g_return_if_fail (string != NULL);
}
void
-g_strreverse (gchar *string)
+g_strreverse (gchar *string)
{
g_return_if_fail (string != NULL);
const gchar *s2)
{
#ifdef HAVE_STRCASECMP
+ g_return_val_if_fail (s1 != NULL, 0);
+ g_return_val_if_fail (s2 != NULL, 0);
+
return strcasecmp (s1, s2);
#else
gint c1, c2;
guint escapes_needed = 0;
gchar *p = string;
+ g_message ("g_strescape() is deprecated");
+
g_return_val_if_fail (string != NULL, NULL);
while (*p != '\000')
gchar*
g_strchug (gchar *string)
{
- gchar *start;
+ guchar *start;
g_return_val_if_fail (string != NULL, NULL);
for (start = string; *start && isspace (*start); start++)
;
- strcpy (string, start);
+ g_memmove(string, start, strlen(start) + 1);
return string;
}
if (!*string)
return string;
- for (s = string + strlen (string) - 1; s >= string && isspace (*s); s--)
+ for (s = string + strlen (string) - 1; s >= string && isspace ((guchar)*s);
+ s--)
*s = '\0';
return string;
g_return_val_if_fail (str_array != NULL, NULL);
- if(separator == NULL)
+ if (separator == NULL)
separator = "";
if (*str_array)
guint len;
guint separator_len;
- if(separator == NULL)
+ if (separator == NULL)
separator = "";
separator_len = strlen (separator);
- va_start(args, separator);
-
- s = va_arg(args, gchar *);
+ va_start (args, separator);
- if(s) {
- len = strlen(s) + 1;
+ s = va_arg (args, gchar*);
- while((s = va_arg(args, gchar*)))
- {
- len += separator_len + strlen(s);
- }
- va_end(args);
+ if (s)
+ {
+ len = strlen (s);
- string = g_new (gchar, len);
+ s = va_arg (args, gchar*);
+ while (s)
+ {
+ len += separator_len + strlen (s);
+ s = va_arg (args, gchar*);
+ }
+ va_end (args);
- va_start(args, separator);
+ string = g_new (gchar, len + 1);
+ *string = 0;
- *string = 0;
- s = va_arg(args, gchar*);
- strcat (string, s);
+ va_start (args, separator);
- while((s = va_arg(args, gchar*)))
- {
- strcat(string, separator);
- strcat(string, s);
- }
+ s = va_arg (args, gchar*);
+ strcat (string, s);
- } else
- string = g_strdup("");
+ s = va_arg (args, gchar*);
+ while (s)
+ {
+ strcat (string, separator);
+ strcat (string, s);
+ s = va_arg (args, gchar*);
+ }
+ }
+ else
+ string = g_strdup ("");
- va_end(args);
+ va_end (args);
return string;
}
/* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Portions Copyright (C) 1999 Tony Gale
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <ctype.h>
#include "glib.h"
-#ifdef NATIVE_WIN32
-#include <io.h> /* For _read */
-#endif
-
-#define G_STRING_BLOCK_SIZE 512
-
typedef struct _GRealStringChunk GRealStringChunk;
typedef struct _GRealString GRealString;
/* Strings.
*/
-static gint
+static inline gint
nearest_power (gint num)
{
gint n = 1;
return n;
}
-static gint
-nearest_multiple (int num, const int block)
-{
- gint n = block;
-
- while (n < num)
- n += block;
-
- return n;
-}
-
static void
g_string_maybe_expand (GRealString* string, gint len)
{
}
}
-static void
-g_string_set_size (GRealString* string, gint size)
-{
- if (string->alloc <= size) {
- string->alloc = nearest_power(size + 1);
- string->str = g_realloc (string->str, string->alloc);
- }
-}
-
GString*
g_string_sized_new (guint dfl_size)
{
g_string_down (GString *fstring)
{
GRealString *string = (GRealString*)fstring;
- gchar *s;
+ guchar *s;
g_return_val_if_fail (string != NULL, NULL);
g_string_up (GString *fstring)
{
GRealString *string = (GRealString*)fstring;
- gchar *s;
+ guchar *s;
g_return_val_if_fail (string != NULL, NULL);
g_string_sprintfa_int (string, fmt, args);
va_end (args);
}
-
-GStringError
-g_string_readline (GString *dest_str,
- gint max_length,
- gint fd)
-{
- gint count=0, retval;
- gchar c;
-
- g_return_val_if_fail (dest_str != NULL, G_STRING_ERROR_INVAL);
- g_return_val_if_fail (max_length > 0, G_STRING_ERROR_INVAL);
- g_string_truncate(dest_str, 0);
-
- for (count = 0; count < max_length; count++) {
- if ( (retval = read(fd, &c, 1)) == 1 ) {
- if (c == '\r') {
- continue;
- }
- if (c == '\n') {
- return(G_STRING_ERROR_NONE);
- }
- g_string_maybe_expand ((GRealString *) dest_str, 1);
- dest_str->str[dest_str->len++] = c;
- dest_str->str[dest_str->len] = 0;
- } else if (retval == 0) {
- return(G_STRING_ERROR_NODATA);
- } else {
- return(G_STRING_ERROR_READ);
- }
- }
- return(G_STRING_ERROR_LENGTH);
-}
-
-GStringError
-g_string_readline_buffered (GString *dest_str,
- GString *buff_str,
- gint max_length,
- gint fd,
- gint match_bare_cr)
-{
- guint count, i=0, buff_size;
-
- g_return_val_if_fail (dest_str != NULL, G_STRING_ERROR_INVAL);
- g_return_val_if_fail (buff_str != NULL, G_STRING_ERROR_INVAL);
- g_return_val_if_fail (max_length > 0, G_STRING_ERROR_INVAL);
-
- /* Make the buffer a multiple of G_STRING_BLOCK_SIZE and
- * bigger then max_length */
- buff_size = nearest_multiple(max_length, G_STRING_BLOCK_SIZE);
- g_string_set_size( (GRealString *) buff_str, buff_size);
-
- do {
- /* Allow the buffer to empty before reading more data.
- * Prevents blocking on read() when data in the buffer */
-
- if (buff_str->len != 0) {
- /* Search for a CRLF, CR or LF */
- for (i = 0; i < max_length-1; i++) {
-
- /* Look for a CR */
- if (buff_str->str[i] == '\r') {
-
- /* Check for CRLF */
- if (buff_str->str[i+1] == '\n') {
- buff_str->str[i] = '\0';
- i++;
- } else if (match_bare_cr) {
- buff_str->str[i] = '\0';
- } else {
- continue;
- }
-
- /* Copy the line to the destination string and
- * remove it from the buffer */
- g_string_assign( dest_str, buff_str->str );
- g_string_erase( buff_str, 0, i+1);
- return (G_STRING_ERROR_NONE);
- }
-
- /* Look for LF */
- if (buff_str->str[i] == '\n') {
- buff_str->str[i] = '\0';
-
- /* Copy the line to the destination string and
- * remove it from the buffer */
- g_string_assign( dest_str, buff_str->str );
- g_string_erase( buff_str, 0, i+1);
- return (G_STRING_ERROR_NONE);
- }
-
- /* If we hit a '\0' then we've exhausted the buffer */
- if (buff_str->str[i] == '\0') {
- break;
- }
- }
- }
-
- /* Read in a block of data, appending it to the buffer */
- if ( (count = read(fd, buff_str->str + buff_str->len,
- buff_size - buff_str->len - 1)) < 0) {
- return (G_STRING_ERROR_READ);
- } else if (count == 0) {
- return (G_STRING_ERROR_NODATA);
- } else {
- /* Fix up the buffer */
- buff_str->len += count;
- buff_str->str[buff_str->len] = '\0';
- }
-
- } while (i != max_length-1);
-
- /* If we get here then we have reached max_length */
- g_string_assign (dest_str, buff_str->str);
- g_string_truncate (dest_str, max_length-1);
- g_string_erase (buff_str, 0, max_length-1);
-
- return (G_STRING_ERROR_LENGTH);
-}
-
-GList*
-g_string_tokenise (GString *string,
- gchar *delims,
- gint max_tokens,
- gint allow_empty)
-{
- GList *tokens=NULL;
- GString *token;
- gchar *current, *start, c;
- guint count=1;
-
- g_return_val_if_fail (string != NULL, NULL);
- g_return_val_if_fail (delims != NULL, NULL);
-
- if (max_tokens < 1) {
- max_tokens = G_MAXINT;
- }
-
- current = string->str;
- while (*current) {
- /* Remove any leading delimiters */
- if (!allow_empty) {
- while ( *current && (strchr(delims, *current) != NULL) ) {
- current++;
- }
- }
-
- /* If we've reached max_tokens, use the remaining input string
- * as the last token */
- if (count == max_tokens) {
- token = g_string_new(current);
- tokens = g_list_append(tokens, token);
- return (tokens);
- }
-
- /* Find the extent of the current token */
- if ( *current ) {
- start = current;
- while ( *current && (strchr(delims, *current) == NULL) ) {
- current++;
- }
- c = *current;
- *current = '\0';
- token = g_string_new( start );
- *current = c;
- tokens = g_list_append(tokens, token);
- count++;
- if (*current) {
- current++;
- }
- }
- }
-
- return (tokens);
-}
-
-void
-g_string_tokenise_free (GList *tokens,
- gint free_token)
-{
-
- if (free_token) {
- while(tokens) {
- g_string_free( (GString *) tokens->data, TRUE );
- tokens = g_list_next(tokens);
- }
- }
-
- g_list_free(tokens);
-}
va_start (args, fmt);
retval = vsnprintf (str, n, fmt, args);
va_end (args);
-
+
+ if (retval < 0)
+ {
+ str[n-1] = '\0';
+ retval = strlen (str);
+ }
+
return retval;
#else /* !HAVE_VSNPRINTF */
gchar *printed;
retval = vsnprintf (str, n, fmt, args);
+ if (retval < 0)
+ {
+ str[n-1] = '\0';
+ retval = strlen (str);
+ }
+
return retval;
#else /* !HAVE_VSNPRINTF */
gchar *printed;
G_UNLOCK (current_allocator);
}
-GList*
+inline GList*
g_list_alloc (void)
{
GList *list;
}
}
-void
+inline void
g_list_free_1 (GList *list)
{
if (list)
return list;
}
-GList*
+inline GList*
g_list_remove_link (GList *list,
GList *link)
{
return list;
}
-
GList*
-g_list_delete (GList *list, GList *link)
+g_list_delete_link (GList *list,
+ GList *link)
{
list = g_list_remove_link (list, link);
g_list_free_1 (link);
return list;
}
-
GList*
g_list_copy (GList *list)
{
#include "config.h"
+/* uncomment the next line to get poll() debugging info */
+/* #define G_MAIN_POLL_DEBUG */
+
+
+
#include "glib.h"
#include <sys/types.h>
#include <time.h>
gint priority);
static void g_main_add_poll_unlocked (gint priority,
GPollFD *fd);
+static void g_main_wakeup (void);
static gboolean g_timeout_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_timeout_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_timeout_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
static gboolean g_idle_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_idle_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_idle_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
#endif /* NATIVE_WIN32 */
static GPollFD wake_up_rec;
static gboolean poll_waiting = FALSE;
+
+/* Flag indicating whether the set of fd's changed during a poll */
+static gboolean poll_changed = FALSE;
#endif /* G_THREADS_ENABLED */
#ifdef HAVE_POLL
+/* SunOS has poll, but doesn't provide a prototype. */
+# if defined (sun) && !defined (__SVR4)
+extern gint poll (GPollFD *ufds, guint nfsd, gint timeout);
+# endif /* !sun */
static GPollFunc poll_func = (GPollFunc) poll;
#else /* !HAVE_POLL */
#ifdef NATIVE_WIN32
#ifndef NO_FD_SET
# define SELECT_MASK fd_set
#else /* !NO_FD_SET */
+# ifndef _AIX
+typedef long fd_mask;
+# endif /* _AIX */
# ifdef _IBMR2
# define SELECT_MASK void
# else /* !_IBMR2 */
#ifdef G_THREADS_ENABLED
/* Now wake up the main loop if it is waiting in the poll() */
-
- if (poll_waiting)
- {
- poll_waiting = FALSE;
-#ifndef NATIVE_WIN32
- write (wake_up_pipe[1], "A", 1);
-#else
- ReleaseSemaphore (wake_up_semaphore, 1, NULL);
-#endif
- }
+ g_main_wakeup ();
#endif
+
G_UNLOCK (main_loop);
return return_val;
g_get_current_time (¤t_time);
G_LOCK (main_loop);
+
+#ifdef G_THREADS_ENABLED
+ if (poll_waiting)
+ {
+ g_warning("g_main_iterate(): main loop already active in another thread");
+ G_UNLOCK (main_loop);
+ return FALSE;
+ }
+#endif G_THREADS_ENABLED
/* If recursing, finish up current dispatch, before starting over */
if (pending_dispatches)
hook = g_hook_first_valid (&source_list, TRUE);
while (hook)
{
- GSource *source = (GSource *)hook;
+ GSource *source = (GSource*) hook;
gint source_timeout = -1;
if ((n_ready > 0) && (source->priority > current_priority))
{
gboolean (*prepare) (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
prepare = ((GSourceFuncs *) hook->func)->prepare;
in_check_or_prepare++;
G_UNLOCK (main_loop);
- if ((*prepare) (source->source_data, ¤t_time, &source_timeout))
+ if ((*prepare) (source->source_data, ¤t_time, &source_timeout, source->hook.data))
hook->flags |= G_SOURCE_READY;
G_LOCK (main_loop);
if (!(hook->flags & G_SOURCE_READY))
{
gboolean (*check) (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
check = ((GSourceFuncs *) hook->func)->check;
in_check_or_prepare++;
G_UNLOCK (main_loop);
- if ((*check) (source->source_data, ¤t_time))
+ if ((*check) (source->source_data, ¤t_time, source->hook.data))
hook->flags |= G_SOURCE_READY;
G_LOCK (main_loop);
hook = g_hook_next_valid (&source_list, hook, TRUE);
}
-
+
/* Now invoke the callbacks */
if (pending_dispatches)
"prepare() member or from a second thread, iteration not possible");
return;
}
-
+
loop->is_running = TRUE;
while (loop->is_running)
g_main_iterate (TRUE, TRUE);
gboolean use_priority,
gint priority)
{
+#ifdef G_MAIN_POLL_DEBUG
+ GTimer *poll_timer;
+#endif
GPollFD *fd_array;
GPollRec *pollrec;
-
gint i;
gint npoll;
+
#ifdef G_THREADS_ENABLED
#ifndef NATIVE_WIN32
if (wake_up_pipe[0] < 0)
i = 0;
while (pollrec && (!use_priority || priority >= pollrec->priority))
{
- fd_array[i].fd = pollrec->fd->fd;
- fd_array[i].events = pollrec->fd->events;
- fd_array[i].revents = 0;
-
+ if (pollrec->fd->events)
+ {
+ fd_array[i].fd = pollrec->fd->fd;
+ /* In direct contradiction to the Unix98 spec, IRIX runs into
+ * difficulty if you pass in POLLERR, POLLHUP or POLLNVAL
+ * flags in the events field of the pollfd while it should
+ * just ignoring them. So we mask them out here.
+ */
+ fd_array[i].events = pollrec->fd->events & ~(G_IO_ERR|G_IO_HUP|G_IO_NVAL);
+ fd_array[i].revents = 0;
+ i++;
+ }
+
pollrec = pollrec->next;
- i++;
}
#ifdef G_THREADS_ENABLED
poll_waiting = TRUE;
+ poll_changed = FALSE;
#endif
- G_UNLOCK (main_loop);
+
npoll = i;
- (*poll_func) (fd_array, npoll, timeout);
- G_LOCK (main_loop);
-
+ if (npoll || timeout != 0)
+ {
+#ifdef G_MAIN_POLL_DEBUG
+ g_print ("g_main_poll(%d) timeout: %d\r", npoll, timeout);
+ poll_timer = g_timer_new ();
+#endif
+
+ G_UNLOCK (main_loop);
+ (*poll_func) (fd_array, npoll, timeout);
+ G_LOCK (main_loop);
+
+#ifdef G_MAIN_POLL_DEBUG
+ g_print ("g_main_poll(%d) timeout: %d - elapsed %12.10f seconds",
+ npoll,
+ timeout,
+ g_timer_elapsed (poll_timer, NULL));
+ g_timer_destroy (poll_timer);
+ pollrec = poll_records;
+ i = 0;
+ while (i < npoll)
+ {
+ if (pollrec->fd->events)
+ {
+ if (fd_array[i].revents)
+ {
+ g_print (" [%d:", fd_array[i].fd);
+ if (fd_array[i].revents & G_IO_IN)
+ g_print ("i");
+ if (fd_array[i].revents & G_IO_OUT)
+ g_print ("o");
+ if (fd_array[i].revents & G_IO_PRI)
+ g_print ("p");
+ if (fd_array[i].revents & G_IO_ERR)
+ g_print ("e");
+ if (fd_array[i].revents & G_IO_HUP)
+ g_print ("h");
+ if (fd_array[i].revents & G_IO_NVAL)
+ g_print ("n");
+ g_print ("]");
+ }
+ i++;
+ }
+ pollrec = pollrec->next;
+ }
+ g_print ("\n");
+#endif
+ } /* if (npoll || timeout != 0) */
+
#ifdef G_THREADS_ENABLED
if (!poll_waiting)
{
}
else
poll_waiting = FALSE;
+
+ /* If the set of poll file descriptors changed, bail out
+ * and let the main loop rerun
+ */
+ if (poll_changed)
+ {
+ g_free (fd_array);
+ return;
+ }
#endif
pollrec = poll_records;
i = 0;
while (i < npoll)
{
- pollrec->fd->revents = fd_array[i].revents;
+ if (pollrec->fd->events)
+ {
+ pollrec->fd->revents = fd_array[i].revents;
+ i++;
+ }
pollrec = pollrec->next;
- i++;
}
g_free (fd_array);
newrec->next = pollrec;
n_poll_records++;
+
+#ifdef G_THREADS_ENABLED
+ poll_changed = TRUE;
+
+ /* Now wake up the main loop if it is waiting in the poll() */
+ g_main_wakeup ();
+#endif
}
void
pollrec = pollrec->next;
}
+#ifdef G_THREADS_ENABLED
+ poll_changed = TRUE;
+
+ /* Now wake up the main loop if it is waiting in the poll() */
+ g_main_wakeup ();
+#endif
+
G_UNLOCK (main_loop);
}
#endif
}
+/* Wake the main loop up from a poll() */
+static void
+g_main_wakeup (void)
+{
+#ifdef G_THREADS_ENABLED
+ if (poll_waiting)
+ {
+ poll_waiting = FALSE;
+#ifndef NATIVE_WIN32
+ write (wake_up_pipe[1], "A", 1);
+#else
+ ReleaseSemaphore (wake_up_semaphore, 1, NULL);
+#endif
+ }
+#endif
+}
+
/* Timeouts */
static gboolean
-g_timeout_prepare (gpointer source_data,
+g_timeout_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
glong msec;
GTimeoutData *data = source_data;
}
static gboolean
-g_timeout_check (gpointer source_data,
- GTimeVal *current_time)
+g_timeout_check (gpointer source_data,
+ GTimeVal *current_time,
+ gpointer user_data)
{
GTimeoutData *data = source_data;
/* Idle functions */
static gboolean
-g_idle_prepare (gpointer source_data,
+g_idle_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
timeout = 0;
return TRUE;
static gboolean
g_idle_check (gpointer source_data,
- GTimeVal *current_time)
+ GTimeVal *current_time,
+ gpointer user_data)
{
return TRUE;
}
#if defined(ENABLE_MEM_PROFILE) && defined(ENABLE_MEM_PROFILE_EXCLUDES_MEM_CHUNKS)
#define ENTER_MEM_CHUNK_ROUTINE() \
- g_static_set (allocating_for_mem_chunk, \
- g_static_get (allocating_for_mem_chunk) + 1)
+ g_private_set (allocating_for_mem_chunk, \
+ g_private_get (allocating_for_mem_chunk) + 1)
#define LEAVE_MEM_CHUNK_ROUTINE() \
- g_static_set (allocating_for_mem_chunk, \
- g_static_get (allocating_for_mem_chunk) - 1)
+ g_private_set (allocating_for_mem_chunk, \
+ g_private_get (allocating_for_mem_chunk) - 1)
#else
#define ENTER_MEM_CHUNK_ROUTINE()
#define LEAVE_MEM_CHUNK_ROUTINE()
static gulong freed_mem = 0;
static GPrivate* allocating_for_mem_chunk = NULL;
#define IS_IN_MEM_CHUNK_ROUTINE() \
- GPOINTER_TO_UINT (g_static_get (allocating_for_mem_chunk))
+ GPOINTER_TO_UINT (g_private_get (allocating_for_mem_chunk))
#endif /* ENABLE_MEM_PROFILE */
+Sat Jul 24 20:47:18 1999 Tim Janik <timj@gtk.org>
+
+ * merged changes from GLib-1-2 branch.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* gmodule.c: Remove LibMain.
* gmodule.c (_g_module_open): Add gmodule-os2.c if G_MODULE_IMPL_OS2.
* gmoduleconf.h.in: Add G_MODULE_IMPL_OS2.
+Fri Apr 23 09:03:48 1999 Tim Janik <timj@gtk.org>
+
+ * gmodule.c (g_module_symbol): removed inline variable assignment.
+ s/CHECK_ERROR/SUPPORT_OR_RETURN/ to make the code more self descriptive.
+
Wed Feb 10 12:06:30 1999 Tim Janik <timj@gtk.org>
* gmodule.c (CHECK_ERROR): be more descriptive on unsupported systems.
libgplugin_a_la_SOURCES = libgplugin_a.c
libgplugin_a_la_LDFLAGS = @G_MODULE_LDFLAGS@ -avoid-version -module
-libgplugin_a_la_LIBADD = @G_MODULE_LIBS_EXTRA@ @G_MODULE_LIBS@ @G_MODULE_PLUGIN_LIBS@ # $(libglib)
+libgplugin_a_la_LIBADD = @G_MODULE_LIBS@ @G_MODULE_LIBS_EXTRA@ @G_MODULE_PLUGIN_LIBS@ # $(libglib)
libgplugin_b_la_SOURCES = libgplugin_b.c
libgplugin_b_la_LDFLAGS = @G_MODULE_LDFLAGS@ -avoid-version -module
-libgplugin_b_la_LIBADD = @G_MODULE_LIBS_EXTRA@ @G_MODULE_LIBS@ @G_MODULE_PLUGIN_LIBS@ # $(libglib)
+libgplugin_b_la_LIBADD = @G_MODULE_LIBS@ @G_MODULE_LIBS_EXTRA@ @G_MODULE_PLUGIN_LIBS@ # $(libglib)
noinst_PROGRAMS = testgmodule
testgmodule_LDFLAGS += @G_MODULE_LDFLAGS@
/* --- include platform specifc code --- */
-#define CHECK_ERROR(rv) { g_module_set_error (NULL); }
+#define SUPPORT_OR_RETURN(rv) { g_module_set_error (NULL); }
#if (G_MODULE_IMPL == G_MODULE_IMPL_DL)
#include "gmodule-dl.c"
#elif (G_MODULE_IMPL == G_MODULE_IMPL_DLD)
#elif (G_MODULE_IMPL == G_MODULE_IMPL_BEOS)
#include "gmodule-beos.c"
#else
-#undef CHECK_ERROR
-#define CHECK_ERROR(rv) { g_module_set_error ("dynamic modules are " \
+#undef SUPPORT_OR_RETURN
+#define SUPPORT_OR_RETURN(rv) { g_module_set_error ("dynamic modules are " \
"not supported by this system"); return rv; }
static gpointer
_g_module_open (const gchar *file_name,
gboolean
g_module_supported (void)
{
- CHECK_ERROR (FALSE);
+ SUPPORT_OR_RETURN (FALSE);
return TRUE;
}
GModule *module;
gpointer handle;
- CHECK_ERROR (NULL);
+ SUPPORT_OR_RETURN (NULL);
if (!file_name)
{
gboolean
g_module_close (GModule *module)
{
- CHECK_ERROR (FALSE);
+ SUPPORT_OR_RETURN (FALSE);
g_return_val_if_fail (module != NULL, FALSE);
g_return_val_if_fail (module->ref_count > 0, FALSE);
gpointer *symbol)
{
gchar *module_error;
+
if (symbol)
*symbol = NULL;
- CHECK_ERROR (FALSE);
+ SUPPORT_OR_RETURN (FALSE);
g_return_val_if_fail (module != NULL, FALSE);
g_return_val_if_fail (symbol_name != NULL, FALSE);
*symbol = _g_module_symbol (module->handle, symbol_name);
#endif /* !G_MODULE_NEED_USCORE */
- if ((module_error = g_module_error()))
+ module_error = g_module_error();
+ if (module_error)
{
gchar *error;
/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1999 Free Software Foundation, Inc.
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * GQueue: Double ended queue implementation, piggy backed on GList.
+ * Copyright (C) 1998 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* Boston, MA 02111-1307, USA.
*/
+/*
+ * MT safe
+ */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include "glib.h"
-#include <glib.h>
+G_LOCK_DEFINE_STATIC (queue_memchunk);
+static GMemChunk *queue_memchunk = NULL;
+static GTrashStack *free_queue_nodes = NULL;
+GQueue*
+g_queue_create (void)
+{
+ GQueue *queue;
+ G_LOCK (queue_memchunk);
+ queue = g_trash_stack_pop (&free_queue_nodes);
-GQueue *
-g_queue_new (void)
-{
- GQueue *q = g_new (GQueue, 1);
+ if (!queue)
+ {
+ if (!queue_memchunk)
+ queue_memchunk = g_mem_chunk_new ("GLib GQueue chunk",
+ sizeof (GNode),
+ sizeof (GNode) * 128,
+ G_ALLOC_ONLY);
+ queue = g_chunk_new (GQueue, queue_memchunk);
+ }
+ G_UNLOCK (queue_memchunk);
- q->list = q->list_end = NULL;
- q->list_size = 0;
+ queue->head = NULL;
+ queue->tail = NULL;
+ queue->length = 0;
- return q;
+ return queue;
}
-
void
-g_queue_free (GQueue *q)
+g_queue_free (GQueue *queue)
{
- if (q)
- {
- if (q->list)
- g_list_free (q->list);
- g_free (q);
- }
-}
+ g_return_if_fail (queue != NULL);
+ g_list_free (queue->head);
-guint
-g_queue_get_size (GQueue *q)
-{
- return (q == NULL) ? 0 : q->list_size;
+ G_LOCK (queue_memchunk);
+ g_trash_stack_push (&free_queue_nodes, queue);
+ G_UNLOCK (queue_memchunk);
}
-
void
-g_queue_push_front (GQueue *q, gpointer data)
+g_queue_push_head (GQueue *queue,
+ gpointer data)
{
- if (q)
- {
- q->list = g_list_prepend (q->list, data);
+ g_return_if_fail (queue != NULL);
- if (q->list_end == NULL)
- q->list_end = q->list;
+ queue->head = g_list_prepend (queue->head, data);
+ if (!queue->tail)
+ queue->tail = queue->head;
+ queue->length++;
+}
- q->list_size++;
- }
+void
+g_queue_push_head_link (GQueue *queue,
+ GList *link)
+{
+ g_return_if_fail (queue != NULL);
+ g_return_if_fail (link != NULL);
+ g_return_if_fail (link->prev != NULL);
+ g_return_if_fail (link->next != NULL);
+
+ link->next = queue->head;
+ if (queue->head)
+ queue->head->prev = link;
+ else
+ queue->tail = link;
+ queue->head = link;
+ queue->length++;
}
+void
+g_queue_push_tail (GQueue *queue,
+ gpointer data)
+{
+ g_return_if_fail (queue != NULL);
+
+ queue->tail = g_list_append (queue->tail, data);
+ if (queue->tail->next)
+ queue->tail = queue->tail->next;
+ else
+ queue->head = queue->tail;
+ queue->length++;
+}
void
-g_queue_push_back (GQueue *q, gpointer data)
+g_queue_push_tail_link (GQueue *queue,
+ GList *link)
{
- if (q)
+ g_return_if_fail (queue != NULL);
+ g_return_if_fail (link != NULL);
+ g_return_if_fail (link->prev != NULL);
+ g_return_if_fail (link->next != NULL);
+
+ link->prev = queue->tail;
+ if (queue->tail)
+ queue->tail->next = link;
+ else
+ queue->head = link;
+ queue->tail = link;
+ queue->length++;
+}
+
+gpointer
+g_queue_pop_head (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+
+ if (queue->head)
{
- q->list_end = g_list_append (q->list_end, data);
+ GList *node = queue->head;
+ gpointer data = node->data;
- if (! q->list)
- q->list = q->list_end;
+ queue->head = node->next;
+ if (queue->head)
+ queue->head->prev = NULL;
else
- q->list_end = q->list_end->next;
+ queue->tail = NULL;
+ g_list_free_1 (node);
+ queue->length--;
- q->list_size++;
+ return data;
}
-}
+ return NULL;
+}
-gpointer
-g_queue_pop_front (GQueue *q)
+GList*
+g_queue_pop_head_link (GQueue *queue)
{
- gpointer data = NULL;
+ g_return_val_if_fail (queue != NULL, NULL);
- if ((q) && (q->list))
+ if (queue->head)
{
- GList *node;
+ GList *node = queue->head;
- node = q->list;
- data = node->data;
-
- if (! node->next)
- {
- q->list = q->list_end = NULL;
- q->list_size = 0;
- }
+ queue->head = node->next;
+ if (queue->head)
+ {
+ queue->head->prev = NULL;
+ node->next = NULL;
+ }
else
- {
- q->list = node->next;
- q->list->prev = NULL;
- q->list_size--;
- }
+ queue->tail = NULL;
+ queue->length--;
- g_list_free_1 (node);
+ return node;
}
- return data;
+ return NULL;
}
-
gpointer
-g_queue_pop_back (GQueue *q)
+g_queue_pop_tail (GQueue *queue)
{
- gpointer data = NULL;
+ g_return_val_if_fail (queue != NULL, NULL);
- if ((q) && (q->list))
+ if (queue->tail)
{
- GList *node;
+ GList *node = queue->tail;
+ gpointer data = node->data;
+
+ queue->tail = node->prev;
+ if (queue->tail)
+ queue->tail->next = NULL;
+ else
+ queue->head = NULL;
+ queue->length--;
+ g_list_free_1 (node);
- node = q->list_end;
- data = node->data;
+ return data;
+ }
+
+ return NULL;
+}
- if (! node->prev)
+GList*
+g_queue_pop_tail_link (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+
+ if (queue->tail)
+ {
+ GList *node = queue->tail;
+
+ queue->tail = node->prev;
+ if (queue->tail)
{
- q->list = q->list_end = NULL;
- q->list_size = 0;
- }
+ queue->tail->next = NULL;
+ node->prev = NULL;
+ }
else
- {
- q->list_end = node->prev;
- q->list_end->next = NULL;
- q->list_size--;
- }
-
- g_list_free_1 (node);
+ queue->head = NULL;
+ queue->length--;
+
+ return node;
}
+
+ return NULL;
+}
- return data;
+gboolean
+g_queue_is_empty (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, TRUE);
+
+ return queue->head == NULL;
}
+gpointer
+g_queue_peek_head (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+ return queue->head ? queue->head->data : NULL;
+}
+
+gpointer
+g_queue_peek_tail (GQueue *queue)
+{
+ g_return_val_if_fail (queue != NULL, NULL);
+
+ return queue->tail ? queue->tail->data : NULL;
+}
"%s%s `%s'",
print_unexp ? "" : "invalid ",
identifier_spec,
- scanner->value.v_string);
+ scanner->token == G_TOKEN_IDENTIFIER ? scanner->value.v_string : "null");
break;
case G_TOKEN_BINARY:
identifier_spec);
break;
+ case G_TOKEN_EOF:
+ g_snprintf (expected_string, expected_string_len, "end of file");
+ break;
+
case G_TOKEN_NONE:
break;
}
G_UNLOCK (current_allocator);
}
-GSList*
+inline GSList*
g_slist_alloc (void)
{
GSList *list;
}
}
-void
+inline void
g_slist_free_1 (GSList *list)
{
if (list)
return list;
}
-GSList*
+inline GSList*
g_slist_remove_link (GSList *list,
GSList *link)
{
}
GSList*
+g_slist_delete_link (GSList *list,
+ GSList *link)
+{
+ list = g_slist_remove_link (list, link);
+ g_slist_free_1 (link);
+
+ return list;
+}
+
+GSList*
g_slist_copy (GSList *list)
{
GSList *new_list = NULL;
+++ /dev/null
-/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1999 Free Software Foundation, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include <glib.h>
-
-
-GStack *
-g_stack_new (void)
-{
- GStack *s;
-
- s = g_new (GStack, 1);
- if (!s)
- return NULL;
-
- s->list = NULL;
-
- return s;
-}
-
-
-void
-g_stack_free (GStack *stack)
-{
- if (stack)
- {
- if (stack->list)
- g_list_free (stack->list);
-
- g_free (stack);
- }
-}
-
-
-gpointer
-g_stack_pop (GStack *stack)
-{
- gpointer data = NULL;
-
- if ((stack) && (stack->list))
- {
- GList *node = stack->list;
-
- stack->list = stack->list->next;
-
- data = node->data;
-
- g_list_free_1 (node);
- }
-
- return data;
-}
-
-
#else /* !GLIB_NATIVE_BEOS */
/* this is declared differently (const) in string.h on BeOS */
extern char *strsignal (int sig);
-#endif
+#endif /* !GLIB_NATIVE_BEOS */
return strsignal (signum);
#elif NO_SYS_SIGLIST
switch (signum)
}
void
-g_strdown (gchar *string)
+g_strdown (gchar *string)
{
- register gchar *s;
+ register guchar *s;
g_return_if_fail (string != NULL);
}
void
-g_strup (gchar *string)
+g_strup (gchar *string)
{
- register gchar *s;
+ register guchar *s;
g_return_if_fail (string != NULL);
}
void
-g_strreverse (gchar *string)
+g_strreverse (gchar *string)
{
g_return_if_fail (string != NULL);
const gchar *s2)
{
#ifdef HAVE_STRCASECMP
+ g_return_val_if_fail (s1 != NULL, 0);
+ g_return_val_if_fail (s2 != NULL, 0);
+
return strcasecmp (s1, s2);
#else
gint c1, c2;
guint escapes_needed = 0;
gchar *p = string;
+ g_message ("g_strescape() is deprecated");
+
g_return_val_if_fail (string != NULL, NULL);
while (*p != '\000')
gchar*
g_strchug (gchar *string)
{
- gchar *start;
+ guchar *start;
g_return_val_if_fail (string != NULL, NULL);
for (start = string; *start && isspace (*start); start++)
;
- strcpy (string, start);
+ g_memmove(string, start, strlen(start) + 1);
return string;
}
if (!*string)
return string;
- for (s = string + strlen (string) - 1; s >= string && isspace (*s); s--)
+ for (s = string + strlen (string) - 1; s >= string && isspace ((guchar)*s);
+ s--)
*s = '\0';
return string;
g_return_val_if_fail (str_array != NULL, NULL);
- if(separator == NULL)
+ if (separator == NULL)
separator = "";
if (*str_array)
guint len;
guint separator_len;
- if(separator == NULL)
+ if (separator == NULL)
separator = "";
separator_len = strlen (separator);
- va_start(args, separator);
-
- s = va_arg(args, gchar *);
+ va_start (args, separator);
- if(s) {
- len = strlen(s) + 1;
+ s = va_arg (args, gchar*);
- while((s = va_arg(args, gchar*)))
- {
- len += separator_len + strlen(s);
- }
- va_end(args);
+ if (s)
+ {
+ len = strlen (s);
- string = g_new (gchar, len);
+ s = va_arg (args, gchar*);
+ while (s)
+ {
+ len += separator_len + strlen (s);
+ s = va_arg (args, gchar*);
+ }
+ va_end (args);
- va_start(args, separator);
+ string = g_new (gchar, len + 1);
+ *string = 0;
- *string = 0;
- s = va_arg(args, gchar*);
- strcat (string, s);
+ va_start (args, separator);
- while((s = va_arg(args, gchar*)))
- {
- strcat(string, separator);
- strcat(string, s);
- }
+ s = va_arg (args, gchar*);
+ strcat (string, s);
- } else
- string = g_strdup("");
+ s = va_arg (args, gchar*);
+ while (s)
+ {
+ strcat (string, separator);
+ strcat (string, s);
+ s = va_arg (args, gchar*);
+ }
+ }
+ else
+ string = g_strdup ("");
- va_end(args);
+ va_end (args);
return string;
}
/* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Portions Copyright (C) 1999 Tony Gale
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <ctype.h>
#include "glib.h"
-#ifdef NATIVE_WIN32
-#include <io.h> /* For _read */
-#endif
-
-#define G_STRING_BLOCK_SIZE 512
-
typedef struct _GRealStringChunk GRealStringChunk;
typedef struct _GRealString GRealString;
/* Strings.
*/
-static gint
+static inline gint
nearest_power (gint num)
{
gint n = 1;
return n;
}
-static gint
-nearest_multiple (int num, const int block)
-{
- gint n = block;
-
- while (n < num)
- n += block;
-
- return n;
-}
-
static void
g_string_maybe_expand (GRealString* string, gint len)
{
}
}
-static void
-g_string_set_size (GRealString* string, gint size)
-{
- if (string->alloc <= size) {
- string->alloc = nearest_power(size + 1);
- string->str = g_realloc (string->str, string->alloc);
- }
-}
-
GString*
g_string_sized_new (guint dfl_size)
{
g_string_down (GString *fstring)
{
GRealString *string = (GRealString*)fstring;
- gchar *s;
+ guchar *s;
g_return_val_if_fail (string != NULL, NULL);
g_string_up (GString *fstring)
{
GRealString *string = (GRealString*)fstring;
- gchar *s;
+ guchar *s;
g_return_val_if_fail (string != NULL, NULL);
g_string_sprintfa_int (string, fmt, args);
va_end (args);
}
-
-GStringError
-g_string_readline (GString *dest_str,
- gint max_length,
- gint fd)
-{
- gint count=0, retval;
- gchar c;
-
- g_return_val_if_fail (dest_str != NULL, G_STRING_ERROR_INVAL);
- g_return_val_if_fail (max_length > 0, G_STRING_ERROR_INVAL);
- g_string_truncate(dest_str, 0);
-
- for (count = 0; count < max_length; count++) {
- if ( (retval = read(fd, &c, 1)) == 1 ) {
- if (c == '\r') {
- continue;
- }
- if (c == '\n') {
- return(G_STRING_ERROR_NONE);
- }
- g_string_maybe_expand ((GRealString *) dest_str, 1);
- dest_str->str[dest_str->len++] = c;
- dest_str->str[dest_str->len] = 0;
- } else if (retval == 0) {
- return(G_STRING_ERROR_NODATA);
- } else {
- return(G_STRING_ERROR_READ);
- }
- }
- return(G_STRING_ERROR_LENGTH);
-}
-
-GStringError
-g_string_readline_buffered (GString *dest_str,
- GString *buff_str,
- gint max_length,
- gint fd,
- gint match_bare_cr)
-{
- guint count, i=0, buff_size;
-
- g_return_val_if_fail (dest_str != NULL, G_STRING_ERROR_INVAL);
- g_return_val_if_fail (buff_str != NULL, G_STRING_ERROR_INVAL);
- g_return_val_if_fail (max_length > 0, G_STRING_ERROR_INVAL);
-
- /* Make the buffer a multiple of G_STRING_BLOCK_SIZE and
- * bigger then max_length */
- buff_size = nearest_multiple(max_length, G_STRING_BLOCK_SIZE);
- g_string_set_size( (GRealString *) buff_str, buff_size);
-
- do {
- /* Allow the buffer to empty before reading more data.
- * Prevents blocking on read() when data in the buffer */
-
- if (buff_str->len != 0) {
- /* Search for a CRLF, CR or LF */
- for (i = 0; i < max_length-1; i++) {
-
- /* Look for a CR */
- if (buff_str->str[i] == '\r') {
-
- /* Check for CRLF */
- if (buff_str->str[i+1] == '\n') {
- buff_str->str[i] = '\0';
- i++;
- } else if (match_bare_cr) {
- buff_str->str[i] = '\0';
- } else {
- continue;
- }
-
- /* Copy the line to the destination string and
- * remove it from the buffer */
- g_string_assign( dest_str, buff_str->str );
- g_string_erase( buff_str, 0, i+1);
- return (G_STRING_ERROR_NONE);
- }
-
- /* Look for LF */
- if (buff_str->str[i] == '\n') {
- buff_str->str[i] = '\0';
-
- /* Copy the line to the destination string and
- * remove it from the buffer */
- g_string_assign( dest_str, buff_str->str );
- g_string_erase( buff_str, 0, i+1);
- return (G_STRING_ERROR_NONE);
- }
-
- /* If we hit a '\0' then we've exhausted the buffer */
- if (buff_str->str[i] == '\0') {
- break;
- }
- }
- }
-
- /* Read in a block of data, appending it to the buffer */
- if ( (count = read(fd, buff_str->str + buff_str->len,
- buff_size - buff_str->len - 1)) < 0) {
- return (G_STRING_ERROR_READ);
- } else if (count == 0) {
- return (G_STRING_ERROR_NODATA);
- } else {
- /* Fix up the buffer */
- buff_str->len += count;
- buff_str->str[buff_str->len] = '\0';
- }
-
- } while (i != max_length-1);
-
- /* If we get here then we have reached max_length */
- g_string_assign (dest_str, buff_str->str);
- g_string_truncate (dest_str, max_length-1);
- g_string_erase (buff_str, 0, max_length-1);
-
- return (G_STRING_ERROR_LENGTH);
-}
-
-GList*
-g_string_tokenise (GString *string,
- gchar *delims,
- gint max_tokens,
- gint allow_empty)
-{
- GList *tokens=NULL;
- GString *token;
- gchar *current, *start, c;
- guint count=1;
-
- g_return_val_if_fail (string != NULL, NULL);
- g_return_val_if_fail (delims != NULL, NULL);
-
- if (max_tokens < 1) {
- max_tokens = G_MAXINT;
- }
-
- current = string->str;
- while (*current) {
- /* Remove any leading delimiters */
- if (!allow_empty) {
- while ( *current && (strchr(delims, *current) != NULL) ) {
- current++;
- }
- }
-
- /* If we've reached max_tokens, use the remaining input string
- * as the last token */
- if (count == max_tokens) {
- token = g_string_new(current);
- tokens = g_list_append(tokens, token);
- return (tokens);
- }
-
- /* Find the extent of the current token */
- if ( *current ) {
- start = current;
- while ( *current && (strchr(delims, *current) == NULL) ) {
- current++;
- }
- c = *current;
- *current = '\0';
- token = g_string_new( start );
- *current = c;
- tokens = g_list_append(tokens, token);
- count++;
- if (*current) {
- current++;
- }
- }
- }
-
- return (tokens);
-}
-
-void
-g_string_tokenise_free (GList *tokens,
- gint free_token)
-{
-
- if (free_token) {
- while(tokens) {
- g_string_free( (GString *) tokens->data, TRUE );
- tokens = g_list_next(tokens);
- }
- }
-
- g_list_free(tokens);
-}
glib-1-2/gthread/gthread-posix.c from 1999-03-03, as the current
change will take care of that too.
+1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * gthread-posix.c: Fixed broken mutex_trylock and slightly broken
+ cond_timed_wait functions.
+
1999-02-15 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* testgthread.c (test_mutexes): Use new signature of
va_start (args, fmt);
retval = vsnprintf (str, n, fmt, args);
va_end (args);
-
+
+ if (retval < 0)
+ {
+ str[n-1] = '\0';
+ retval = strlen (str);
+ }
+
return retval;
#else /* !HAVE_VSNPRINTF */
gchar *printed;
retval = vsnprintf (str, n, fmt, args);
+ if (retval < 0)
+ {
+ str[n-1] = '\0';
+ retval = strlen (str);
+ }
+
return retval;
#else /* !HAVE_VSNPRINTF */
gchar *printed;
# Constants:
PROGRAM=ltconfig
PACKAGE=libtool
-VERSION=1.3.2
-TIMESTAMP=" (1.385.2.150 1999/05/26 00:28:32)"
+VERSION=1.3.3
+TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5'
rm="rm -f"
default_ofile=libtool
can_build_shared=yes
enable_shared=yes
-# All known linkers require a `.a' archive for static linking.
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
enable_static=yes
enable_fast_install=yes
enable_dlopen=unknown
ac_ext=c
objext=o
libext=a
+exeext=
cache_file=
old_AR="$AR"
# Now see if the compiler is really GCC.
with_gcc=no
echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
- echo "$progname:579: checking whether we are using GNU C" >&5
+ echo "$progname:581: checking whether we are using GNU C" >&5
$rm conftest.c
cat > conftest.c <<EOF
yes;
#endif
EOF
- if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
with_gcc=yes
fi
$rm conftest.c
echo $ac_n "checking for object suffix... $ac_c" 1>&6
$rm conftest*
echo 'int i = 1;' > conftest.c
-echo "$progname:601: checking for object suffix" >& 5
-if { (eval echo $progname:602: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
+echo "$progname:603: checking for object suffix" >& 5
+if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
# Append any warnings to the config.log.
cat conftest.err 1>&5
$rm conftest*
echo "$ac_t$objext" 1>&6
+echo $ac_n "checking for executable suffix... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_exeext="no"
+ $rm conftest*
+ echo 'main () { return 0; }' > conftest.c
+ echo "$progname:629: checking for executable suffix" >& 5
+ if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ for ac_file in conftest.*; do
+ case $ac_file in
+ *.c | *.err | *.$objext ) ;;
+ *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
+ esac
+ done
+ else
+ cat conftest.err 1>&5
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ $rm conftest*
+fi
+if test "X$ac_cv_exeext" = Xno; then
+ exeext=""
+else
+ exeext="$ac_cv_exeext"
+fi
+echo "$ac_t$ac_cv_exeext" 1>&6
+
echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
pic_flag=
special_shlib_compile_flags=
echo "int some_variable = 0;" > conftest.c
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $pic_flag -DPIC"
- echo "$progname:742: checking if $compiler PIC flag $pic_flag works" >&5
- if { (eval echo $progname:743: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
+ echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
+ if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
# Append any warnings to the config.log.
cat conftest.err 1>&5
chmod -w .
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -o out/conftest2.o"
-echo "$progname:795: checking if $compiler supports -c -o file.o" >&5
-if { (eval echo $progname:796: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
+echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
+if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
echo "int some_variable = 0;" > conftest.c
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -c -o conftest.lo"
- echo "$progname:828: checking if $compiler supports -c -o file.lo" >&5
-if { (eval echo $progname:829: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
+ echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
+if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
echo "int some_variable = 0;" > conftest.c
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
- echo "$progname:880: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
- if { (eval echo $progname:881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
+ echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+ if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
echo 'main(){return(0);}' > conftest.c
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $link_static_flag"
-echo "$progname:924: checking if $compiler static flag $link_static_flag works" >&5
-if { (eval echo $progname:925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
+if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
echo "$ac_t$link_static_flag" 1>&6
else
echo "$ac_t"none 1>&6
if test "$with_gcc" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
- echo "$progname:957: checking for ld used by GCC" >&5
+ echo "$progname:991: checking for ld used by GCC" >&5
ac_prog=`($CC -print-prog-name=ld) 2>&5`
case "$ac_prog" in
# Accept absolute paths.
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld... $ac_c" 1>&6
- echo "$progname:981: checking for GNU ld" >&5
+ echo "$progname:1015: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
- echo "$progname:984: checking for non-GNU ld" >&5
+ echo "$progname:1018: checking for non-GNU ld" >&5
fi
if test -z "$LD"; then
hardcode_shlibpath_var=unsupported
runpath_var=
always_export_symbols=no
-export_symbols_cmds='$NM $libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
# include_expsyms should be a list of space-separated symbols to be *always*
# included in the symbol list
include_expsyms=
# Extract the symbol export list from an `--export-all' def file,
# then regenerate the def file from the symbol export list, so that
# the compiled dll only exports the symbol export list.
- export_symbols_cmds='rm -f $objdir/$soname-ltdll.c~
- sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
- (cd $objdir && $CC -c $soname-ltdll.c)~
- $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs~
+ export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+ $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~
sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
echo " \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
_lt_hint=`expr 1 + \$_lt_hint`;
done~
+ test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
$CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
$DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
$CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
$DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
$CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
- old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a'
+ old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a'
;;
netbsd*)
main(){nm_test_var='a';nm_test_func();return(0);}
EOF
- echo "$progname:1557: checking if global_symbol_pipe works" >&5
- if { (eval echo $progname:1558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+ echo "$progname:1592: checking if global_symbol_pipe works" >&5
+ if { (eval echo $progname:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
# Now try to grab the symbols.
nlist=conftest.nm
- if { echo "$progname:1561: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
+ if { echo "$progname:1596: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
# Try sorting and uniquifying the output.
if sort "$nlist" | uniq > "$nlist"T; then
save_CFLAGS="$CFLAGS"
LIBS="conftstm.$objext"
CFLAGS="$CFLAGS$no_builtin_flag"
- if { (eval echo $progname:1613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ if { (eval echo $progname:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
pipe_works=yes
else
echo "$progname: failed program was:" >&5
soname_spec='${libname}.so'
finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
- deplibs_check_method='file_magic ELF 32-bit LSB shared object'
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
file_magic_cmd=/usr/bin/file
file_magic_test_file=/shlib/libc.so
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
cygwin* | mingw*)
version_type=windows
+ need_version=no
+ need_lib_prefix=no
if test "$with_gcc" = yes; then
library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
else
dynamic_linker='Win32 ld.exe'
deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
file_magic_cmd='${OBJDUMP} -f'
- need_lib_prefix=no
# FIXME: first we should search . and the directory the executable is in
shlibpath_var=PATH
lt_cv_dlopen="LoadLibrary"
esac
finish_cmds='PATH="\$PATH:/sbin" OBJFORMAT="'"$objformat"'" ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
+ case "$host_os" in
+ freebsd2* | freebsd3.[01]*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ ;;
+ esac
;;
gnu*)
version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so'
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
shlibpath_var=LD_LIBRARY_PATH
;;
if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
lt_cv_dlopen=no lt_cv_dlopen_libs=
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2123: checking for dlopen in -ldl" >&5
+echo "$progname:2170: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2131 "ltconfig"
+#line 2178 "ltconfig"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
dlopen()
; return 0; }
EOF
-if { (eval echo $progname:2141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2160: checking for dlopen" >&5
+echo "$progname:2207: checking for dlopen" >&5
if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2165 "ltconfig"
+#line 2212 "ltconfig"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char dlopen(); below. */
#include <assert.h>
; return 0; }
EOF
-if { (eval echo $progname:2187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_dlopen=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2204: checking for dld_link in -ldld" >&5
+echo "$progname:2251: checking for dld_link in -ldld" >&5
ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldld $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2212 "ltconfig"
+#line 2259 "ltconfig"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
dld_link()
; return 0; }
EOF
-if { (eval echo $progname:2222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2241: checking for shl_load" >&5
+echo "$progname:2288: checking for shl_load" >&5
if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2246 "ltconfig"
+#line 2293 "ltconfig"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char shl_load(); below. */
#include <assert.h>
; return 0; }
EOF
-if { (eval echo $progname:2268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_shl_load=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2286: checking for shl_load in -ldld" >&5
+echo "$progname:2333: checking for shl_load in -ldld" >&5
ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldld $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2294 "ltconfig"
+#line 2341 "ltconfig"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
shl_load()
; return 0; }
EOF
-if { (eval echo $progname:2305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_hdr in dlfcn.h; do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2348: checking for $ac_hdr" >&5
+echo "$progname:2395: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2353 "ltconfig"
+#line 2400 "ltconfig"
#include <$ac_hdr>
int fnord = 0;
EOF
ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo $progname:2358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo $progname:2405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
LIBS="$lt_cv_dlopen_libs $LIBS"
echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2386: checking whether a program can dlopen itself" >&5
+echo "$progname:2433: checking whether a program can dlopen itself" >&5
if test "${lt_cv_dlopen_self+set}" = set; then
echo $ac_n "(cached) $ac_c" 1>&6
else
lt_cv_dlopen_self=cross
else
cat > conftest.c <<EOF
-#line 2394 "ltconfig"
+#line 2441 "ltconfig"
#if HAVE_DLFCN_H
#include <dlfcn.h>
fnord() { int i=42;}
main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) exit(0); } exit(1); }
+ if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
EOF
-if { (eval echo $progname:2440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
lt_cv_dlopen_self=yes
else
if test "$lt_cv_dlopen_self" = yes; then
LDFLAGS="$LDFLAGS $link_static_flag"
echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2459: checking whether a statically linked program can dlopen itself" >&5
+echo "$progname:2506: checking whether a statically linked program can dlopen itself" >&5
if test "${lt_cv_dlopen_self_static+set}" = set; then
echo $ac_n "(cached) $ac_c" 1>&6
else
lt_cv_dlopen_self_static=cross
else
cat > conftest.c <<EOF
-#line 2467 "ltconfig"
+#line 2514 "ltconfig"
#if HAVE_DLFCN_H
#include <dlfcn.h>
fnord() { int i=42;}
main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) exit(0); } exit(1); }
+ if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
EOF
-if { (eval echo $progname:2513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
lt_cv_dlopen_self_static=yes
else
# Old archive suffix (normally "a").
libext="$libext"
+# Executable file suffix (normally "").
+exeext="$exeext"
+
# Additional compiler flags for building library objects.
pic_flag=$pic_flag
esac
# Append the ltmain.sh script.
- cat "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
+ sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
chmod +x "$ofile"
;;
# Constants.
PROGRAM=ltmain.sh
PACKAGE=libtool
-VERSION=1.3.2
-TIMESTAMP=" (1.385.2.150 1999/05/26 00:28:32)"
+VERSION=1.3.3
+TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
default_mode=
help="Try \`$progname --help' for more information."
Xsed='sed -e 1s/^X//'
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
SP2NL='tr \040 \012'
-NL2SP='tr \012 \040'
+NL2SP='tr \015\012 \040\040'
# NLS nuisances.
# Only set LANG and LC_ALL to C if already set.
# #undef WIN32_LEAN_AND_MEAN
# #include <stdio.h>
#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
# #ifdef __cplusplus
# extern "C" {
# #endif
# }
# #endif
#
+# #ifdef __CYGWIN__
# #include <cygwin/cygwin_dll.h>
# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
# HINSTANCE __hDllInstance_base;
#
# BOOL APIENTRY
# }
# /* impgen.c ends here */
;;
- *-*-beos*)
- allow_undefined=no
- ;;
*)
allow_undefined=yes
;;
fi
case "$arg" in
*.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
self)
if test "$prev" = dlprefiles; then
dlself=yes
fi
if test -n "$dependency_libs"; then
- # Extract -R from dependency_libs
+ # Extract -R and -L from dependency_libs
temp_deplibs=
for deplib in $dependency_libs; do
case "$deplib" in
-L*) case "$compile_command $temp_deplibs " in
*" $deplib "*) ;;
*) temp_deplibs="$temp_deplibs $deplib";;
- esac;;
+ esac
+ temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ case " $lib_search_path " in
+ *" $temp_dir "*) ;;
+ *) lib_search_path="$lib_search_path $temp_dir";;
+ esac
+ ;;
*) temp_deplibs="$temp_deplibs $deplib";;
esac
done
# Use standard objects if they are pic
test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- if test -n "$whole_archive_flag_spec"; then
- if test -n "$convenience"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- fi
- else
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case "$xlib" in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linkopts="$linkopts $flag"
- fi
-
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
$run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
fi
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "mkdir $gentop"
+ $run mkdir "$gentop"
+ status=$?
+ if test $status -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case "$xlib" in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "mkdir $xdir"
+ $run mkdir "$xdir"
+ status=$?
+ if test $status -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+ libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linkopts="$linkopts $flag"
+ fi
+
# Do each of the archive commands.
if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
eval cmds=\"$archive_expsym_cmds\"
# Delete the old objects.
$run $rm $obj $libobj
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${obj}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "mkdir $gentop"
+ $run mkdir "$gentop"
+ status=$?
+ if test $status -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case "$xlib" in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "mkdir $xdir"
+ $run mkdir "$xdir"
+ status=$?
+ if test $status -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+ reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
# Create the old-style object.
- reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
+ reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
output="$obj"
eval cmds=\"$reload_cmds\"
IFS="$save_ifs"
# Exit if we aren't doing a library object file.
- test -z "$libobj" && exit 0
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ fi
if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
# Create an invalid libtool object if no PIC, so that we don't
# accidentally link it into a program.
$show "echo timestamp > $libobj"
if test -n "$pic_flag"; then
# Only do commands if we really have different PIC objects.
- reload_objs="$libobjs"
+ reload_objs="$libobjs $reload_conv_objs"
output="$libobj"
eval cmds=\"$reload_cmds\"
IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
$run $LN_S $obj $libobj || exit $?
fi
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
exit 0
;;
fi
dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" = yes; then
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
if test -n "$NM" && test -n "$global_symbol_pipe"; then
dlsyms="${outputname}S.c"
else
fi"
else
echo >> $output "\
- program='$outputname'
+ program='$outputname$exeext'
progdir=\"\$thisdir/$objdir\"
"
fi
# Install the shared library and build the symlinks.
$show "$install_prog $dir/$realname $destdir/$realname"
$run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
- test "X$dlname" = "X$realname" && dlname=
if test $# -gt 0; then
# Delete the old symlinks, and create new ones.
for linkname
do
- test "X$dlname" = "X$linkname" && dlname=
if test "$linkname" != "$realname"; then
$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
done
fi
- if test -n "$dlname"; then
- # Install the dynamically-loadable library.
- $show "$install_prog $dir/$dlname $destdir/$dlname"
- $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $?
- fi
-
# Do each command in the postinstall commands.
lib="$destdir/$realname"
eval cmds=\"$postinstall_cmds\"
# Delete the libtool libraries and symlinks.
for n in $library_names; do
rmfiles="$rmfiles $dir/$n"
- test "X$n" = "X$dlname" && dlname=
done
- test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname"
test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
$show "$rm $rmfiles"
tar xfz glib-$VERSION.tar.gz
-for file in README NEWS glib.spec docs/glib-config.1
+for file in INSTALL NEWS README glib.spec docs/glib-config.1
do
echo -n "$file... "
if [ "x`grep $VERSION glib-$VERSION/$file | wc -l | awk -F' ' '{print $1}'`" == "x1" ]; then
type-test
strfunc-test
queue-test
-stack-test
date-test
rand-test
thread-test
makefile.msc \
makefile.cygwin
+EXTRA_DIST = \
+ makefile.msc
+
TESTS = \
array-test \
date-test \
rand-test \
relation-test \
slist-test \
- stack-test \
strfunc-test \
string-test \
thread-test \
rand_test_LDADD = $(top_builddir)/libglib.la
relation_test_LDADD = $(top_builddir)/libglib.la
slist_test_LDADD = $(top_builddir)/libglib.la
-stack_test_LDADD = $(top_builddir)/libglib.la
strfunc_test_LDADD = $(top_builddir)/libglib.la
string_test_LDADD = $(top_builddir)/libglib.la
thread_test_LDADD = $(top_builddir)/libglib.la \
int main()
{
GQueue *q;
+ GList *node;
+ gpointer data;
- q = g_queue_new ();
+ q = g_queue_create ();
- g_assert (g_queue_empty (q) == TRUE);
+ g_assert (g_queue_is_empty (q) == TRUE);
- g_queue_push (q, GINT_TO_POINTER (1));
- g_assert (g_list_length (q->list) == 1);
- g_queue_push (q, GINT_TO_POINTER (2));
- g_assert (g_list_length (q->list) == 2);
- g_queue_push (q, GINT_TO_POINTER (3));
- g_assert (g_list_length (q->list) == 3);
- g_queue_push (q, GINT_TO_POINTER (4));
- g_assert (g_list_length (q->list) == 4);
- g_queue_push (q, GINT_TO_POINTER (5));
- g_assert (g_list_length (q->list) == 5);
+ g_queue_push_head (q, GINT_TO_POINTER (2));
+ g_assert (g_queue_peek_head (q) == GINT_TO_POINTER (2));
+ g_assert (g_queue_is_empty (q) == FALSE);
+ g_assert (g_list_length (q->head) == 1);
+ g_assert (q->head == q->tail);
+ g_queue_push_head (q, GINT_TO_POINTER (1));
+ g_assert (q->head->next == q->tail);
+ g_assert (q->tail->prev == q->head);
+ g_assert (g_list_length (q->head) == 2);
+ g_assert (q->tail->data == GINT_TO_POINTER (2));
+ g_assert (q->head->data == GINT_TO_POINTER (1));
+ g_queue_push_tail (q, GINT_TO_POINTER (3));
+ g_assert (g_list_length (q->head) == 3);
+ g_assert (q->head->data == GINT_TO_POINTER (1));
+ g_assert (q->head->next->data == GINT_TO_POINTER (2));
+ g_assert (q->head->next->next == q->tail);
+ g_assert (q->head->next == q->tail->prev);
+ g_assert (q->tail->data == GINT_TO_POINTER (3));
+ g_queue_push_tail (q, GINT_TO_POINTER (4));
+ g_assert (g_list_length (q->head) == 4);
+ g_assert (q->head->data == GINT_TO_POINTER (1));
+ g_assert (g_queue_peek_tail (q) == GINT_TO_POINTER (4));
+ g_queue_push_tail (q, GINT_TO_POINTER (5));
+ g_assert (g_list_length (q->head) == 5);
- g_assert (g_queue_empty (q) == FALSE);
+ g_assert (g_queue_is_empty (q) == FALSE);
- g_assert (g_queue_index (q, GINT_TO_POINTER (2)) == 1);
- g_assert (g_queue_index (q, GINT_TO_POINTER (142)) == -1);
+ g_assert (q->length == 5);
+ g_assert (q->head->prev == NULL);
+ g_assert (q->head->data == GINT_TO_POINTER (1));
+ g_assert (q->head->next->data == GINT_TO_POINTER (2));
+ g_assert (q->head->next->next->data == GINT_TO_POINTER (3));
+ g_assert (q->head->next->next->next->data == GINT_TO_POINTER (4));
+ g_assert (q->head->next->next->next->next->data == GINT_TO_POINTER (5));
+ g_assert (q->head->next->next->next->next->next == NULL);
+ g_assert (q->head->next->next->next->next == q->tail);
+ g_assert (q->tail->data == GINT_TO_POINTER (5));
+ g_assert (q->tail->prev->data == GINT_TO_POINTER (4));
+ g_assert (q->tail->prev->prev->data == GINT_TO_POINTER (3));
+ g_assert (q->tail->prev->prev->prev->data == GINT_TO_POINTER (2));
+ g_assert (q->tail->prev->prev->prev->prev->data == GINT_TO_POINTER (1));
+ g_assert (q->tail->prev->prev->prev->prev->prev == NULL);
+ g_assert (q->tail->prev->prev->prev->prev == q->head);
+ g_assert (g_queue_peek_tail (q) == GINT_TO_POINTER (5));
+ g_assert (g_queue_peek_head (q) == GINT_TO_POINTER (1));
- g_assert (g_queue_peek (q) == GINT_TO_POINTER (1));
- g_assert (g_queue_peek_front (q) == GINT_TO_POINTER (1));
- g_assert (g_queue_peek_back (q) == GINT_TO_POINTER (5));
+ g_assert (g_queue_pop_head (q) == GINT_TO_POINTER (1));
+ g_assert (g_list_length (q->head) == 4 && q->length == 4);
+ g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (5));
+ g_assert (g_list_length (q->head) == 3);
+ g_assert (g_queue_pop_head_link (q)->data == GINT_TO_POINTER (2));
+ g_assert (g_list_length (q->head) == 2);
+ g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (4));
+ g_assert (g_list_length (q->head) == 1);
+ g_assert (g_queue_pop_head_link (q)->data == GINT_TO_POINTER (3));
+ g_assert (g_list_length (q->head) == 0);
+ g_assert (g_queue_pop_tail (q) == NULL);
+ g_assert (g_list_length (q->head) == 0);
+ g_assert (g_queue_pop_head (q) == NULL);
+ g_assert (g_list_length (q->head) == 0);
- g_assert (g_queue_pop (q) == GINT_TO_POINTER (1));
- g_assert (g_list_length (q->list) == 4);
- g_assert (g_queue_pop (q) == GINT_TO_POINTER (2));
- g_assert (g_list_length (q->list) == 3);
- g_assert (g_queue_pop (q) == GINT_TO_POINTER (3));
- g_assert (g_list_length (q->list) == 2);
- g_assert (g_queue_pop (q) == GINT_TO_POINTER (4));
- g_assert (g_list_length (q->list) == 1);
- g_assert (g_queue_pop (q) == GINT_TO_POINTER (5));
- g_assert (g_list_length (q->list) == 0);
- g_assert (g_queue_pop (q) == NULL);
- g_assert (g_list_length (q->list) == 0);
- g_assert (g_queue_pop (q) == NULL);
- g_assert (g_list_length (q->list) == 0);
-
- g_assert (g_queue_empty (q) == TRUE);
+ g_assert (g_queue_is_empty (q) == TRUE);
/************************/
- g_queue_push_front (q, GINT_TO_POINTER (1));
- g_assert (g_list_length (q->list) == 1);
- g_queue_push_front (q, GINT_TO_POINTER (2));
- g_assert (g_list_length (q->list) == 2);
- g_queue_push_front (q, GINT_TO_POINTER (3));
- g_assert (g_list_length (q->list) == 3);
- g_queue_push_front (q, GINT_TO_POINTER (4));
- g_assert (g_list_length (q->list) == 4);
- g_queue_push_front (q, GINT_TO_POINTER (5));
- g_assert (g_list_length (q->list) == 5);
+ g_queue_push_head (q, GINT_TO_POINTER (1));
+ g_assert (g_list_length (q->head) == 1 && 1 == q->length);
+ g_queue_push_head (q, GINT_TO_POINTER (2));
+ g_assert (g_list_length (q->head) == 2 && 2 == q->length);
+ g_queue_push_head (q, GINT_TO_POINTER (3));
+ g_assert (g_list_length (q->head) == 3 && 3 == q->length);
+ g_queue_push_head (q, GINT_TO_POINTER (4));
+ g_assert (g_list_length (q->head) == 4 && 4 == q->length);
+ g_queue_push_head (q, GINT_TO_POINTER (5));
+ g_assert (g_list_length (q->head) == 5 && 5 == q->length);
- g_assert (g_queue_pop_front (q) == GINT_TO_POINTER (5));
- g_assert (g_list_length (q->list) == 4);
- g_assert (g_queue_pop_front (q) == GINT_TO_POINTER (4));
- g_assert (g_list_length (q->list) == 3);
- g_assert (g_queue_pop_front (q) == GINT_TO_POINTER (3));
- g_assert (g_list_length (q->list) == 2);
- g_assert (g_queue_pop_front (q) == GINT_TO_POINTER (2));
- g_assert (g_list_length (q->list) == 1);
- g_assert (g_queue_pop_front (q) == GINT_TO_POINTER (1));
- g_assert (g_list_length (q->list) == 0);
- g_assert (g_queue_pop_front (q) == NULL);
- g_assert (g_list_length (q->list) == 0);
- g_assert (g_queue_pop_front (q) == NULL);
- g_assert (g_list_length (q->list) == 0);
+ g_assert (g_queue_pop_head (q) == GINT_TO_POINTER (5));
+ g_assert (g_list_length (q->head) == 4);
+ node = q->tail;
+ g_assert (node == g_queue_pop_tail_link (q));
+ g_assert (g_list_length (q->head) == 3);
+ data = q->head->data;
+ g_assert (data == g_queue_pop_head (q));
+ g_assert (g_list_length (q->head) == 2);
+ g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (2));
+ g_assert (g_list_length (q->head) == 1);
+ g_assert (q->head == q->tail);
+ g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (3));
+ g_assert (g_list_length (q->head) == 0);
+ g_assert (g_queue_pop_head (q) == NULL);
+ g_assert (g_queue_pop_head_link (q) == NULL);
+ g_assert (g_list_length (q->head) == 0);
+ g_assert (g_queue_pop_tail_link (q) == NULL);
+ g_assert (g_list_length (q->head) == 0);
g_queue_free (q);
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glib.h>
-
-int main()
-{
- GStack *s;
-
- s = g_stack_new ();
-
- g_assert (g_stack_empty (s) == TRUE);
-
- g_stack_push (s, GINT_TO_POINTER (1));
- g_assert (g_list_length (s->list) == 1);
- g_stack_push (s, GINT_TO_POINTER (2));
- g_assert (g_list_length (s->list) == 2);
- g_stack_push (s, GINT_TO_POINTER (3));
- g_assert (g_list_length (s->list) == 3);
- g_stack_push (s, GINT_TO_POINTER (4));
- g_assert (g_list_length (s->list) == 4);
- g_stack_push (s, GINT_TO_POINTER (5));
- g_assert (g_list_length (s->list) == 5);
-
- g_assert (g_stack_index (s, GINT_TO_POINTER (2)) == 3);
-
- g_assert (g_stack_empty (s) == FALSE);
-
- g_assert (g_stack_peek (s) == GINT_TO_POINTER (5));
-
- g_assert (g_stack_pop (s) == GINT_TO_POINTER (5));
- g_assert (g_list_length (s->list) == 4);
- g_assert (g_stack_pop (s) == GINT_TO_POINTER (4));
- g_assert (g_list_length (s->list) == 3);
- g_assert (g_stack_pop (s) == GINT_TO_POINTER (3));
- g_assert (g_list_length (s->list) == 2);
- g_assert (g_stack_pop (s) == GINT_TO_POINTER (2));
- g_assert (g_list_length (s->list) == 1);
- g_assert (g_stack_pop (s) == GINT_TO_POINTER (1));
- g_assert (g_list_length (s->list) == 0);
- g_assert (g_stack_pop (s) == NULL);
- g_assert (g_list_length (s->list) == 0);
- g_assert (g_stack_pop (s) == NULL);
- g_assert (g_list_length (s->list) == 0);
-
- g_stack_free (s);
-
- return 0;
-}
-