From 87c7aeb93bd654776f59805a342ad913031034f3 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Sat, 24 Jul 1999 18:50:58 +0000 Subject: [PATCH] 18:36. incorporated proposed cleanups from gtk-devel-list. Sat Jul 24 20:11:35 1999 Tim Janik * 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. --- .cvsignore | 1 + AUTHORS | 8 +- ChangeLog | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-0 | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-10 | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-12 | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-2 | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-4 | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-6 | 319 ++++++++++++++++++++++++++++++++++++++++++ ChangeLog.pre-2-8 | 319 ++++++++++++++++++++++++++++++++++++++++++ INSTALL | 4 +- MAINTAINERS | 1 + Makefile.am | 1 - NEWS | 25 +++- README | 2 +- configure.in | 11 +- docs/.cvsignore | 1 + docs/Makefile.am | 2 +- docs/glib-config.1.in | 53 +++++++ gbacktrace.c | 9 +- gdate.c | 37 ++--- gerror.c | 9 +- giounix.c | 12 +- glib.def | 11 -- glib.h | 301 +++++++++++++++++++-------------------- glib.spec.in | 2 +- glib/Makefile.am | 1 - glib/gbacktrace.c | 9 +- glib/gdate.c | 37 ++--- glib/gerror.c | 9 +- glib/giounix.c | 12 +- glib/glib.def | 11 -- glib/glib.h | 301 +++++++++++++++++++-------------------- glib/glist.c | 11 +- glib/gmain.c | 207 +++++++++++++++++++++------ glib/gmem.c | 10 +- glib/gqueue.c | 278 ++++++++++++++++++++++++------------ glib/gscanner.c | 6 +- glib/gslist.c | 16 ++- glib/gstrfuncs.c | 79 ++++++----- glib/gstring.c | 222 +---------------------------- glib/gutils.c | 14 +- glist.c | 11 +- gmain.c | 207 +++++++++++++++++++++------ gmem.c | 10 +- gmodule/ChangeLog | 9 ++ gmodule/Makefile.am | 4 +- gmodule/gmodule.c | 18 +-- gqueue.c | 278 ++++++++++++++++++++++++------------ gscanner.c | 6 +- gslist.c | 16 ++- gstack.c | 74 ---------- gstrfuncs.c | 79 ++++++----- gstring.c | 222 +---------------------------- gthread/ChangeLog | 5 + gutils.c | 14 +- ltconfig | 170 ++++++++++++++-------- ltmain.sh | 212 +++++++++++++++++++--------- sanity_check | 2 +- tests/.cvsignore | 1 - tests/Makefile.am | 5 +- tests/queue-test.c | 148 ++++++++++++-------- tests/stack-test.c | 51 ------- 63 files changed, 4268 insertions(+), 1539 deletions(-) create mode 100644 MAINTAINERS create mode 100644 docs/glib-config.1.in delete mode 100644 gstack.c delete mode 100644 tests/stack-test.c diff --git a/.cvsignore b/.cvsignore index 02f97e634..f8e026f7f 100644 --- a/.cvsignore +++ b/.cvsignore @@ -25,3 +25,4 @@ testgdateparser glibconfig-sysdefs.h glib.spec stamp-h.in +glibconfig.h.win32 diff --git a/AUTHORS b/AUTHORS index 49c3037ef..5269e2923 100644 --- a/AUTHORS +++ b/AUTHORS @@ -21,10 +21,10 @@ Manish Singh Owen Taylor Sebastian Wilhelmi -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 Takuji Nishimura + +There are also many others who have contributed patches and fixes; +we thank them, for helping us in advancing GLIB. diff --git a/ChangeLog b/ChangeLog index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 186bd2af3..c2cddd8f5 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,32 @@ +Sat Jul 24 20:11:35 1999 Tim Janik + + * 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 Win32: With the latest gcc (2.95, pre-release), we can have binary @@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson 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 + + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.3 + +1999-06-18 Sebastian Wilhelmi + + * 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 for pointing this out. + +Thu Jun 3 16:30:31 PDT 1999 Manish Singh + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3.2 + +1999-05-26 Sebastian Wilhelmi + + * gmain.c: provide a poll prototype for SunOS, as they do not do + it self. Hint from Christian Parg . + +Tue May 25 12:23:07 1999 Owen Taylor + + * gstrfuncs.c (g_strchug): Use g_memmove() not memmove(). + (Reported by Charles Levert ) + +Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson + + * Released GLib 1.2.3 + +1999-05-08 Tor Lillqvist + + * 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 + + * acinclude.m4 + * config.guess + * config.status + * ltconfig + * ltmain.sh: upgrade to libtool 1.3 + +1999-04-30 Tor Lillqvist + + * 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 for exit(). + +Thu Apr 29 02:16:36 1999 Tim Janik + + * gstrfuncs.c: minor code cleanups. + +Tue Apr 27 13:11:29 1999 Owen Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Released GLib 1.2.2 + +1999-04-12 Elliot Lee + + * g_strchug(): s/strcpy/memmove/ + +1999-04-12 Sebastian Wilhelmi + + * configure.in: Adjusted the test for an unimplemented + getpwuid_r. Info from Michael Pruett . + +Sun Apr 11 15:07:34 1999 Tim Janik + + * 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 + + * gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL. + +Sat Apr 10 19:30:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + +Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson + + * 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 + + * giounix.c: add user_data param to check and prepare functions + +Mon Mar 22 03:54:43 1999 Tim Janik + + * 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 + + * 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 + + * gmem.c: Fixed another stupid fault of mine: Did + s/g_static_/g_private_/g + +Wed Mar 17 03:17:42 1999 Tim Janik + + * 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 + + * 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 + + * 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 . + +Tue Mar 9 23:25:50 1999 Tim Janik + + * 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 + + * 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 + + * 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 + + * gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to + Friedrich Dominicus + +1999-03-01 Sebastian Wilhelmi + + * gutils.c (g_get_any_init): Fixed yet another bloody + implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche + . 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 + + * Released GLib 1.2.0 + + * AUTHORS: updated + +Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson + + * *.[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 + + * Made specfile generated, tweaked slightly Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson diff --git a/INSTALL b/INSTALL index 706ca44cb..8f032dc40 100644 --- a/INSTALL +++ b/INSTALL @@ -1,8 +1,8 @@ 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 ] diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 000000000..1f2064086 --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1 @@ +Email: gtk-bugs@gimp.org diff --git a/Makefile.am b/Makefile.am index d6931be0a..de995ccb7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -48,7 +48,6 @@ libglib_la_SOURCES = \ grand.c \ gscanner.c \ gslist.c \ - gstack.c \ gstrfuncs.c \ gstring.c \ gthread.c \ diff --git a/NEWS b/NEWS index 32979ea07..97073e951 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,23 @@ -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): @@ -14,7 +31,7 @@ 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) @@ -93,7 +110,7 @@ Overview of Changes in GLib 1.1.7: 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 diff --git a/README b/README index b34bd13a7..ec10168f7 100644 --- a/README +++ b/README @@ -24,7 +24,7 @@ do development with GLib 1.2 any longer. 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. diff --git a/configure.in b/configure.in index 8095505dd..c43f9ce91 100644 --- a/configure.in +++ b/configure.in @@ -15,12 +15,12 @@ cflags_set=${CFLAGS+set} # 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: @@ -29,11 +29,11 @@ AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl # 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 @@ -42,6 +42,7 @@ AC_DIVERT_POP()dnl 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) diff --git a/docs/.cvsignore b/docs/.cvsignore index 61df8a423..20e7d2df3 100644 --- a/docs/.cvsignore +++ b/docs/.cvsignore @@ -16,3 +16,4 @@ Makefile.in *.cps *.fns *.vrs +glib-config.1 diff --git a/docs/Makefile.am b/docs/Makefile.am index ee04fe1bb..da6a13d41 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -4,7 +4,7 @@ info_TEXINFOS = glib.texi man_MANS = glib-config.1 -EXTRA_DIST = glib-config.1 \ +EXTRA_DIST = glib-config.1.in \ glib.html \ glib_toc.html diff --git a/docs/glib-config.1.in b/docs/glib-config.1.in new file mode 100644 index 000000000..2abf9fa1d --- /dev/null +++ b/docs/glib-config.1.in @@ -0,0 +1,53 @@ +.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. diff --git a/gbacktrace.c b/gbacktrace.c index 6e6e74f66..d39cb2c30 100644 --- a/gbacktrace.c +++ b/gbacktrace.c @@ -111,7 +111,14 @@ g_on_error_query (const gchar *prg_name) 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') diff --git a/gdate.c b/gdate.c index fe4403230..013ecd756 100644 --- a/gdate.c +++ b/gdate.c @@ -28,6 +28,11 @@ * MT safe */ +#define DEBUG_MSG(x) /* */ +#ifdef G_ENABLE_DEBUG +/* #define DEBUG_MSG(args) g_message args ; */ +#endif + #ifdef HAVE_CONFIG_H #include #endif @@ -453,7 +458,7 @@ g_date_fill_parse_tokens (const gchar *str, GDateParseTokens *pt) { 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. @@ -609,23 +614,15 @@ g_date_prepare_to_parse (const gchar *str, GDateParseTokens *pt) } #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; @@ -648,10 +645,8 @@ g_date_prepare_to_parse (const gchar *str, GDateParseTokens *pt) } ++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 } @@ -675,12 +670,8 @@ g_date_set_parse (GDate *d, 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) @@ -801,7 +792,7 @@ g_date_set_parse (GDate *d, } #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); } diff --git a/gerror.c b/gerror.c index 6e6e74f66..d39cb2c30 100644 --- a/gerror.c +++ b/gerror.c @@ -111,7 +111,14 @@ g_on_error_query (const gchar *prg_name) 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') diff --git a/giounix.c b/giounix.c index 4944d8f09..108527516 100644 --- a/giounix.c +++ b/giounix.c @@ -78,9 +78,11 @@ static guint g_io_unix_add_watch (GIOChannel *channel, 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); @@ -105,7 +107,8 @@ GIOFuncs unix_channel_funcs = { static gboolean g_io_unix_prepare (gpointer source_data, GTimeVal *current_time, - gint *timeout) + gint *timeout, + gpointer user_data) { *timeout = -1; return FALSE; @@ -113,7 +116,8 @@ g_io_unix_prepare (gpointer source_data, static gboolean g_io_unix_check (gpointer source_data, - GTimeVal *current_time) + GTimeVal *current_time, + gpointer user_data) { GIOUnixWatch *data = source_data; diff --git a/glib.def b/glib.def index 134ce26bb..7e6390722 100644 --- a/glib.def +++ b/glib.def @@ -158,7 +158,6 @@ EXPORTS g_list_append g_list_concat g_list_copy - g_list_delete g_list_find g_list_find_custom g_list_first @@ -256,13 +255,6 @@ EXPORTS 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 @@ -344,9 +336,6 @@ EXPORTS 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 diff --git a/glib.h b/glib.h index 8f4975a1d..d04499ad1 100644 --- a/glib.h +++ b/glib.h @@ -49,16 +49,12 @@ * 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. @@ -262,11 +258,11 @@ extern "C" { * 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 @@ -703,15 +699,16 @@ typedef struct _GRelation GRelation; 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, @@ -720,6 +717,7 @@ typedef enum G_TRAVERSE_MASK = 0x03 } GTraverseFlags; +/* Tree traverse orders */ typedef enum { G_IN_ORDER, @@ -807,37 +805,6 @@ typedef gint (*GTraverseFunc) (gpointer key, typedef void (*GVoidFunc) (void); -struct _GList -{ - gpointer data; - GList *next; - GList *prev; -}; - -struct _GSList -{ - gpointer data; - GSList *next; -}; - -struct _GStack -{ - GList *list; -}; - -struct _GQueue -{ - GList *list; - GList *list_end; - guint list_size; -}; - -struct _GString -{ - gchar *str; - gint len; -}; - struct _GArray { gchar *data; @@ -850,23 +817,54 @@ struct _GByteArray guint len; }; +struct _GDebugKey +{ + gchar *key; + guint value; +}; + +struct _GList +{ + gpointer data; + GList *next; + GList *prev; +}; + struct _GPtrArray { gpointer *pdata; guint len; }; +struct _GQueue +{ + GList *head; + GList *tail; + guint length; +}; + +struct _GSList +{ + gpointer data; + GSList *next; +}; + +struct _GString +{ + gchar *str; + gint len; +}; + +struct _GTrashStack +{ + GTrashStack *next; +}; + struct _GTuples { guint len; }; -struct _GDebugKey -{ - gchar *key; - guint value; -}; - /* Doubly linked lists */ @@ -887,12 +885,12 @@ GList* g_list_insert_sorted (GList *list, 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, @@ -942,7 +940,9 @@ GSList* g_slist_concat (GSList *list1, 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, @@ -965,67 +965,28 @@ GSList* g_slist_sort (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 @@ -1554,9 +1515,7 @@ gchar* g_strconcat (const gchar *string1, ...); /* 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, @@ -1684,6 +1643,71 @@ g_bit_storage (guint number) } #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); @@ -1696,36 +1720,6 @@ gchar* g_string_chunk_insert_const (GStringChunk *chunk, /* 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, @@ -1759,20 +1753,6 @@ void g_string_sprintf (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 @@ -2370,6 +2350,7 @@ gsize g_date_strftime (gchar *s, const gchar *format, GDate *date); + /* GRelation * * Indexed Relations. Imagine a really simple table in a @@ -2567,9 +2548,11 @@ struct _GSourceFuncs { 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); diff --git a/glib.spec.in b/glib.spec.in index 3ad9bd123..d4ef16540 100644 --- a/glib.spec.in +++ b/glib.spec.in @@ -1,6 +1,6 @@ # 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 diff --git a/glib/Makefile.am b/glib/Makefile.am index d6931be0a..de995ccb7 100644 --- a/glib/Makefile.am +++ b/glib/Makefile.am @@ -48,7 +48,6 @@ libglib_la_SOURCES = \ grand.c \ gscanner.c \ gslist.c \ - gstack.c \ gstrfuncs.c \ gstring.c \ gthread.c \ diff --git a/glib/gbacktrace.c b/glib/gbacktrace.c index 6e6e74f66..d39cb2c30 100644 --- a/glib/gbacktrace.c +++ b/glib/gbacktrace.c @@ -111,7 +111,14 @@ g_on_error_query (const gchar *prg_name) 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') diff --git a/glib/gdate.c b/glib/gdate.c index fe4403230..013ecd756 100644 --- a/glib/gdate.c +++ b/glib/gdate.c @@ -28,6 +28,11 @@ * MT safe */ +#define DEBUG_MSG(x) /* */ +#ifdef G_ENABLE_DEBUG +/* #define DEBUG_MSG(args) g_message args ; */ +#endif + #ifdef HAVE_CONFIG_H #include #endif @@ -453,7 +458,7 @@ g_date_fill_parse_tokens (const gchar *str, GDateParseTokens *pt) { 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. @@ -609,23 +614,15 @@ g_date_prepare_to_parse (const gchar *str, GDateParseTokens *pt) } #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; @@ -648,10 +645,8 @@ g_date_prepare_to_parse (const gchar *str, GDateParseTokens *pt) } ++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 } @@ -675,12 +670,8 @@ g_date_set_parse (GDate *d, 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) @@ -801,7 +792,7 @@ g_date_set_parse (GDate *d, } #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); } diff --git a/glib/gerror.c b/glib/gerror.c index 6e6e74f66..d39cb2c30 100644 --- a/glib/gerror.c +++ b/glib/gerror.c @@ -111,7 +111,14 @@ g_on_error_query (const gchar *prg_name) 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') diff --git a/glib/giounix.c b/glib/giounix.c index 4944d8f09..108527516 100644 --- a/glib/giounix.c +++ b/glib/giounix.c @@ -78,9 +78,11 @@ static guint g_io_unix_add_watch (GIOChannel *channel, 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); @@ -105,7 +107,8 @@ GIOFuncs unix_channel_funcs = { static gboolean g_io_unix_prepare (gpointer source_data, GTimeVal *current_time, - gint *timeout) + gint *timeout, + gpointer user_data) { *timeout = -1; return FALSE; @@ -113,7 +116,8 @@ g_io_unix_prepare (gpointer source_data, static gboolean g_io_unix_check (gpointer source_data, - GTimeVal *current_time) + GTimeVal *current_time, + gpointer user_data) { GIOUnixWatch *data = source_data; diff --git a/glib/glib.def b/glib/glib.def index 134ce26bb..7e6390722 100644 --- a/glib/glib.def +++ b/glib/glib.def @@ -158,7 +158,6 @@ EXPORTS g_list_append g_list_concat g_list_copy - g_list_delete g_list_find g_list_find_custom g_list_first @@ -256,13 +255,6 @@ EXPORTS 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 @@ -344,9 +336,6 @@ EXPORTS 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 diff --git a/glib/glib.h b/glib/glib.h index 8f4975a1d..d04499ad1 100644 --- a/glib/glib.h +++ b/glib/glib.h @@ -49,16 +49,12 @@ * 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. @@ -262,11 +258,11 @@ extern "C" { * 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 @@ -703,15 +699,16 @@ typedef struct _GRelation GRelation; 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, @@ -720,6 +717,7 @@ typedef enum G_TRAVERSE_MASK = 0x03 } GTraverseFlags; +/* Tree traverse orders */ typedef enum { G_IN_ORDER, @@ -807,37 +805,6 @@ typedef gint (*GTraverseFunc) (gpointer key, typedef void (*GVoidFunc) (void); -struct _GList -{ - gpointer data; - GList *next; - GList *prev; -}; - -struct _GSList -{ - gpointer data; - GSList *next; -}; - -struct _GStack -{ - GList *list; -}; - -struct _GQueue -{ - GList *list; - GList *list_end; - guint list_size; -}; - -struct _GString -{ - gchar *str; - gint len; -}; - struct _GArray { gchar *data; @@ -850,23 +817,54 @@ struct _GByteArray guint len; }; +struct _GDebugKey +{ + gchar *key; + guint value; +}; + +struct _GList +{ + gpointer data; + GList *next; + GList *prev; +}; + struct _GPtrArray { gpointer *pdata; guint len; }; +struct _GQueue +{ + GList *head; + GList *tail; + guint length; +}; + +struct _GSList +{ + gpointer data; + GSList *next; +}; + +struct _GString +{ + gchar *str; + gint len; +}; + +struct _GTrashStack +{ + GTrashStack *next; +}; + struct _GTuples { guint len; }; -struct _GDebugKey -{ - gchar *key; - guint value; -}; - /* Doubly linked lists */ @@ -887,12 +885,12 @@ GList* g_list_insert_sorted (GList *list, 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, @@ -942,7 +940,9 @@ GSList* g_slist_concat (GSList *list1, 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, @@ -965,67 +965,28 @@ GSList* g_slist_sort (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 @@ -1554,9 +1515,7 @@ gchar* g_strconcat (const gchar *string1, ...); /* 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, @@ -1684,6 +1643,71 @@ g_bit_storage (guint number) } #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); @@ -1696,36 +1720,6 @@ gchar* g_string_chunk_insert_const (GStringChunk *chunk, /* 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, @@ -1759,20 +1753,6 @@ void g_string_sprintf (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 @@ -2370,6 +2350,7 @@ gsize g_date_strftime (gchar *s, const gchar *format, GDate *date); + /* GRelation * * Indexed Relations. Imagine a really simple table in a @@ -2567,9 +2548,11 @@ struct _GSourceFuncs { 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); diff --git a/glib/glist.c b/glib/glist.c index 3c87a8f1e..b4a89cdff 100644 --- a/glib/glist.c +++ b/glib/glist.c @@ -100,7 +100,7 @@ g_list_pop_allocator (void) G_UNLOCK (current_allocator); } -GList* +inline GList* g_list_alloc (void) { GList *list; @@ -153,7 +153,7 @@ g_list_free (GList *list) } } -void +inline void g_list_free_1 (GList *list) { if (list) @@ -293,7 +293,7 @@ g_list_remove (GList *list, return list; } -GList* +inline GList* g_list_remove_link (GList *list, GList *link) { @@ -314,9 +314,9 @@ g_list_remove_link (GList *list, 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); @@ -324,7 +324,6 @@ g_list_delete (GList *list, GList *link) return list; } - GList* g_list_copy (GList *list) { diff --git a/glib/gmain.c b/glib/gmain.c index c95dc2dd0..20b1afb91 100644 --- a/glib/gmain.c +++ b/glib/gmain.c @@ -33,6 +33,11 @@ #include "config.h" +/* uncomment the next line to get poll() debugging info */ +/* #define G_MAIN_POLL_DEBUG */ + + + #include "glib.h" #include #include @@ -107,20 +112,25 @@ static void g_main_poll (gint timeout, 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); @@ -167,9 +177,16 @@ static HANDLE wake_up_semaphore = NULL; #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 @@ -329,6 +346,9 @@ g_poll (GPollFD *fds, guint nfds, gint timeout) #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 */ @@ -467,17 +487,9 @@ g_source_add (gint priority, #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; @@ -706,6 +718,15 @@ g_main_iterate (gboolean block, 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) @@ -725,7 +746,7 @@ g_main_iterate (gboolean block, 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)) @@ -743,13 +764,14 @@ g_main_iterate (gboolean block, { 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); @@ -811,13 +833,14 @@ g_main_iterate (gboolean block, 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); @@ -845,7 +868,7 @@ g_main_iterate (gboolean block, hook = g_hook_next_valid (&source_list, hook, TRUE); } - + /* Now invoke the callbacks */ if (pending_dispatches) @@ -906,7 +929,7 @@ g_main_run (GMainLoop *loop) "prepare() member or from a second thread, iteration not possible"); return; } - + loop->is_running = TRUE; while (loop->is_running) g_main_iterate (TRUE, TRUE); @@ -942,11 +965,14 @@ g_main_poll (gint timeout, 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) @@ -976,21 +1002,75 @@ g_main_poll (gint timeout, 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) { @@ -1001,15 +1081,27 @@ g_main_poll (gint timeout, } 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); @@ -1061,6 +1153,13 @@ g_main_add_poll_unlocked (gint priority, 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 @@ -1092,6 +1191,13 @@ g_main_remove_poll (GPollFD *fd) 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); } @@ -1108,12 +1214,30 @@ g_main_set_poll_func (GPollFunc func) #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; @@ -1127,8 +1251,9 @@ g_timeout_prepare (gpointer 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; @@ -1203,9 +1328,10 @@ g_timeout_add (guint32 interval, /* 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; @@ -1213,7 +1339,8 @@ g_idle_prepare (gpointer source_data, static gboolean g_idle_check (gpointer source_data, - GTimeVal *current_time) + GTimeVal *current_time, + gpointer user_data) { return TRUE; } diff --git a/glib/gmem.c b/glib/gmem.c index 80f930107..88a49e1df 100644 --- a/glib/gmem.c +++ b/glib/gmem.c @@ -60,11 +60,11 @@ #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() @@ -144,7 +144,7 @@ static gulong allocated_mem = 0; 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 */ diff --git a/glib/gqueue.c b/glib/gqueue.c index b516b2474..e2a5b7e68 100644 --- a/glib/gqueue.c +++ b/glib/gqueue.c @@ -1,5 +1,8 @@ /* 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 @@ -17,138 +20,235 @@ * Boston, MA 02111-1307, USA. */ +/* + * MT safe + */ -#ifdef HAVE_CONFIG_H -# include -#endif - -#include +#include "glib.h" +G_LOCK_DEFINE_STATIC (queue_memchunk); +static GMemChunk *queue_memchunk = NULL; +static GTrashStack *free_queue_nodes = NULL; - -GQueue * -g_queue_new (void) +GQueue* +g_queue_create (void) { - GQueue *q = g_new (GQueue, 1); + GQueue *queue; - q->list = q->list_end = NULL; - q->list_size = 0; + G_LOCK (queue_memchunk); + queue = g_trash_stack_pop (&free_queue_nodes); - return q; + 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); + + queue->head = NULL; + queue->tail = NULL; + queue->length = 0; + + 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); + + G_LOCK (queue_memchunk); + g_trash_stack_push (&free_queue_nodes, queue); + G_UNLOCK (queue_memchunk); } - -guint -g_queue_get_size (GQueue *q) -{ - return (q == NULL) ? 0 : q->list_size; -} - - 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; - - q->list_size++; - } + queue->head = g_list_prepend (queue->head, data); + if (!queue->tail) + queue->tail = queue->head; + queue->length++; } - void -g_queue_push_back (GQueue *q, gpointer data) +g_queue_push_head_link (GQueue *queue, + GList *link) { - if (q) - { - q->list_end = g_list_append (q->list_end, data); + 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); - if (! q->list) - q->list = q->list_end; - else - q->list_end = q->list_end->next; - - q->list_size++; - } + 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_tail_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->prev = queue->tail; + if (queue->tail) + queue->tail->next = link; + else + queue->head = link; + queue->tail = link; + queue->length++; +} gpointer -g_queue_pop_front (GQueue *q) +g_queue_pop_head (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; + gpointer data = node->data; - 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; else - { - q->list = node->next; - q->list->prev = NULL; - q->list_size--; - } - + queue->tail = NULL; g_list_free_1 (node); + queue->length--; + + return data; } - return data; + return NULL; } +GList* +g_queue_pop_head_link (GQueue *queue) +{ + g_return_val_if_fail (queue != NULL, NULL); + + if (queue->head) + { + GList *node = queue->head; + + queue->head = node->next; + if (queue->head) + { + queue->head->prev = NULL; + node->next = NULL; + } + else + queue->tail = NULL; + queue->length--; + + return node; + } + + 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; - node = q->list_end; - data = node->data; - - if (! node->prev) - { - q->list = q->list_end = NULL; - q->list_size = 0; - } + queue->tail = node->prev; + if (queue->tail) + queue->tail->next = NULL; else - { - q->list_end = node->prev; - q->list_end->next = NULL; - q->list_size--; - } - + queue->head = NULL; + queue->length--; g_list_free_1 (node); - } - return data; + return data; + } + + return NULL; } +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) + { + queue->tail->next = NULL; + node->prev = NULL; + } + else + queue->head = NULL; + queue->length--; + + return node; + } + + return NULL; +} +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; +} diff --git a/glib/gscanner.c b/glib/gscanner.c index 832ca31fb..7d106e4a5 100644 --- a/glib/gscanner.c +++ b/glib/gscanner.c @@ -973,7 +973,7 @@ g_scanner_unexp_token (GScanner *scanner, "%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: @@ -1075,6 +1075,10 @@ g_scanner_unexp_token (GScanner *scanner, identifier_spec); break; + case G_TOKEN_EOF: + g_snprintf (expected_string, expected_string_len, "end of file"); + break; + case G_TOKEN_NONE: break; } diff --git a/glib/gslist.c b/glib/gslist.c index ef5615f67..a89f477fb 100644 --- a/glib/gslist.c +++ b/glib/gslist.c @@ -100,7 +100,7 @@ g_slist_pop_allocator (void) G_UNLOCK (current_allocator); } -GSList* +inline GSList* g_slist_alloc (void) { GSList *list; @@ -153,7 +153,7 @@ g_slist_free (GSList *list) } } -void +inline void g_slist_free_1 (GSList *list) { if (list) @@ -290,7 +290,7 @@ g_slist_remove (GSList *list, return list; } -GSList* +inline GSList* g_slist_remove_link (GSList *list, GSList *link) { @@ -320,6 +320,16 @@ g_slist_remove_link (GSList *list, return list; } +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) { diff --git a/glib/gstrfuncs.c b/glib/gstrfuncs.c index 2de42aeab..37df96315 100644 --- a/glib/gstrfuncs.c +++ b/glib/gstrfuncs.c @@ -674,7 +674,7 @@ extern const char * strsignal(int); #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) @@ -932,9 +932,9 @@ g_printf_string_upper_bound (const gchar* format, } void -g_strdown (gchar *string) +g_strdown (gchar *string) { - register gchar *s; + register guchar *s; g_return_if_fail (string != NULL); @@ -948,9 +948,9 @@ g_strdown (gchar *string) } void -g_strup (gchar *string) +g_strup (gchar *string) { - register gchar *s; + register guchar *s; g_return_if_fail (string != NULL); @@ -964,7 +964,7 @@ g_strup (gchar *string) } void -g_strreverse (gchar *string) +g_strreverse (gchar *string) { g_return_if_fail (string != NULL); @@ -993,6 +993,9 @@ g_strcasecmp (const gchar *s1, 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; @@ -1077,6 +1080,8 @@ g_strescape (gchar *string) guint escapes_needed = 0; gchar *p = string; + g_message ("g_strescape() is deprecated"); + g_return_val_if_fail (string != NULL, NULL); while (*p != '\000') @@ -1108,14 +1113,14 @@ g_strescape (gchar *string) 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; } @@ -1130,7 +1135,8 @@ g_strchomp (gchar *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; @@ -1213,7 +1219,7 @@ g_strjoinv (const gchar *separator, g_return_val_if_fail (str_array != NULL, NULL); - if(separator == NULL) + if (separator == NULL) separator = ""; if (*str_array) @@ -1250,42 +1256,47 @@ g_strjoin (const gchar *separator, guint len; guint separator_len; - if(separator == NULL) + if (separator == NULL) separator = ""; separator_len = strlen (separator); - va_start(args, separator); + va_start (args, separator); - s = va_arg(args, gchar *); + s = va_arg (args, gchar*); - if(s) { - len = strlen(s) + 1; + if (s) + { + len = strlen (s); - while((s = va_arg(args, gchar*))) - { - len += separator_len + strlen(s); - } - va_end(args); + s = va_arg (args, gchar*); + while (s) + { + len += separator_len + strlen (s); + s = va_arg (args, gchar*); + } + va_end (args); - string = g_new (gchar, len); + string = g_new (gchar, len + 1); + *string = 0; - va_start(args, separator); + va_start (args, separator); - *string = 0; - s = va_arg(args, gchar*); - strcat (string, s); + s = va_arg (args, gchar*); + strcat (string, s); - while((s = va_arg(args, gchar*))) - { - strcat(string, separator); - strcat(string, s); - } + s = va_arg (args, gchar*); + while (s) + { + strcat (string, separator); + strcat (string, s); + s = va_arg (args, gchar*); + } + } + else + string = g_strdup (""); - } else - string = g_strdup(""); - - va_end(args); + va_end (args); return string; } diff --git a/glib/gstring.c b/glib/gstring.c index a6c7e5bfb..f5bab71e3 100644 --- a/glib/gstring.c +++ b/glib/gstring.c @@ -1,6 +1,5 @@ /* 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 @@ -43,12 +42,6 @@ #include #include "glib.h" -#ifdef NATIVE_WIN32 -#include /* For _read */ -#endif - -#define G_STRING_BLOCK_SIZE 512 - typedef struct _GRealStringChunk GRealStringChunk; typedef struct _GRealString GRealString; @@ -201,7 +194,7 @@ g_string_chunk_insert_const (GStringChunk *fchunk, /* Strings. */ -static gint +static inline gint nearest_power (gint num) { gint n = 1; @@ -212,17 +205,6 @@ nearest_power (gint num) 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) { @@ -233,15 +215,6 @@ 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) { @@ -474,7 +447,7 @@ GString* g_string_down (GString *fstring) { GRealString *string = (GRealString*)fstring; - gchar *s; + guchar *s; g_return_val_if_fail (string != NULL, NULL); @@ -493,7 +466,7 @@ GString* g_string_up (GString *fstring) { GRealString *string = (GRealString*)fstring; - gchar *s; + guchar *s; g_return_val_if_fail (string != NULL, NULL); @@ -545,192 +518,3 @@ g_string_sprintfa (GString *string, 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); -} diff --git a/glib/gutils.c b/glib/gutils.c index 513af9f39..5e558e466 100644 --- a/glib/gutils.c +++ b/glib/gutils.c @@ -155,7 +155,13 @@ g_snprintf (gchar *str, 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; @@ -185,6 +191,12 @@ g_vsnprintf (gchar *str, retval = vsnprintf (str, n, fmt, args); + if (retval < 0) + { + str[n-1] = '\0'; + retval = strlen (str); + } + return retval; #else /* !HAVE_VSNPRINTF */ gchar *printed; diff --git a/glist.c b/glist.c index 3c87a8f1e..b4a89cdff 100644 --- a/glist.c +++ b/glist.c @@ -100,7 +100,7 @@ g_list_pop_allocator (void) G_UNLOCK (current_allocator); } -GList* +inline GList* g_list_alloc (void) { GList *list; @@ -153,7 +153,7 @@ g_list_free (GList *list) } } -void +inline void g_list_free_1 (GList *list) { if (list) @@ -293,7 +293,7 @@ g_list_remove (GList *list, return list; } -GList* +inline GList* g_list_remove_link (GList *list, GList *link) { @@ -314,9 +314,9 @@ g_list_remove_link (GList *list, 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); @@ -324,7 +324,6 @@ g_list_delete (GList *list, GList *link) return list; } - GList* g_list_copy (GList *list) { diff --git a/gmain.c b/gmain.c index c95dc2dd0..20b1afb91 100644 --- a/gmain.c +++ b/gmain.c @@ -33,6 +33,11 @@ #include "config.h" +/* uncomment the next line to get poll() debugging info */ +/* #define G_MAIN_POLL_DEBUG */ + + + #include "glib.h" #include #include @@ -107,20 +112,25 @@ static void g_main_poll (gint timeout, 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); @@ -167,9 +177,16 @@ static HANDLE wake_up_semaphore = NULL; #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 @@ -329,6 +346,9 @@ g_poll (GPollFD *fds, guint nfds, gint timeout) #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 */ @@ -467,17 +487,9 @@ g_source_add (gint priority, #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; @@ -706,6 +718,15 @@ g_main_iterate (gboolean block, 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) @@ -725,7 +746,7 @@ g_main_iterate (gboolean block, 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)) @@ -743,13 +764,14 @@ g_main_iterate (gboolean block, { 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); @@ -811,13 +833,14 @@ g_main_iterate (gboolean block, 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); @@ -845,7 +868,7 @@ g_main_iterate (gboolean block, hook = g_hook_next_valid (&source_list, hook, TRUE); } - + /* Now invoke the callbacks */ if (pending_dispatches) @@ -906,7 +929,7 @@ g_main_run (GMainLoop *loop) "prepare() member or from a second thread, iteration not possible"); return; } - + loop->is_running = TRUE; while (loop->is_running) g_main_iterate (TRUE, TRUE); @@ -942,11 +965,14 @@ g_main_poll (gint timeout, 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) @@ -976,21 +1002,75 @@ g_main_poll (gint timeout, 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) { @@ -1001,15 +1081,27 @@ g_main_poll (gint timeout, } 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); @@ -1061,6 +1153,13 @@ g_main_add_poll_unlocked (gint priority, 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 @@ -1092,6 +1191,13 @@ g_main_remove_poll (GPollFD *fd) 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); } @@ -1108,12 +1214,30 @@ g_main_set_poll_func (GPollFunc func) #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; @@ -1127,8 +1251,9 @@ g_timeout_prepare (gpointer 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; @@ -1203,9 +1328,10 @@ g_timeout_add (guint32 interval, /* 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; @@ -1213,7 +1339,8 @@ g_idle_prepare (gpointer source_data, static gboolean g_idle_check (gpointer source_data, - GTimeVal *current_time) + GTimeVal *current_time, + gpointer user_data) { return TRUE; } diff --git a/gmem.c b/gmem.c index 80f930107..88a49e1df 100644 --- a/gmem.c +++ b/gmem.c @@ -60,11 +60,11 @@ #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() @@ -144,7 +144,7 @@ static gulong allocated_mem = 0; 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 */ diff --git a/gmodule/ChangeLog b/gmodule/ChangeLog index 94b1fe9c9..7a4232668 100644 --- a/gmodule/ChangeLog +++ b/gmodule/ChangeLog @@ -1,3 +1,7 @@ +Sat Jul 24 20:47:18 1999 Tim Janik + + * merged changes from GLib-1-2 branch. + 1999-05-06 Tor Lillqvist * gmodule.c: Remove LibMain. @@ -16,6 +20,11 @@ Wed Apr 7 20:12:58 1999 ape@lrdpf.spacetec.no (Asbjorn Pettersen) * 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 + + * 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 * gmodule.c (CHECK_ERROR): be more descriptive on unsupported systems. diff --git a/gmodule/Makefile.am b/gmodule/Makefile.am index 8f3f7b955..331a842a2 100644 --- a/gmodule/Makefile.am +++ b/gmodule/Makefile.am @@ -37,11 +37,11 @@ libgmodule_la_LIBADD = @G_MODULE_LIBS_EXTRA@ @G_MODULE_LIBS@ # $(libglib) 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@ diff --git a/gmodule/gmodule.c b/gmodule/gmodule.c index e72d4cd11..d2a6f9942 100644 --- a/gmodule/gmodule.c +++ b/gmodule/gmodule.c @@ -127,7 +127,7 @@ g_module_set_error (const gchar *error) /* --- 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) @@ -139,8 +139,8 @@ g_module_set_error (const gchar *error) #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, @@ -176,7 +176,7 @@ _g_module_build_path (const gchar *directory, gboolean g_module_supported (void) { - CHECK_ERROR (FALSE); + SUPPORT_OR_RETURN (FALSE); return TRUE; } @@ -188,7 +188,7 @@ g_module_open (const gchar *file_name, GModule *module; gpointer handle; - CHECK_ERROR (NULL); + SUPPORT_OR_RETURN (NULL); if (!file_name) { @@ -284,7 +284,7 @@ g_module_open (const gchar *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); @@ -354,9 +354,10 @@ g_module_symbol (GModule *module, 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); @@ -374,7 +375,8 @@ g_module_symbol (GModule *module, *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; diff --git a/gqueue.c b/gqueue.c index b516b2474..e2a5b7e68 100644 --- a/gqueue.c +++ b/gqueue.c @@ -1,5 +1,8 @@ /* 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 @@ -17,138 +20,235 @@ * Boston, MA 02111-1307, USA. */ +/* + * MT safe + */ -#ifdef HAVE_CONFIG_H -# include -#endif - -#include +#include "glib.h" +G_LOCK_DEFINE_STATIC (queue_memchunk); +static GMemChunk *queue_memchunk = NULL; +static GTrashStack *free_queue_nodes = NULL; - -GQueue * -g_queue_new (void) +GQueue* +g_queue_create (void) { - GQueue *q = g_new (GQueue, 1); + GQueue *queue; - q->list = q->list_end = NULL; - q->list_size = 0; + G_LOCK (queue_memchunk); + queue = g_trash_stack_pop (&free_queue_nodes); - return q; + 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); + + queue->head = NULL; + queue->tail = NULL; + queue->length = 0; + + 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); + + G_LOCK (queue_memchunk); + g_trash_stack_push (&free_queue_nodes, queue); + G_UNLOCK (queue_memchunk); } - -guint -g_queue_get_size (GQueue *q) -{ - return (q == NULL) ? 0 : q->list_size; -} - - 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; - - q->list_size++; - } + queue->head = g_list_prepend (queue->head, data); + if (!queue->tail) + queue->tail = queue->head; + queue->length++; } - void -g_queue_push_back (GQueue *q, gpointer data) +g_queue_push_head_link (GQueue *queue, + GList *link) { - if (q) - { - q->list_end = g_list_append (q->list_end, data); + 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); - if (! q->list) - q->list = q->list_end; - else - q->list_end = q->list_end->next; - - q->list_size++; - } + 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_tail_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->prev = queue->tail; + if (queue->tail) + queue->tail->next = link; + else + queue->head = link; + queue->tail = link; + queue->length++; +} gpointer -g_queue_pop_front (GQueue *q) +g_queue_pop_head (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; + gpointer data = node->data; - 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; else - { - q->list = node->next; - q->list->prev = NULL; - q->list_size--; - } - + queue->tail = NULL; g_list_free_1 (node); + queue->length--; + + return data; } - return data; + return NULL; } +GList* +g_queue_pop_head_link (GQueue *queue) +{ + g_return_val_if_fail (queue != NULL, NULL); + + if (queue->head) + { + GList *node = queue->head; + + queue->head = node->next; + if (queue->head) + { + queue->head->prev = NULL; + node->next = NULL; + } + else + queue->tail = NULL; + queue->length--; + + return node; + } + + 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; - node = q->list_end; - data = node->data; - - if (! node->prev) - { - q->list = q->list_end = NULL; - q->list_size = 0; - } + queue->tail = node->prev; + if (queue->tail) + queue->tail->next = NULL; else - { - q->list_end = node->prev; - q->list_end->next = NULL; - q->list_size--; - } - + queue->head = NULL; + queue->length--; g_list_free_1 (node); - } - return data; + return data; + } + + return NULL; } +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) + { + queue->tail->next = NULL; + node->prev = NULL; + } + else + queue->head = NULL; + queue->length--; + + return node; + } + + return NULL; +} +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; +} diff --git a/gscanner.c b/gscanner.c index 832ca31fb..7d106e4a5 100644 --- a/gscanner.c +++ b/gscanner.c @@ -973,7 +973,7 @@ g_scanner_unexp_token (GScanner *scanner, "%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: @@ -1075,6 +1075,10 @@ g_scanner_unexp_token (GScanner *scanner, identifier_spec); break; + case G_TOKEN_EOF: + g_snprintf (expected_string, expected_string_len, "end of file"); + break; + case G_TOKEN_NONE: break; } diff --git a/gslist.c b/gslist.c index ef5615f67..a89f477fb 100644 --- a/gslist.c +++ b/gslist.c @@ -100,7 +100,7 @@ g_slist_pop_allocator (void) G_UNLOCK (current_allocator); } -GSList* +inline GSList* g_slist_alloc (void) { GSList *list; @@ -153,7 +153,7 @@ g_slist_free (GSList *list) } } -void +inline void g_slist_free_1 (GSList *list) { if (list) @@ -290,7 +290,7 @@ g_slist_remove (GSList *list, return list; } -GSList* +inline GSList* g_slist_remove_link (GSList *list, GSList *link) { @@ -320,6 +320,16 @@ g_slist_remove_link (GSList *list, return list; } +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) { diff --git a/gstack.c b/gstack.c deleted file mode 100644 index cd8878911..000000000 --- a/gstack.c +++ /dev/null @@ -1,74 +0,0 @@ -/* 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 -#endif -#include - - -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; -} - - diff --git a/gstrfuncs.c b/gstrfuncs.c index 2de42aeab..37df96315 100644 --- a/gstrfuncs.c +++ b/gstrfuncs.c @@ -674,7 +674,7 @@ extern const char * strsignal(int); #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) @@ -932,9 +932,9 @@ g_printf_string_upper_bound (const gchar* format, } void -g_strdown (gchar *string) +g_strdown (gchar *string) { - register gchar *s; + register guchar *s; g_return_if_fail (string != NULL); @@ -948,9 +948,9 @@ g_strdown (gchar *string) } void -g_strup (gchar *string) +g_strup (gchar *string) { - register gchar *s; + register guchar *s; g_return_if_fail (string != NULL); @@ -964,7 +964,7 @@ g_strup (gchar *string) } void -g_strreverse (gchar *string) +g_strreverse (gchar *string) { g_return_if_fail (string != NULL); @@ -993,6 +993,9 @@ g_strcasecmp (const gchar *s1, 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; @@ -1077,6 +1080,8 @@ g_strescape (gchar *string) guint escapes_needed = 0; gchar *p = string; + g_message ("g_strescape() is deprecated"); + g_return_val_if_fail (string != NULL, NULL); while (*p != '\000') @@ -1108,14 +1113,14 @@ g_strescape (gchar *string) 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; } @@ -1130,7 +1135,8 @@ g_strchomp (gchar *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; @@ -1213,7 +1219,7 @@ g_strjoinv (const gchar *separator, g_return_val_if_fail (str_array != NULL, NULL); - if(separator == NULL) + if (separator == NULL) separator = ""; if (*str_array) @@ -1250,42 +1256,47 @@ g_strjoin (const gchar *separator, guint len; guint separator_len; - if(separator == NULL) + if (separator == NULL) separator = ""; separator_len = strlen (separator); - va_start(args, separator); + va_start (args, separator); - s = va_arg(args, gchar *); + s = va_arg (args, gchar*); - if(s) { - len = strlen(s) + 1; + if (s) + { + len = strlen (s); - while((s = va_arg(args, gchar*))) - { - len += separator_len + strlen(s); - } - va_end(args); + s = va_arg (args, gchar*); + while (s) + { + len += separator_len + strlen (s); + s = va_arg (args, gchar*); + } + va_end (args); - string = g_new (gchar, len); + string = g_new (gchar, len + 1); + *string = 0; - va_start(args, separator); + va_start (args, separator); - *string = 0; - s = va_arg(args, gchar*); - strcat (string, s); + s = va_arg (args, gchar*); + strcat (string, s); - while((s = va_arg(args, gchar*))) - { - strcat(string, separator); - strcat(string, s); - } + s = va_arg (args, gchar*); + while (s) + { + strcat (string, separator); + strcat (string, s); + s = va_arg (args, gchar*); + } + } + else + string = g_strdup (""); - } else - string = g_strdup(""); - - va_end(args); + va_end (args); return string; } diff --git a/gstring.c b/gstring.c index a6c7e5bfb..f5bab71e3 100644 --- a/gstring.c +++ b/gstring.c @@ -1,6 +1,5 @@ /* 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 @@ -43,12 +42,6 @@ #include #include "glib.h" -#ifdef NATIVE_WIN32 -#include /* For _read */ -#endif - -#define G_STRING_BLOCK_SIZE 512 - typedef struct _GRealStringChunk GRealStringChunk; typedef struct _GRealString GRealString; @@ -201,7 +194,7 @@ g_string_chunk_insert_const (GStringChunk *fchunk, /* Strings. */ -static gint +static inline gint nearest_power (gint num) { gint n = 1; @@ -212,17 +205,6 @@ nearest_power (gint num) 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) { @@ -233,15 +215,6 @@ 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) { @@ -474,7 +447,7 @@ GString* g_string_down (GString *fstring) { GRealString *string = (GRealString*)fstring; - gchar *s; + guchar *s; g_return_val_if_fail (string != NULL, NULL); @@ -493,7 +466,7 @@ GString* g_string_up (GString *fstring) { GRealString *string = (GRealString*)fstring; - gchar *s; + guchar *s; g_return_val_if_fail (string != NULL, NULL); @@ -545,192 +518,3 @@ g_string_sprintfa (GString *string, 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); -} diff --git a/gthread/ChangeLog b/gthread/ChangeLog index be3bb0fc5..4956db34d 100644 --- a/gthread/ChangeLog +++ b/gthread/ChangeLog @@ -43,6 +43,11 @@ 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 + + * gthread-posix.c: Fixed broken mutex_trylock and slightly broken + cond_timed_wait functions. + 1999-02-15 Sebastian Wilhelmi * testgthread.c (test_mutexes): Use new signature of diff --git a/gutils.c b/gutils.c index 513af9f39..5e558e466 100644 --- a/gutils.c +++ b/gutils.c @@ -155,7 +155,13 @@ g_snprintf (gchar *str, 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; @@ -185,6 +191,12 @@ g_vsnprintf (gchar *str, retval = vsnprintf (str, n, fmt, args); + if (retval < 0) + { + str[n-1] = '\0'; + retval = strlen (str); + } + return retval; #else /* !HAVE_VSNPRINTF */ gchar *printed; diff --git a/ltconfig b/ltconfig index a362c48d3..65ec6f65d 100755 --- a/ltconfig +++ b/ltconfig @@ -169,8 +169,8 @@ progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` # 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" @@ -181,7 +181,8 @@ help="Try \`$progname --help' for more information." 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 @@ -201,6 +202,7 @@ need_locks=yes ac_ext=c objext=o libext=a +exeext= cache_file= old_AR="$AR" @@ -576,7 +578,7 @@ if test "$with_gcc" != yes || test -z "$CC"; then # 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 <&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 @@ -598,8 +600,8 @@ compiler="$2" 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 @@ -617,6 +619,38 @@ fi $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= @@ -739,8 +773,8 @@ if test -n "$pic_flag"; then 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 @@ -792,8 +826,8 @@ mkdir out 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 @@ -825,8 +859,8 @@ if test x"$compiler_c_o" = x"yes"; then 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 @@ -877,8 +911,8 @@ if test "$with_gcc" = yes; then 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 @@ -921,8 +955,8 @@ $rm conftest* 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 @@ -954,7 +988,7 @@ if test -z "$LD"; then 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. @@ -978,10 +1012,10 @@ if test -z "$LD"; then 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 @@ -1047,7 +1081,7 @@ hardcode_minus_L=no 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= @@ -1130,10 +1164,9 @@ EOF # 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~ @@ -1142,13 +1175,15 @@ EOF 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*) @@ -1554,11 +1589,11 @@ void nm_test_func(){} 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 @@ -1610,7 +1645,7 @@ EOF 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 @@ -1756,7 +1791,7 @@ bsdi4*) 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" @@ -1768,6 +1803,8 @@ bsdi4*) 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 @@ -1776,7 +1813,6 @@ cygwin* | mingw*) 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" @@ -1807,11 +1843,22 @@ freebsd*) 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 ;; @@ -2120,7 +2167,7 @@ else 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 @@ -2128,7 +2175,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&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 @@ -2157,12 +2204,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then 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 < @@ -2184,7 +2231,7 @@ dlopen(); ; 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 @@ -2201,7 +2248,7 @@ if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then 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 @@ -2209,7 +2256,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&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 @@ -2238,12 +2285,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then 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 < @@ -2265,7 +2312,7 @@ shl_load(); ; 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 @@ -2283,7 +2330,7 @@ if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then 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 @@ -2291,7 +2338,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&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 @@ -2345,17 +2392,17 @@ fi 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 < 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* @@ -2383,7 +2430,7 @@ done 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 @@ -2391,7 +2438,7 @@ else lt_cv_dlopen_self=cross else cat > conftest.c < @@ -2434,10 +2481,10 @@ else 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 @@ -2456,7 +2503,7 @@ echo "$ac_t""$lt_cv_dlopen_self" 1>&6 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 @@ -2464,7 +2511,7 @@ else lt_cv_dlopen_self_static=cross else cat > conftest.c < @@ -2507,10 +2554,10 @@ else 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 @@ -2729,6 +2776,9 @@ objext="$objext" # Old archive suffix (normally "a"). libext="$libext" +# Executable file suffix (normally ""). +exeext="$exeext" + # Additional compiler flags for building library objects. pic_flag=$pic_flag @@ -2897,7 +2947,7 @@ EOF 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" ;; diff --git a/ltmain.sh b/ltmain.sh index 7974c33c9..ae10cad02 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -54,8 +54,8 @@ modename="$progname" # 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." @@ -69,7 +69,7 @@ rm="rm -f" 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. @@ -638,6 +638,12 @@ compiler." # #undef WIN32_LEAN_AND_MEAN # #include # +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# # #ifdef __cplusplus # extern "C" { # #endif @@ -646,8 +652,10 @@ compiler." # } # #endif # +# #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); +# #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY @@ -790,9 +798,6 @@ compiler." # } # /* impgen.c ends here */ ;; - *-*-beos*) - allow_undefined=no - ;; *) allow_undefined=yes ;; @@ -896,6 +901,14 @@ compiler." 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 @@ -1225,7 +1238,7 @@ compiler." 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 @@ -1237,7 +1250,13 @@ compiler." -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 @@ -2040,51 +2059,6 @@ EOF # 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 @@ -2112,6 +2086,51 @@ EOF $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\" @@ -2190,8 +2209,58 @@ EOF # 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\" @@ -2204,9 +2273,21 @@ EOF 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" @@ -2216,7 +2297,7 @@ EOF 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='~' @@ -2234,6 +2315,11 @@ EOF $run $LN_S $obj $libobj || exit $? fi + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + exit 0 ;; @@ -2366,7 +2452,7 @@ EOF 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 @@ -2779,7 +2865,7 @@ else fi" else echo >> $output "\ - program='$outputname' + program='$outputname$exeext' progdir=\"\$thisdir/$objdir\" " fi @@ -3204,13 +3290,11 @@ libdir='$install_libdir'\ # 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)" @@ -3218,12 +3302,6 @@ libdir='$install_libdir'\ 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\" @@ -3655,9 +3733,7 @@ libdir='$install_libdir'\ # 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" diff --git a/sanity_check b/sanity_check index 87673c93a..953c95820 100755 --- a/sanity_check +++ b/sanity_check @@ -13,7 +13,7 @@ echo "Checking glib-$VERSION.tar.gz..." 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 diff --git a/tests/.cvsignore b/tests/.cvsignore index b0f11eec9..96958a1fa 100644 --- a/tests/.cvsignore +++ b/tests/.cvsignore @@ -34,7 +34,6 @@ dirname-test type-test strfunc-test queue-test -stack-test date-test rand-test thread-test diff --git a/tests/Makefile.am b/tests/Makefile.am index cd59973e4..1398ede01 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -5,6 +5,9 @@ EXTRA_DIST = \ makefile.msc \ makefile.cygwin +EXTRA_DIST = \ + makefile.msc + TESTS = \ array-test \ date-test \ @@ -16,7 +19,6 @@ TESTS = \ rand-test \ relation-test \ slist-test \ - stack-test \ strfunc-test \ string-test \ thread-test \ @@ -35,7 +37,6 @@ queue_test_LDADD = $(top_builddir)/libglib.la 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 \ diff --git a/tests/queue-test.c b/tests/queue-test.c index 6985bcc22..21f47d9f9 100644 --- a/tests/queue-test.c +++ b/tests/queue-test.c @@ -6,75 +6,107 @@ 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); diff --git a/tests/stack-test.c b/tests/stack-test.c deleted file mode 100644 index f29378ba3..000000000 --- a/tests/stack-test.c +++ /dev/null @@ -1,51 +0,0 @@ -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -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; -} -