mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 15:06:14 +01:00
18:36. incorporated proposed cleanups from gtk-devel-list.
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org> * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36. * incorporated proposed cleanups from gtk-devel-list. * bumped version number to GLib-1.3.1 * glib.h: * gqueue.c: * gstring.c: * glist.c: removed string tokenisation (we got g_strsplit() and g_strjoin() already) and readline functions. s/g_list_delete/g_list_delete_link. implemented g_slist_delete_link. removed notion of g_ATEXIT() macro in glib.h, this is an *internal* macro, g_atexit() is provided for public consumption. added GTrashStack inline utility functions. reimplement double eneded queues. removed GStack implementation, people can use a queue or a (singly) linked list for this task. deprecated g_strescape(), we need the SunOS variants here. * gdate.c: added DEBUG_MSG() macro to wrap old messages. * *.*: CVS merges. * upgrade to libtool 1.3.3.
This commit is contained in:
parent
c8a28b935c
commit
87c7aeb93b
@ -25,3 +25,4 @@ testgdateparser
|
||||
glibconfig-sysdefs.h
|
||||
glib.spec
|
||||
stamp-h.in
|
||||
glibconfig.h.win32
|
||||
|
8
AUTHORS
8
AUTHORS
@ -21,10 +21,10 @@ Manish Singh <yosh@gimp.org>
|
||||
Owen Taylor <otaylor@gtk.org>
|
||||
Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
There are also many others who have contributed patches and fixes;
|
||||
we thank them, for helping us in advancing GLIB.
|
||||
|
||||
The random number generator "Mersenne Twister", which is used by GLib,
|
||||
is developed and originally coded by:
|
||||
was developed and originally coded by:
|
||||
Makoto Matsumoto <matumoto@math.keio.ac.jp>
|
||||
Takuji Nishimura <nisimura@math.keio.ac.jp>
|
||||
|
||||
There are also many others who have contributed patches and fixes;
|
||||
we thank them, for helping us in advancing GLIB.
|
||||
|
319
ChangeLog
319
ChangeLog
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
@ -1,3 +1,32 @@
|
||||
Sat Jul 24 20:11:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
|
||||
* incorporated proposed cleanups from gtk-devel-list.
|
||||
|
||||
* bumped version number to GLib-1.3.1
|
||||
|
||||
* glib.h:
|
||||
* gqueue.c:
|
||||
* gstring.c:
|
||||
* glist.c:
|
||||
removed string tokenisation (we got g_strsplit() and g_strjoin()
|
||||
already) and readline functions.
|
||||
s/g_list_delete/g_list_delete_link.
|
||||
implemented g_slist_delete_link.
|
||||
removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
|
||||
macro, g_atexit() is provided for public consumption.
|
||||
added GTrashStack inline utility functions.
|
||||
reimplement double eneded queues.
|
||||
removed GStack implementation, people can use a queue or a (singly)
|
||||
linked list for this task.
|
||||
deprecated g_strescape(), we need the SunOS variants here.
|
||||
|
||||
* gdate.c: added DEBUG_MSG() macro to wrap old messages.
|
||||
|
||||
* *.*: CVS merges.
|
||||
|
||||
* upgrade to libtool 1.3.3.
|
||||
|
||||
1999-07-21 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Win32: With the latest gcc (2.95, pre-release), we can have binary
|
||||
@ -158,6 +187,296 @@ Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.3
|
||||
|
||||
1999-06-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
|
||||
is..... and to..... macros, which take unsigned chars, not chars!
|
||||
Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
|
||||
|
||||
Thu Jun 3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* gerror.c (g_on_error_query): check isatty() before querying so
|
||||
we don't loop endlessly
|
||||
|
||||
Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3.2
|
||||
|
||||
1999-05-26 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmain.c: provide a poll prototype for SunOS, as they do not do
|
||||
it self. Hint from Christian Parg <cparg@fs-design.de>.
|
||||
|
||||
Tue May 25 12:23:07 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
|
||||
(Reported by Charles Levert <charles@comm.polymtl.ca>)
|
||||
|
||||
Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.3
|
||||
|
||||
1999-05-08 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am tests/Makefile.am: Correct rules for making the
|
||||
win32-related files that are made from corresponding .in files.
|
||||
Is there a cleaner way than explicitly writing rules that invoke
|
||||
config.status?
|
||||
|
||||
Sat May 1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.status
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.3
|
||||
|
||||
1999-04-30 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* Makefile.am: Don't distribute glibconfig.h.win32.in, but
|
||||
glibconfig.h.win32. Generate it when making a dist. Also generate
|
||||
makefile.msc and config.h.win32 from corresponding .in files when
|
||||
making dist.
|
||||
|
||||
* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
|
||||
@GLIB_BINARY_AGE@ (needed in config.h.win32).
|
||||
|
||||
* glibconfig.h.win32.in: Use static mutex structure and initial
|
||||
value corresponding to the 1999-04-07 snapshot of pthreads-win32.
|
||||
|
||||
* tests/Makefile.am: Distribute makefile.msc. Generate it when
|
||||
making dist.
|
||||
|
||||
* tests/makefile.msc.in: New file.
|
||||
|
||||
* tests/node-test.c: Include <stdlib.h> for exit().
|
||||
|
||||
Thu Apr 29 02:16:36 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c: minor code cleanups.
|
||||
|
||||
Tue Apr 27 13:11:29 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
|
||||
the events field so we don't give IRIX fits.
|
||||
|
||||
Tue Apr 20 08:42:22 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): behave conservative with
|
||||
G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
|
||||
to be "null" in that case.
|
||||
|
||||
1999-04-20 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_vsnprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Mon Apr 19 13:42:21 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Added missing
|
||||
#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
|
||||
the first place!)
|
||||
|
||||
1999-04-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gutils.c (g_snprintf): When using the vsnprintf()
|
||||
implementation, '\0'-terminate the resulting string
|
||||
and return its length rather than -1.
|
||||
|
||||
Fri Apr 16 06:52:07 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
|
||||
expected token as well, so we get "- expected end of file" instead of
|
||||
"- expected (unknown) token <0>".
|
||||
|
||||
Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.2
|
||||
|
||||
1999-04-12 Elliot Lee <sopwith@mh69.mh.cuc.edu>
|
||||
|
||||
* g_strchug(): s/strcpy/memmove/
|
||||
|
||||
1999-04-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Adjusted the test for an unimplemented
|
||||
getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
|
||||
|
||||
Sun Apr 11 15:07:34 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: bumped versin number to GLib 1.2.2, interface 2,
|
||||
binary 2.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
Sun Apr 11 14:37:06 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
|
||||
|
||||
Sat Apr 10 19:30:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
|
||||
and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for compile
|
||||
time string concatenation.
|
||||
|
||||
Thu Apr 8 19:53:19 1999 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gmain.c (g_main_iterate): Check for two threads
|
||||
calling g_main_iterate at once.
|
||||
|
||||
* gmain.c: If the set of poll file descriptors changes
|
||||
during a call to poll(), abort that call, and start
|
||||
a new poll. My test program still segfaults
|
||||
obscurely on glibc 2.0 (in read()!!!), but now it works on
|
||||
glibc 2.1, so I'll blame something else for the other segfault.
|
||||
|
||||
1999-03-31 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Fixed slight bug, that made configure hang on some
|
||||
systems. Please do not merge this into 1.3 branch. It's taken care
|
||||
of differently there. Info from J. Rhett Aultman
|
||||
<cuplan@alley.gator.net>
|
||||
|
||||
Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.1
|
||||
|
||||
* README:
|
||||
INSTALL:
|
||||
NEWS:
|
||||
sanity_check: updated
|
||||
|
||||
* glibconfig.h.win32.in:
|
||||
Makefile.am:
|
||||
docs/glib-config.1.in:
|
||||
docs/Makefile.am: Added files used to generate new files.
|
||||
|
||||
* glibconfig.h.win32:
|
||||
docs/glib-config.1: Removed, now generated.
|
||||
|
||||
* configure.in: Added to output now-generated files.
|
||||
|
||||
Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* giounix.c: add user_data param to check and prepare functions
|
||||
|
||||
Mon Mar 22 03:54:43 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* glib.h:
|
||||
* gmain.c: add user_data to the GSource ->check and ->prepare functions,
|
||||
so it can be used to e.g. pass a GPollFd.
|
||||
(g_main_poll): only add poll records with an events mask != 0 to the
|
||||
fd_array. don't even bother calling poll_func() if fds=timeout=0.
|
||||
added debugging printouts around poll_func() invokation that can be
|
||||
enabled with #define G_MAIN_POLL_DEBUG.
|
||||
|
||||
Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* acinclude.m4
|
||||
* config.guess
|
||||
* config.sub
|
||||
* ltconfig
|
||||
* ltmain.sh: upgrade to libtool 1.2f
|
||||
|
||||
* autogen.sh: libtool is not required to autogen glib
|
||||
|
||||
* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
|
||||
needed)
|
||||
|
||||
1999-03-18 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed another stupid fault of mine: Did
|
||||
s/g_static_/g_private_/g
|
||||
|
||||
Wed Mar 17 03:17:42 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in bumped versin number to GLib 1.2.1, interface 1,
|
||||
binary 1.
|
||||
|
||||
* NEWS: updates.
|
||||
|
||||
* glib.h: added GLIB_CHECK_VERSION() macro similar to
|
||||
GTK_CHECK_VERSION().
|
||||
|
||||
Sun Mar 14 17:50:35 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
(g_mem_profile):
|
||||
(g_mem_chunk_print):
|
||||
(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
|
||||
messages.
|
||||
|
||||
* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
|
||||
to g_return_if_fail().
|
||||
* grel.c (g_*): changed a bunch of g_assert() statements to
|
||||
g_return_if_fail() and added some extra ones to check relation != NULL.
|
||||
|
||||
1999-03-12 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* configure.in: Also accept _Pctime_r instead of ctime_r, while
|
||||
seraching for the right `_REENTRANT' flag. This is for Digital
|
||||
UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
|
||||
|
||||
Tue Mar 9 23:25:50 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: check for working realloc (NULL,).
|
||||
* gmem.c (g_realloc): use malloc() for initial allocation on systems
|
||||
where realloc(NULL,) will not work (this is the case on SunOS, reported
|
||||
by Tom Geiger).
|
||||
|
||||
Mon Mar 8 07:42:08 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
|
||||
flag around the call to g_hook_free() to avoid spurious
|
||||
warnings (happens during destruction phase).
|
||||
|
||||
1999-03-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
|
||||
from config.h.win32 to glibconfig.h.win32
|
||||
|
||||
* acconfig.h, configure.in, config.h.win32: Added test for DCE
|
||||
versions of mutex_trylock and cond_timedwait. The win32 versions
|
||||
are posix, aren't they?
|
||||
|
||||
1999-03-02 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
|
||||
Friedrich Dominicus <Friedrich.Dominicus@inka.de>
|
||||
|
||||
1999-03-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gutils.c (g_get_any_init): Fixed yet another bloody
|
||||
implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
|
||||
<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
|
||||
test better than that, but have no idea, how to do that easily.
|
||||
|
||||
Sun Feb 21 22:11:51 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.2.0
|
||||
|
||||
* AUTHORS: updated
|
||||
|
||||
Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* *.[ch]: inserted additional note to look for ChangeLog and
|
||||
AUTHORS file for a log of modifications.
|
||||
|
||||
Sun Feb 21 14:01:00 1999 Dr Mike <drmike@redhat.com>
|
||||
|
||||
* Made specfile generated, tweaked slightly
|
||||
|
||||
Sat May 8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
|
4
INSTALL
4
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 ]
|
||||
|
1
MAINTAINERS
Normal file
1
MAINTAINERS
Normal file
@ -0,0 +1 @@
|
||||
Email: gtk-bugs@gimp.org
|
@ -48,7 +48,6 @@ libglib_la_SOURCES = \
|
||||
grand.c \
|
||||
gscanner.c \
|
||||
gslist.c \
|
||||
gstack.c \
|
||||
gstrfuncs.c \
|
||||
gstring.c \
|
||||
gthread.c \
|
||||
|
25
NEWS
25
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
|
||||
|
2
README
2
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.
|
||||
|
||||
|
11
configure.in
11
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)
|
||||
|
@ -16,3 +16,4 @@ Makefile.in
|
||||
*.cps
|
||||
*.fns
|
||||
*.vrs
|
||||
glib-config.1
|
||||
|
@ -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
|
||||
|
||||
|
53
docs/glib-config.1.in
Normal file
53
docs/glib-config.1.in
Normal file
@ -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.
|
@ -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')
|
||||
|
37
gdate.c
37
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 <config.h>
|
||||
#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);
|
||||
}
|
||||
|
9
gerror.c
9
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')
|
||||
|
12
giounix.c
12
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;
|
||||
|
||||
|
11
glib.def
11
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
|
||||
|
301
glib.h
301
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);
|
||||
|
@ -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
|
||||
|
@ -48,7 +48,6 @@ libglib_la_SOURCES = \
|
||||
grand.c \
|
||||
gscanner.c \
|
||||
gslist.c \
|
||||
gstack.c \
|
||||
gstrfuncs.c \
|
||||
gstring.c \
|
||||
gthread.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')
|
||||
|
37
glib/gdate.c
37
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 <config.h>
|
||||
#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);
|
||||
}
|
||||
|
@ -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')
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
301
glib/glib.h
301
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);
|
||||
|
11
glib/glist.c
11
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)
|
||||
{
|
||||
|
207
glib/gmain.c
207
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 <sys/types.h>
|
||||
#include <time.h>
|
||||
@ -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;
|
||||
}
|
||||
|
10
glib/gmem.c
10
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 */
|
||||
|
||||
|
||||
|
278
glib/gqueue.c
278
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 <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include "glib.h"
|
||||
|
||||
|
||||
G_LOCK_DEFINE_STATIC (queue_memchunk);
|
||||
static GMemChunk *queue_memchunk = NULL;
|
||||
static GTrashStack *free_queue_nodes = NULL;
|
||||
|
||||
|
||||
GQueue *
|
||||
g_queue_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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
222
glib/gstring.c
222
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 <ctype.h>
|
||||
#include "glib.h"
|
||||
|
||||
#ifdef NATIVE_WIN32
|
||||
#include <io.h> /* For _read */
|
||||
#endif
|
||||
|
||||
#define G_STRING_BLOCK_SIZE 512
|
||||
|
||||
typedef struct _GRealStringChunk GRealStringChunk;
|
||||
typedef struct _GRealString GRealString;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
11
glist.c
11
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)
|
||||
{
|
||||
|
207
gmain.c
207
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 <sys/types.h>
|
||||
#include <time.h>
|
||||
@ -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;
|
||||
}
|
||||
|
10
gmem.c
10
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 */
|
||||
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
Sat Jul 24 20:47:18 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* merged changes from GLib-1-2 branch.
|
||||
|
||||
1999-05-06 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* gmodule.c: Remove LibMain.
|
||||
@ -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 <timj@gtk.org>
|
||||
|
||||
* gmodule.c (g_module_symbol): removed inline variable assignment.
|
||||
s/CHECK_ERROR/SUPPORT_OR_RETURN/ to make the code more self descriptive.
|
||||
|
||||
Wed Feb 10 12:06:30 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gmodule.c (CHECK_ERROR): be more descriptive on unsupported systems.
|
||||
|
@ -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@
|
||||
|
@ -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;
|
||||
|
||||
|
278
gqueue.c
278
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 <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include "glib.h"
|
||||
|
||||
|
||||
G_LOCK_DEFINE_STATIC (queue_memchunk);
|
||||
static GMemChunk *queue_memchunk = NULL;
|
||||
static GTrashStack *free_queue_nodes = NULL;
|
||||
|
||||
|
||||
GQueue *
|
||||
g_queue_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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
16
gslist.c
16
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)
|
||||
{
|
||||
|
74
gstack.c
74
gstack.c
@ -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 <config.h>
|
||||
#endif
|
||||
#include <glib.h>
|
||||
|
||||
|
||||
GStack *
|
||||
g_stack_new (void)
|
||||
{
|
||||
GStack *s;
|
||||
|
||||
s = g_new (GStack, 1);
|
||||
if (!s)
|
||||
return NULL;
|
||||
|
||||
s->list = NULL;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
g_stack_free (GStack *stack)
|
||||
{
|
||||
if (stack)
|
||||
{
|
||||
if (stack->list)
|
||||
g_list_free (stack->list);
|
||||
|
||||
g_free (stack);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
gpointer
|
||||
g_stack_pop (GStack *stack)
|
||||
{
|
||||
gpointer data = NULL;
|
||||
|
||||
if ((stack) && (stack->list))
|
||||
{
|
||||
GList *node = stack->list;
|
||||
|
||||
stack->list = stack->list->next;
|
||||
|
||||
data = node->data;
|
||||
|
||||
g_list_free_1 (node);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
79
gstrfuncs.c
79
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;
|
||||
}
|
||||
|
222
gstring.c
222
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 <ctype.h>
|
||||
#include "glib.h"
|
||||
|
||||
#ifdef NATIVE_WIN32
|
||||
#include <io.h> /* For _read */
|
||||
#endif
|
||||
|
||||
#define G_STRING_BLOCK_SIZE 512
|
||||
|
||||
typedef struct _GRealStringChunk GRealStringChunk;
|
||||
typedef struct _GRealString GRealString;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
@ -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 <wilhelmi@ira.uka.de>
|
||||
|
||||
* gthread-posix.c: Fixed broken mutex_trylock and slightly broken
|
||||
cond_timed_wait functions.
|
||||
|
||||
1999-02-15 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* testgthread.c (test_mutexes): Use new signature of
|
||||
|
14
gutils.c
14
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;
|
||||
|
170
ltconfig
170
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 <<EOF
|
||||
@ -584,7 +586,7 @@ if test "$with_gcc" != yes || test -z "$CC"; then
|
||||
yes;
|
||||
#endif
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||
with_gcc=yes
|
||||
fi
|
||||
$rm conftest.c
|
||||
@ -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 <<EOF
|
||||
#line 2131 "ltconfig"
|
||||
#line 2178 "ltconfig"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
@ -2138,7 +2185,7 @@ int main() {
|
||||
dlopen()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo $progname:2141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo $progname:2188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
@ -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 <<EOF
|
||||
#line 2165 "ltconfig"
|
||||
#line 2212 "ltconfig"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char dlopen(); below. */
|
||||
#include <assert.h>
|
||||
@ -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 <<EOF
|
||||
#line 2212 "ltconfig"
|
||||
#line 2259 "ltconfig"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
@ -2219,7 +2266,7 @@ int main() {
|
||||
dld_link()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo $progname:2222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
@ -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 <<EOF
|
||||
#line 2246 "ltconfig"
|
||||
#line 2293 "ltconfig"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char shl_load(); below. */
|
||||
#include <assert.h>
|
||||
@ -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 <<EOF
|
||||
#line 2294 "ltconfig"
|
||||
#line 2341 "ltconfig"
|
||||
#include "confdefs.h"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
@ -2302,7 +2349,7 @@ int main() {
|
||||
shl_load()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo $progname:2305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo $progname:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
@ -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 <<EOF
|
||||
#line 2353 "ltconfig"
|
||||
#line 2400 "ltconfig"
|
||||
#include <$ac_hdr>
|
||||
int fnord = 0;
|
||||
EOF
|
||||
ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo $progname:2358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo $progname:2405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
@ -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 <<EOF
|
||||
#line 2394 "ltconfig"
|
||||
#line 2441 "ltconfig"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
#include <dlfcn.h>
|
||||
@ -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 <<EOF
|
||||
#line 2467 "ltconfig"
|
||||
#line 2514 "ltconfig"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
#include <dlfcn.h>
|
||||
@ -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"
|
||||
;;
|
||||
|
212
ltmain.sh
212
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 <stdio.h>
|
||||
#
|
||||
# #ifndef __CYGWIN__
|
||||
# # ifdef __CYGWIN32__
|
||||
# # define __CYGWIN__ __CYGWIN32__
|
||||
# # endif
|
||||
# #endif
|
||||
#
|
||||
# #ifdef __cplusplus
|
||||
# extern "C" {
|
||||
# #endif
|
||||
@ -646,8 +652,10 @@ compiler."
|
||||
# }
|
||||
# #endif
|
||||
#
|
||||
# #ifdef __CYGWIN__
|
||||
# #include <cygwin/cygwin_dll.h>
|
||||
# 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"
|
||||
|
@ -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
|
||||
|
@ -34,7 +34,6 @@ dirname-test
|
||||
type-test
|
||||
strfunc-test
|
||||
queue-test
|
||||
stack-test
|
||||
date-test
|
||||
rand-test
|
||||
thread-test
|
||||
|
@ -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 \
|
||||
|
@ -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);
|
||||
|
||||
|
@ -1,51 +0,0 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
GStack *s;
|
||||
|
||||
s = g_stack_new ();
|
||||
|
||||
g_assert (g_stack_empty (s) == TRUE);
|
||||
|
||||
g_stack_push (s, GINT_TO_POINTER (1));
|
||||
g_assert (g_list_length (s->list) == 1);
|
||||
g_stack_push (s, GINT_TO_POINTER (2));
|
||||
g_assert (g_list_length (s->list) == 2);
|
||||
g_stack_push (s, GINT_TO_POINTER (3));
|
||||
g_assert (g_list_length (s->list) == 3);
|
||||
g_stack_push (s, GINT_TO_POINTER (4));
|
||||
g_assert (g_list_length (s->list) == 4);
|
||||
g_stack_push (s, GINT_TO_POINTER (5));
|
||||
g_assert (g_list_length (s->list) == 5);
|
||||
|
||||
g_assert (g_stack_index (s, GINT_TO_POINTER (2)) == 3);
|
||||
|
||||
g_assert (g_stack_empty (s) == FALSE);
|
||||
|
||||
g_assert (g_stack_peek (s) == GINT_TO_POINTER (5));
|
||||
|
||||
g_assert (g_stack_pop (s) == GINT_TO_POINTER (5));
|
||||
g_assert (g_list_length (s->list) == 4);
|
||||
g_assert (g_stack_pop (s) == GINT_TO_POINTER (4));
|
||||
g_assert (g_list_length (s->list) == 3);
|
||||
g_assert (g_stack_pop (s) == GINT_TO_POINTER (3));
|
||||
g_assert (g_list_length (s->list) == 2);
|
||||
g_assert (g_stack_pop (s) == GINT_TO_POINTER (2));
|
||||
g_assert (g_list_length (s->list) == 1);
|
||||
g_assert (g_stack_pop (s) == GINT_TO_POINTER (1));
|
||||
g_assert (g_list_length (s->list) == 0);
|
||||
g_assert (g_stack_pop (s) == NULL);
|
||||
g_assert (g_list_length (s->list) == 0);
|
||||
g_assert (g_stack_pop (s) == NULL);
|
||||
g_assert (g_list_length (s->list) == 0);
|
||||
|
||||
g_stack_free (s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user