mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
version bump to 1.1.8, binary age 0, interface age 0.
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org> * configure.in: version bump to 1.1.8, binary age 0, interface age 0. * glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and g_trylock() to G_TRYLOCK(), since these are macros that expand to nothing with --disable-threads. changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE(). changed semantics of g_thread_supported to g_thread_supported() so it can be used as a function like g_module_supported(). the actuall definition is still a macro that expands into a variable for performance reasons though. various indentation and coding style cleanups. * configure.in: added --enable-threads that defaults to yes. * gmutex.c: changed tests g_thread_supported to g_thread_supported (), changed variable settings of g_thread_supported to g_threads_got_initialized. garray.c: gcache.c: gdataset.c: gdate.c: ghash.c: glist.c: gmain.c: gnode.c: gslist.c: gstring.c: gtree.c: gutils.c: changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/, s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
This commit is contained in:
parent
06600bd0e6
commit
b2e318ff3e
36
ChangeLog
36
ChangeLog
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -1,3 +1,39 @@
|
||||
Wed Dec 16 03:16:58 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* configure.in: version bump to 1.1.8, binary age 0, interface age 0.
|
||||
|
||||
* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
|
||||
g_trylock() to G_TRYLOCK(), since these are macros that expand to
|
||||
nothing with --disable-threads.
|
||||
changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
|
||||
G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
|
||||
changed semantics of g_thread_supported to g_thread_supported() so it
|
||||
can be used as a function like g_module_supported(). the actuall
|
||||
definition is still a macro that expands into a variable for
|
||||
performance reasons though.
|
||||
various indentation and coding style cleanups.
|
||||
|
||||
* configure.in: added --enable-threads that defaults to yes.
|
||||
|
||||
* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
|
||||
changed variable settings of g_thread_supported
|
||||
to g_threads_got_initialized.
|
||||
|
||||
garray.c:
|
||||
gcache.c:
|
||||
gdataset.c:
|
||||
gdate.c:
|
||||
ghash.c:
|
||||
glist.c:
|
||||
gmain.c:
|
||||
gnode.c:
|
||||
gslist.c:
|
||||
gstring.c:
|
||||
gtree.c:
|
||||
gutils.c:
|
||||
changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
|
||||
s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
|
||||
|
||||
Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
|
||||
|
||||
* Released GLib 1.1.8
|
||||
|
@ -38,6 +38,7 @@
|
||||
#undef ENABLE_MEM_PROFILE
|
||||
|
||||
#undef G_COMPILED_WITH_DEBUGGING
|
||||
#undef G_THREADS_ENABLED
|
||||
#undef HAVE_BROKEN_WCTYPE
|
||||
#undef HAVE_DOPRNT
|
||||
#undef HAVE_FLOAT_H
|
||||
|
23
configure.in
23
configure.in
@ -57,11 +57,16 @@ AM_MAINTAINER_MODE
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=minimum]],,enable_debug=minimum)
|
||||
AC_ARG_ENABLE(mem_check, [ --enable-mem-check=[no/yes] turn on malloc/free sanity checking [default=no]],,enable_mem_check=no)
|
||||
AC_ARG_ENABLE(mem_profile, [ --enable-mem-profile=[no/yes] turn on malloc profiling atexit [default=no]],,enable_mem_profile=no)
|
||||
|
||||
AC_ARG_ENABLE(mem_check, [ --enable-mem-check turn on malloc/free sanity checking [default=no]],,enable_mem_check=no)
|
||||
AC_ARG_ENABLE(mem_profile, [ --enable-mem-profile turn on malloc profiling atexit [default=no]],,enable_mem_profile=no)
|
||||
AC_ARG_ENABLE(ansi, [ --enable-ansi turn on strict ansi [default=no]],
|
||||
, enable_ansi=no)
|
||||
AC_ARG_ENABLE(threads, [ --enable-threads turn on basic thread support [default=yes]
|
||||
([=no] will override --with-threads)],,enable_threads=yes)
|
||||
|
||||
if test "x$enable_threads" != "xyes"; then
|
||||
enable_threads=no
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether to enable memory checking)
|
||||
if test "x$enable_mem_check" = "xyes"; then
|
||||
@ -513,13 +518,16 @@ dnl ***********************
|
||||
dnl *** g_thread checks ***
|
||||
dnl ***********************
|
||||
|
||||
AC_ARG_WITH(threads, [ --with-threads=[none/posix/solaris/nspr] specify a thread implementation to use.],
|
||||
AC_ARG_WITH(threads, [ --with-threads=[none/posix/solaris/nspr] specify a thread implementation to use],
|
||||
if test "x$with_threads" = x; then
|
||||
want_threads=yes
|
||||
else
|
||||
want_threads=$with_threads
|
||||
fi,
|
||||
want_threads=yes)
|
||||
if test "x$enable_threads" = "xno"; then
|
||||
want_threads=no
|
||||
fi
|
||||
if test "x$want_threads" = "xnone"; then
|
||||
want_threads=no
|
||||
fi
|
||||
@ -813,6 +821,8 @@ outfile_EOF
|
||||
|
||||
cat >>$outfile <<outfile_EOF
|
||||
|
||||
$g_enable_threads_def G_THREADS_ENABLED
|
||||
|
||||
/* definitions for the default mutex implementation */
|
||||
outfile_EOF
|
||||
|
||||
@ -1053,6 +1063,11 @@ if test x$glib_working_wctype = xno; then
|
||||
#define G_HAVE_BROKEN_WCTYPE 1"
|
||||
fi
|
||||
|
||||
case x$enable_threads in
|
||||
xyes) g_enable_threads_def="#define";;
|
||||
*) g_enable_threads_def="#undef ";;
|
||||
esac
|
||||
|
||||
case $have_threads in
|
||||
posix)
|
||||
g_mutex_has_default=yes
|
||||
|
20
garray.c
20
garray.c
@ -46,7 +46,7 @@ static void g_array_maybe_expand (GRealArray *array,
|
||||
gint len);
|
||||
|
||||
static GMemChunk *array_mem_chunk = NULL;
|
||||
static G_LOCK_DEFINE(array_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (array_mem_chunk);
|
||||
|
||||
GArray*
|
||||
g_array_new (gboolean zero_terminated,
|
||||
@ -55,14 +55,14 @@ g_array_new (gboolean zero_terminated,
|
||||
{
|
||||
GRealArray *array;
|
||||
|
||||
g_lock (array_mem_chunk);
|
||||
G_LOCK (array_mem_chunk);
|
||||
if (!array_mem_chunk)
|
||||
array_mem_chunk = g_mem_chunk_new ("array mem chunk",
|
||||
sizeof (GRealArray),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
array = g_chunk_new (GRealArray, array_mem_chunk);
|
||||
g_unlock (array_mem_chunk);
|
||||
G_UNLOCK (array_mem_chunk);
|
||||
|
||||
array->data = NULL;
|
||||
array->len = 0;
|
||||
@ -81,9 +81,9 @@ g_array_free (GArray *array,
|
||||
if (free_segment)
|
||||
g_free (array->data);
|
||||
|
||||
g_lock (array_mem_chunk);
|
||||
G_LOCK (array_mem_chunk);
|
||||
g_mem_chunk_free (array_mem_chunk, array);
|
||||
g_unlock (array_mem_chunk);
|
||||
G_UNLOCK (array_mem_chunk);
|
||||
}
|
||||
|
||||
GArray*
|
||||
@ -250,7 +250,7 @@ static void g_ptr_array_maybe_expand (GRealPtrArray *array,
|
||||
gint len);
|
||||
|
||||
static GMemChunk *ptr_array_mem_chunk = NULL;
|
||||
static G_LOCK_DEFINE(ptr_array_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (ptr_array_mem_chunk);
|
||||
|
||||
|
||||
GPtrArray*
|
||||
@ -258,14 +258,14 @@ g_ptr_array_new (void)
|
||||
{
|
||||
GRealPtrArray *array;
|
||||
|
||||
g_lock (ptr_array_mem_chunk);
|
||||
G_LOCK (ptr_array_mem_chunk);
|
||||
if (!ptr_array_mem_chunk)
|
||||
ptr_array_mem_chunk = g_mem_chunk_new ("array mem chunk",
|
||||
sizeof (GRealPtrArray),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
array = g_chunk_new (GRealPtrArray, ptr_array_mem_chunk);
|
||||
g_unlock (ptr_array_mem_chunk);
|
||||
G_UNLOCK (ptr_array_mem_chunk);
|
||||
|
||||
array->pdata = NULL;
|
||||
array->len = 0;
|
||||
@ -283,9 +283,9 @@ g_ptr_array_free (GPtrArray *array,
|
||||
if (free_segment)
|
||||
g_free (array->pdata);
|
||||
|
||||
g_lock (ptr_array_mem_chunk);
|
||||
G_LOCK (ptr_array_mem_chunk);
|
||||
g_mem_chunk_free (ptr_array_mem_chunk, array);
|
||||
g_unlock (ptr_array_mem_chunk);
|
||||
G_UNLOCK (ptr_array_mem_chunk);
|
||||
}
|
||||
|
||||
static void
|
||||
|
10
gcache.c
10
gcache.c
@ -61,7 +61,7 @@ static void g_cache_node_destroy (GCacheNode *node);
|
||||
|
||||
|
||||
static GMemChunk *node_mem_chunk = NULL;
|
||||
static G_LOCK_DEFINE(node_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (node_mem_chunk);
|
||||
|
||||
GCache*
|
||||
g_cache_new (GCacheNewFunc value_new_func,
|
||||
@ -198,13 +198,13 @@ g_cache_node_new (gpointer value)
|
||||
{
|
||||
GCacheNode *node;
|
||||
|
||||
g_lock (node_mem_chunk);
|
||||
G_LOCK (node_mem_chunk);
|
||||
if (!node_mem_chunk)
|
||||
node_mem_chunk = g_mem_chunk_new ("cache node mem chunk", sizeof (GCacheNode),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
node = g_chunk_new (GCacheNode, node_mem_chunk);
|
||||
g_unlock (node_mem_chunk);
|
||||
G_UNLOCK (node_mem_chunk);
|
||||
|
||||
node->value = value;
|
||||
node->ref_count = 1;
|
||||
@ -215,7 +215,7 @@ g_cache_node_new (gpointer value)
|
||||
static void
|
||||
g_cache_node_destroy (GCacheNode *node)
|
||||
{
|
||||
g_lock (node_mem_chunk);
|
||||
G_LOCK (node_mem_chunk);
|
||||
g_mem_chunk_free (node_mem_chunk, node);
|
||||
g_unlock (node_mem_chunk);
|
||||
G_UNLOCK (node_mem_chunk);
|
||||
}
|
||||
|
56
gdataset.c
56
gdataset.c
@ -67,7 +67,7 @@ static inline GQuark g_quark_new (gchar *string);
|
||||
|
||||
|
||||
/* --- variables --- */
|
||||
static G_LOCK_DEFINE(g_dataset_global);
|
||||
G_LOCK_DECLARE_STATIC (g_dataset_global);
|
||||
static GHashTable *g_dataset_location_ht = NULL;
|
||||
static GDataset *g_dataset_cached = NULL; /* should this be
|
||||
threadspecific? */
|
||||
@ -76,7 +76,7 @@ static GMemChunk *g_data_mem_chunk = NULL;
|
||||
static GData *g_data_cache = NULL;
|
||||
static guint g_data_cache_length = 0;
|
||||
|
||||
static G_LOCK_DEFINE(g_quark_global);
|
||||
G_LOCK_DECLARE_STATIC (g_quark_global);
|
||||
static GHashTable *g_quark_ht = NULL;
|
||||
static gchar **g_quarks = NULL;
|
||||
static GQuark g_quark_seq_id = 0;
|
||||
@ -121,13 +121,13 @@ g_datalist_clear (GData **datalist)
|
||||
{
|
||||
g_return_if_fail (datalist != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (!g_dataset_location_ht)
|
||||
g_data_initialize ();
|
||||
|
||||
while (*datalist)
|
||||
g_datalist_clear_i (datalist);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
/* HOLDS: g_dataset_global_lock */
|
||||
@ -174,7 +174,7 @@ g_dataset_destroy (gconstpointer dataset_location)
|
||||
{
|
||||
g_return_if_fail (dataset_location != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (g_dataset_location_ht)
|
||||
{
|
||||
register GDataset *dataset;
|
||||
@ -183,7 +183,7 @@ g_dataset_destroy (gconstpointer dataset_location)
|
||||
if (dataset)
|
||||
g_dataset_destroy_internal (dataset);
|
||||
}
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
/* HOLDS: g_dataset_global_lock */
|
||||
@ -312,7 +312,7 @@ g_dataset_id_set_data_full (gconstpointer dataset_location,
|
||||
return;
|
||||
}
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (!g_dataset_location_ht)
|
||||
g_data_initialize ();
|
||||
|
||||
@ -328,7 +328,7 @@ g_dataset_id_set_data_full (gconstpointer dataset_location,
|
||||
}
|
||||
|
||||
g_data_set_internal (&dataset->datalist, key_id, data, destroy_func, dataset);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
void
|
||||
@ -348,12 +348,12 @@ g_datalist_id_set_data_full (GData **datalist,
|
||||
return;
|
||||
}
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (!g_dataset_location_ht)
|
||||
g_data_initialize ();
|
||||
|
||||
g_data_set_internal (datalist, key_id, data, destroy_func, NULL);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
void
|
||||
@ -362,7 +362,7 @@ g_dataset_id_remove_no_notify (gconstpointer dataset_location,
|
||||
{
|
||||
g_return_if_fail (dataset_location != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (key_id && g_dataset_location_ht)
|
||||
{
|
||||
GDataset *dataset;
|
||||
@ -371,7 +371,7 @@ g_dataset_id_remove_no_notify (gconstpointer dataset_location,
|
||||
if (dataset)
|
||||
g_data_set_internal (&dataset->datalist, key_id, NULL, (GDestroyNotify) 42, dataset);
|
||||
}
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
void
|
||||
@ -380,10 +380,10 @@ g_datalist_id_remove_no_notify (GData **datalist,
|
||||
{
|
||||
g_return_if_fail (datalist != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (key_id && g_dataset_location_ht)
|
||||
g_data_set_internal (datalist, key_id, NULL, (GDestroyNotify) 42, NULL);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
gpointer
|
||||
@ -392,7 +392,7 @@ g_dataset_id_get_data (gconstpointer dataset_location,
|
||||
{
|
||||
g_return_val_if_fail (dataset_location != NULL, NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (key_id && g_dataset_location_ht)
|
||||
{
|
||||
register GDataset *dataset;
|
||||
@ -405,12 +405,12 @@ g_dataset_id_get_data (gconstpointer dataset_location,
|
||||
for (list = dataset->datalist; list; list = list->next)
|
||||
if (list->id == key_id)
|
||||
{
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
return list->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -443,11 +443,11 @@ g_dataset_foreach (gconstpointer dataset_location,
|
||||
g_return_if_fail (dataset_location != NULL);
|
||||
g_return_if_fail (func != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (g_dataset_location_ht)
|
||||
{
|
||||
dataset = g_dataset_lookup (dataset_location);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
if (dataset)
|
||||
{
|
||||
register GData *list;
|
||||
@ -458,7 +458,7 @@ g_dataset_foreach (gconstpointer dataset_location,
|
||||
}
|
||||
else
|
||||
{
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
}
|
||||
|
||||
@ -510,10 +510,10 @@ g_quark_try_string (const gchar *string)
|
||||
GQuark quark = 0;
|
||||
g_return_val_if_fail (string != NULL, 0);
|
||||
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (g_quark_ht)
|
||||
quark = GPOINTER_TO_UINT (g_hash_table_lookup (g_quark_ht, string));
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return quark;
|
||||
}
|
||||
@ -525,7 +525,7 @@ g_quark_from_string (const gchar *string)
|
||||
|
||||
g_return_val_if_fail (string != NULL, 0);
|
||||
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (g_quark_ht)
|
||||
quark = (gulong) g_hash_table_lookup (g_quark_ht, string);
|
||||
else
|
||||
@ -536,7 +536,7 @@ g_quark_from_string (const gchar *string)
|
||||
|
||||
if (!quark)
|
||||
quark = g_quark_new (g_strdup (string));
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return quark;
|
||||
}
|
||||
@ -548,7 +548,7 @@ g_quark_from_static_string (const gchar *string)
|
||||
|
||||
g_return_val_if_fail (string != NULL, 0);
|
||||
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (g_quark_ht)
|
||||
quark = (gulong) g_hash_table_lookup (g_quark_ht, string);
|
||||
else
|
||||
@ -559,7 +559,7 @@ g_quark_from_static_string (const gchar *string)
|
||||
|
||||
if (!quark)
|
||||
quark = g_quark_new ((gchar*) string);
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return quark;
|
||||
}
|
||||
@ -568,10 +568,10 @@ gchar*
|
||||
g_quark_to_string (GQuark quark)
|
||||
{
|
||||
gchar* result = NULL;
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (quark > 0 && quark <= g_quark_seq_id)
|
||||
result = g_quarks[quark - 1];
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
8
gdate.c
8
gdate.c
@ -388,7 +388,7 @@ g_date_clear (GDate *d, guint ndates)
|
||||
memset (d, 0x0, ndates*sizeof (GDate));
|
||||
}
|
||||
|
||||
static G_LOCK_DEFINE(g_date_global);
|
||||
G_LOCK_DECLARE_STATIC (g_date_global);
|
||||
|
||||
/* These are for the parser, output to the user should use *
|
||||
* g_date_strftime () - this creates more never-freed memory to annoy
|
||||
@ -652,7 +652,7 @@ g_date_set_parse (GDate *d,
|
||||
/* set invalid */
|
||||
g_date_clear (d, 1);
|
||||
|
||||
g_lock (g_date_global);
|
||||
G_LOCK (g_date_global);
|
||||
|
||||
g_date_prepare_to_parse (str, &pt);
|
||||
|
||||
@ -664,7 +664,7 @@ g_date_set_parse (GDate *d,
|
||||
|
||||
if (pt.num_ints == 4)
|
||||
{
|
||||
g_unlock (g_date_global);
|
||||
G_UNLOCK (g_date_global);
|
||||
return; /* presumably a typo; bail out. */
|
||||
}
|
||||
|
||||
@ -782,7 +782,7 @@ g_date_set_parse (GDate *d,
|
||||
else
|
||||
g_message ("Rejected DMY %u %u %u", day, m, y);
|
||||
#endif
|
||||
g_unlock (g_date_global);
|
||||
G_UNLOCK (g_date_global);
|
||||
}
|
||||
|
||||
void
|
||||
|
14
ghash.c
14
ghash.c
@ -57,7 +57,7 @@ static void g_hash_node_destroy (GHashNode *hash_node);
|
||||
static void g_hash_nodes_destroy (GHashNode *hash_node);
|
||||
|
||||
|
||||
static G_LOCK_DEFINE(g_hash_global);
|
||||
G_LOCK_DECLARE_STATIC (g_hash_global);
|
||||
|
||||
static GMemChunk *node_mem_chunk = NULL;
|
||||
static GHashNode *node_free_list = NULL;
|
||||
@ -345,7 +345,7 @@ g_hash_node_new (gpointer key,
|
||||
{
|
||||
GHashNode *hash_node;
|
||||
|
||||
g_lock (g_hash_global);
|
||||
G_LOCK (g_hash_global);
|
||||
if (node_free_list)
|
||||
{
|
||||
hash_node = node_free_list;
|
||||
@ -360,7 +360,7 @@ g_hash_node_new (gpointer key,
|
||||
|
||||
hash_node = g_chunk_new (GHashNode, node_mem_chunk);
|
||||
}
|
||||
g_unlock (g_hash_global);
|
||||
G_UNLOCK (g_hash_global);
|
||||
|
||||
hash_node->key = key;
|
||||
hash_node->value = value;
|
||||
@ -372,10 +372,10 @@ g_hash_node_new (gpointer key,
|
||||
static void
|
||||
g_hash_node_destroy (GHashNode *hash_node)
|
||||
{
|
||||
g_lock (g_hash_global);
|
||||
G_LOCK (g_hash_global);
|
||||
hash_node->next = node_free_list;
|
||||
node_free_list = hash_node;
|
||||
g_unlock (g_hash_global);
|
||||
G_UNLOCK (g_hash_global);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -391,8 +391,8 @@ g_hash_nodes_destroy (GHashNode *hash_node)
|
||||
while (node->next)
|
||||
node = node->next;
|
||||
|
||||
g_lock (g_hash_global);
|
||||
G_LOCK (g_hash_global);
|
||||
node->next = node_free_list;
|
||||
node_free_list = hash_node;
|
||||
g_unlock (g_hash_global);
|
||||
G_UNLOCK (g_hash_global);
|
||||
}
|
||||
|
607
glib.h
607
glib.h
@ -2007,7 +2007,8 @@ gint g_scanner_stat_mode (const gchar *filename);
|
||||
} G_STMT_END
|
||||
|
||||
|
||||
/* Completion */
|
||||
/* GCompletion
|
||||
*/
|
||||
|
||||
struct _GCompletion
|
||||
{
|
||||
@ -2030,28 +2031,32 @@ GList* g_completion_complete (GCompletion* cmp,
|
||||
void g_completion_free (GCompletion* cmp);
|
||||
|
||||
|
||||
|
||||
|
||||
/* Date calculations (not time for now, to be resolved). These are a
|
||||
/* GDate
|
||||
*
|
||||
* Date calculations (not time for now, to be resolved). These are a
|
||||
* mutant combination of Steffen Beyer's DateCalc routines
|
||||
* (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
|
||||
* date routines (written for in-house software). Written by Havoc
|
||||
* Pennington <hp@pobox.com>
|
||||
*/
|
||||
|
||||
/* this enum is used to specify order of appearance in parsed date
|
||||
* strings
|
||||
*/
|
||||
typedef guint16 GDateYear;
|
||||
typedef guint8 GDateDay; /* day of the month */
|
||||
typedef struct _GDate GDate;
|
||||
/* make struct tm known without having to include time.h */
|
||||
struct tm;
|
||||
|
||||
typedef enum {
|
||||
/* enum used to specify order of appearance in parsed date strings */
|
||||
typedef enum
|
||||
{
|
||||
G_DATE_DAY = 0,
|
||||
G_DATE_MONTH = 1,
|
||||
G_DATE_YEAR = 2
|
||||
} GDateDMY;
|
||||
|
||||
/* These other types specify the actual values. */
|
||||
|
||||
typedef enum {
|
||||
/* actual week and month values */
|
||||
typedef enum
|
||||
{
|
||||
G_DATE_BAD_WEEKDAY = 0,
|
||||
G_DATE_MONDAY = 1,
|
||||
G_DATE_TUESDAY = 2,
|
||||
@ -2061,8 +2066,8 @@ typedef enum {
|
||||
G_DATE_SATURDAY = 6,
|
||||
G_DATE_SUNDAY = 7
|
||||
} GDateWeekday;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_DATE_BAD_MONTH = 0,
|
||||
G_DATE_JANUARY = 1,
|
||||
G_DATE_FEBRUARY = 2,
|
||||
@ -2078,22 +2083,17 @@ typedef enum {
|
||||
G_DATE_DECEMBER = 12
|
||||
} GDateMonth;
|
||||
|
||||
typedef guint16 GDateYear;
|
||||
typedef guint8 GDateDay; /* day of the month */
|
||||
|
||||
#define G_DATE_BAD_JULIAN 0U
|
||||
#define G_DATE_BAD_DAY 0U
|
||||
#define G_DATE_BAD_YEAR 0U
|
||||
|
||||
typedef struct _GDate GDate;
|
||||
|
||||
/* Note: directly manipulating structs is generally a bad idea, but
|
||||
* in this case it's an *incredibly* bad idea, because all or part
|
||||
* of this struct can be invalid at any given time. Use the functions,
|
||||
* or you will get hosed, I promise.
|
||||
*/
|
||||
|
||||
struct _GDate {
|
||||
struct _GDate
|
||||
{
|
||||
guint julian_days : 32; /* julian days representation - we use a
|
||||
* bitfield hoping that 64 bit platforms
|
||||
* will pack this whole struct in one big
|
||||
@ -2109,105 +2109,95 @@ struct _GDate {
|
||||
guint year : 16;
|
||||
};
|
||||
|
||||
/* _new with no args returns an invalid date, you then have to _set() stuff
|
||||
/* g_date_new() returns an invalid date, you then have to _set() stuff
|
||||
* to get a usable object. You can also allocate a GDate statically,
|
||||
* then call g_date_clear() to initialize.
|
||||
*/
|
||||
|
||||
GDate* g_date_new (void);
|
||||
GDate* g_date_new_dmy (GDateDay d,
|
||||
GDateMonth m,
|
||||
GDateYear y);
|
||||
GDate* g_date_new_dmy (GDateDay day,
|
||||
GDateMonth month,
|
||||
GDateYear year);
|
||||
GDate* g_date_new_julian (guint32 julian_day);
|
||||
void g_date_free (GDate *d);
|
||||
void g_date_free (GDate *date);
|
||||
|
||||
/* check g_date_valid() after doing an operation that might fail, like
|
||||
* _parse. Almost all g_date operations are undefined on invalid
|
||||
* dates (the exceptions are the mutators, since you need those to
|
||||
* return to validity).
|
||||
*/
|
||||
gboolean g_date_valid (GDate *date);
|
||||
gboolean g_date_valid_day (GDateDay day);
|
||||
gboolean g_date_valid_month (GDateMonth month);
|
||||
gboolean g_date_valid_year (GDateYear year);
|
||||
gboolean g_date_valid_weekday (GDateWeekday weekday);
|
||||
gboolean g_date_valid_julian (guint32 julian_date);
|
||||
gboolean g_date_valid_dmy (GDateDay day,
|
||||
GDateMonth month,
|
||||
GDateYear year);
|
||||
|
||||
gboolean g_date_valid (GDate *d);
|
||||
gboolean g_date_valid_day (GDateDay d);
|
||||
gboolean g_date_valid_month (GDateMonth m);
|
||||
gboolean g_date_valid_year (GDateYear y);
|
||||
gboolean g_date_valid_weekday (GDateWeekday w);
|
||||
gboolean g_date_valid_julian (guint32 j);
|
||||
gboolean g_date_valid_dmy (GDateDay d,
|
||||
GDateMonth m,
|
||||
GDateYear y);
|
||||
|
||||
GDateWeekday g_date_weekday (GDate *d);
|
||||
GDateMonth g_date_month (GDate *d);
|
||||
GDateYear g_date_year (GDate *d);
|
||||
GDateDay g_date_day (GDate *d);
|
||||
guint32 g_date_julian (GDate *d);
|
||||
|
||||
guint g_date_day_of_year (GDate *d);
|
||||
GDateWeekday g_date_weekday (GDate *date);
|
||||
GDateMonth g_date_month (GDate *date);
|
||||
GDateYear g_date_year (GDate *date);
|
||||
GDateDay g_date_day (GDate *date);
|
||||
guint32 g_date_julian (GDate *date);
|
||||
guint g_date_day_of_year (GDate *date);
|
||||
|
||||
/* First monday/sunday is the start of week 1; if we haven't reached
|
||||
* that day, return 0. These are not ISO weeks of the year; that
|
||||
* routine should be added.
|
||||
* that day, return 0. These are not ISO weeks of the year; that
|
||||
* routine needs to be added.
|
||||
* these functions return the number of weeks, starting on the
|
||||
* corrsponding day
|
||||
*/
|
||||
|
||||
guint g_date_monday_week_of_year (GDate *d); /* # weeks, starting on Monday */
|
||||
guint g_date_sunday_week_of_year (GDate *d); /* # weeks, starting on Sunday */
|
||||
guint g_date_monday_week_of_year (GDate *date);
|
||||
guint g_date_sunday_week_of_year (GDate *date);
|
||||
|
||||
/* If you create a static date struct you need to clear it to get it
|
||||
* in a sane state before use. You can clear a whole array at
|
||||
* once with the ndates argument.
|
||||
*/
|
||||
|
||||
void g_date_clear (GDate *d,
|
||||
guint ndates);
|
||||
void g_date_clear (GDate *date,
|
||||
guint n_dates);
|
||||
|
||||
/* The parse routine is meant for dates typed in by a user, so it
|
||||
* permits many formats but tries to catch common typos. If your data
|
||||
* needs to be strictly validated, it is not an appropriate function.
|
||||
*/
|
||||
|
||||
void g_date_set_parse (GDate *d,
|
||||
void g_date_set_parse (GDate *date,
|
||||
const gchar *str);
|
||||
|
||||
void g_date_set_time (GDate *d,
|
||||
void g_date_set_time (GDate *date,
|
||||
GTime time);
|
||||
|
||||
void g_date_set_month (GDate *d,
|
||||
GDateMonth m);
|
||||
void g_date_set_day (GDate *d,
|
||||
void g_date_set_month (GDate *date,
|
||||
GDateMonth month);
|
||||
void g_date_set_day (GDate *date,
|
||||
GDateDay day);
|
||||
void g_date_set_year (GDate *d,
|
||||
GDateYear y);
|
||||
void g_date_set_dmy (GDate *d,
|
||||
void g_date_set_year (GDate *date,
|
||||
GDateYear year);
|
||||
void g_date_set_dmy (GDate *date,
|
||||
GDateDay day,
|
||||
GDateMonth m,
|
||||
GDateMonth month,
|
||||
GDateYear y);
|
||||
|
||||
void g_date_set_julian (GDate *d,
|
||||
guint32 j);
|
||||
|
||||
gboolean g_date_is_first_of_month (GDate *d);
|
||||
gboolean g_date_is_last_of_month (GDate *d);
|
||||
|
||||
void g_date_set_julian (GDate *date,
|
||||
guint32 julian_date);
|
||||
gboolean g_date_is_first_of_month (GDate *date);
|
||||
gboolean g_date_is_last_of_month (GDate *date);
|
||||
|
||||
/* To go forward by some number of weeks just go forward weeks*7 days */
|
||||
void g_date_add_days (GDate *d,
|
||||
guint ndays);
|
||||
void g_date_subtract_days (GDate *d,
|
||||
guint ndays);
|
||||
void g_date_add_days (GDate *date,
|
||||
guint n_days);
|
||||
void g_date_subtract_days (GDate *date,
|
||||
guint n_days);
|
||||
|
||||
/* If you add/sub months while day > 28, the day might change */
|
||||
void g_date_add_months (GDate *d,
|
||||
guint nmonths);
|
||||
void g_date_subtract_months (GDate *d,
|
||||
guint nmonths);
|
||||
void g_date_add_months (GDate *date,
|
||||
guint n_months);
|
||||
void g_date_subtract_months (GDate *date,
|
||||
guint n_months);
|
||||
|
||||
/* If it's feb 29, changing years can move you to the 28th */
|
||||
void g_date_add_years (GDate *d,
|
||||
guint nyears);
|
||||
void g_date_subtract_years (GDate *d,
|
||||
guint nyears);
|
||||
|
||||
void g_date_add_years (GDate *date,
|
||||
guint n_years);
|
||||
void g_date_subtract_years (GDate *date,
|
||||
guint n_years);
|
||||
gboolean g_date_is_leap_year (GDateYear year);
|
||||
guint8 g_date_days_in_month (GDateMonth month,
|
||||
GDateYear year);
|
||||
@ -2217,11 +2207,7 @@ guint8 g_date_sunday_weeks_in_year (GDateYear year);
|
||||
/* qsort-friendly (with a cast...) */
|
||||
gint g_date_compare (GDate *lhs,
|
||||
GDate *rhs);
|
||||
|
||||
/* make struct tm known without having to include time.h */
|
||||
struct tm;
|
||||
|
||||
void g_date_to_struct_tm (GDate *d,
|
||||
void g_date_to_struct_tm (GDate *date,
|
||||
struct tm *tm);
|
||||
|
||||
/* Just like strftime() except you can only use date-related formats.
|
||||
@ -2230,12 +2216,12 @@ void g_date_to_struct_tm (GDate *d,
|
||||
gsize g_date_strftime (gchar *s,
|
||||
gsize slen,
|
||||
const gchar *format,
|
||||
GDate *d);
|
||||
GDate *date);
|
||||
|
||||
|
||||
|
||||
|
||||
/* GRelation: Indexed Relations. Imagine a really simple table in a
|
||||
/* GRelation
|
||||
*
|
||||
* Indexed Relations. Imagine a really simple table in a
|
||||
* database. Relations are not ordered. This data type is meant for
|
||||
* maintaining a N-way mapping.
|
||||
*
|
||||
@ -2295,47 +2281,47 @@ gpointer g_tuples_index (GTuples *tuples,
|
||||
guint g_spaced_primes_closest (guint num);
|
||||
|
||||
|
||||
/* IO Channels
|
||||
/* GIOChannel
|
||||
*/
|
||||
|
||||
typedef struct _GIOFuncs GIOFuncs;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_IO_ERROR_NONE,
|
||||
G_IO_ERROR_AGAIN,
|
||||
G_IO_ERROR_INVAL,
|
||||
G_IO_ERROR_UNKNOWN
|
||||
} GIOError;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_SEEK_CUR,
|
||||
G_SEEK_SET,
|
||||
G_SEEK_END
|
||||
} GSeekType;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_IO_IN
|
||||
#ifdef POLLIN
|
||||
= POLLIN
|
||||
#endif
|
||||
,G_IO_OUT
|
||||
, G_IO_OUT
|
||||
#ifdef POLLOUT
|
||||
= POLLOUT
|
||||
#endif
|
||||
,G_IO_PRI
|
||||
, G_IO_PRI
|
||||
#ifdef POLLPRI
|
||||
= POLLPRI
|
||||
#endif
|
||||
|
||||
,G_IO_ERR
|
||||
, G_IO_ERR
|
||||
#ifdef POLLERR
|
||||
= POLLERR
|
||||
#endif
|
||||
,G_IO_HUP
|
||||
, G_IO_HUP
|
||||
#ifdef POLLHUP
|
||||
= POLLHUP
|
||||
#endif
|
||||
,G_IO_NVAL
|
||||
, G_IO_NVAL
|
||||
#ifdef POLLNVAL
|
||||
= POLLNVAL
|
||||
#endif
|
||||
@ -2351,27 +2337,27 @@ struct _GIOChannel
|
||||
typedef gboolean (*GIOFunc) (GIOChannel *source,
|
||||
GIOCondition condition,
|
||||
gpointer data);
|
||||
|
||||
struct _GIOFuncs {
|
||||
GIOError (*io_read) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_read);
|
||||
GIOError (*io_write) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_written);
|
||||
GIOError (*io_seek) (GIOChannel *channel,
|
||||
gint offset,
|
||||
GSeekType type);
|
||||
void (*io_close) (GIOChannel *channel);
|
||||
guint (*io_add_watch) (GIOChannel *channel,
|
||||
gint priority,
|
||||
GIOCondition condition,
|
||||
GIOFunc func,
|
||||
gpointer user_data,
|
||||
GDestroyNotify notify);
|
||||
void (*io_free) (GIOChannel *channel);
|
||||
struct _GIOFuncs
|
||||
{
|
||||
GIOError (*io_read) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_read);
|
||||
GIOError (*io_write) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_written);
|
||||
GIOError (*io_seek) (GIOChannel *channel,
|
||||
gint offset,
|
||||
GSeekType type);
|
||||
void (*io_close) (GIOChannel *channel);
|
||||
guint (*io_add_watch) (GIOChannel *channel,
|
||||
gint priority,
|
||||
GIOCondition condition,
|
||||
GIOFunc func,
|
||||
gpointer user_data,
|
||||
GDestroyNotify notify);
|
||||
void (*io_free) (GIOChannel *channel);
|
||||
};
|
||||
|
||||
void g_io_channel_init (GIOChannel *channel);
|
||||
@ -2400,19 +2386,20 @@ guint g_io_add_watch (GIOChannel *channel,
|
||||
GIOFunc func,
|
||||
gpointer user_data);
|
||||
|
||||
/* Main loop */
|
||||
|
||||
typedef struct _GTimeVal GTimeVal;
|
||||
typedef struct _GSourceFuncs GSourceFuncs;
|
||||
/* Main loop
|
||||
*/
|
||||
typedef struct _GTimeVal GTimeVal;
|
||||
typedef struct _GSourceFuncs GSourceFuncs;
|
||||
typedef struct _GMainLoop GMainLoop; /* Opaque */
|
||||
|
||||
typedef struct _GMainLoop GMainLoop; /* Opaque */
|
||||
|
||||
struct _GTimeVal {
|
||||
struct _GTimeVal
|
||||
{
|
||||
glong tv_sec;
|
||||
glong tv_usec;
|
||||
};
|
||||
|
||||
struct _GSourceFuncs {
|
||||
struct _GSourceFuncs
|
||||
{
|
||||
gboolean (*prepare) (gpointer source_data,
|
||||
GTimeVal *current_time,
|
||||
gint *timeout);
|
||||
@ -2424,10 +2411,9 @@ struct _GSourceFuncs {
|
||||
GDestroyNotify destroy;
|
||||
};
|
||||
|
||||
typedef gboolean (*GSourceFunc) (gpointer data);
|
||||
typedef gboolean (*GSourceFunc) (gpointer data);
|
||||
|
||||
/* Hooks for adding to the main loop */
|
||||
|
||||
guint g_source_add (gint priority,
|
||||
gboolean can_recurse,
|
||||
GSourceFuncs *funcs,
|
||||
@ -2438,67 +2424,65 @@ void g_source_remove (guint tag);
|
||||
void g_source_remove_by_user_data (gpointer user_data);
|
||||
void g_source_remove_by_source_data (gpointer source_data);
|
||||
|
||||
|
||||
void g_get_current_time (GTimeVal *result);
|
||||
void g_get_current_time (GTimeVal *result);
|
||||
|
||||
/* Running the main loop */
|
||||
|
||||
GMainLoop *g_main_new (void);
|
||||
void g_main_run (GMainLoop *loop);
|
||||
void g_main_quit (GMainLoop *loop);
|
||||
void g_main_destroy (GMainLoop *loop);
|
||||
GMainLoop* g_main_new (void);
|
||||
void g_main_run (GMainLoop *loop);
|
||||
void g_main_quit (GMainLoop *loop);
|
||||
void g_main_destroy (GMainLoop *loop);
|
||||
|
||||
/* Run a single iteration of the mainloop. If block is FALSE,
|
||||
* will never block
|
||||
*/
|
||||
gboolean g_main_iteration (gboolean block);
|
||||
gboolean g_main_iteration (gboolean may_block);
|
||||
|
||||
/* See if any events are pending
|
||||
*/
|
||||
gboolean g_main_pending ();
|
||||
/* See if any events are pending */
|
||||
gboolean g_main_pending (void);
|
||||
|
||||
/* Idles and timeouts */
|
||||
guint g_timeout_add_full (gint priority,
|
||||
guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
guint g_timeout_add (guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data);
|
||||
guint g_idle_add (GSourceFunc function,
|
||||
gpointer data);
|
||||
guint g_idle_add_full (gint priority,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify destroy);
|
||||
|
||||
guint g_timeout_add_full (gint priority,
|
||||
guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
guint g_timeout_add (guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data);
|
||||
|
||||
guint g_idle_add (GSourceFunc function,
|
||||
gpointer data);
|
||||
guint g_idle_add_full (gint priority,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify destroy);
|
||||
|
||||
/* Unix-specific IO and main loop calls */
|
||||
/* GPollFD
|
||||
*
|
||||
* Unix-specific IO and main loop calls
|
||||
*/
|
||||
|
||||
typedef struct _GPollFD GPollFD;
|
||||
|
||||
struct _GPollFD {
|
||||
gint fd;
|
||||
gushort events;
|
||||
gushort revents;
|
||||
typedef gint (*GPollFunc) (GPollFD *ufds,
|
||||
guint nfsd,
|
||||
gint timeout);
|
||||
struct _GPollFD
|
||||
{
|
||||
gint fd;
|
||||
gushort events;
|
||||
gushort revents;
|
||||
};
|
||||
|
||||
typedef gint (*GPollFunc) (GPollFD *ufds, guint nfsd, gint timeout);
|
||||
|
||||
void g_main_poll_add (gint priority,
|
||||
GPollFD *fd);
|
||||
void g_main_poll_remove (GPollFD *fd);
|
||||
|
||||
void g_main_set_poll_func (GPollFunc func);
|
||||
|
||||
|
||||
GIOChannel *g_io_channel_unix_new (int fd);
|
||||
GIOChannel* g_io_channel_unix_new (int fd);
|
||||
gint g_io_channel_unix_get_fd (GIOChannel *channel);
|
||||
|
||||
#if 0 /* old IO Channels */
|
||||
|
||||
/* old IO Channels */
|
||||
#if 0
|
||||
/* IO Channels.
|
||||
* These are used for plug-in communication in the GIMP, for instance.
|
||||
* On Unix, it's simply an encapsulated file descriptor (a pipe).
|
||||
@ -2521,7 +2505,6 @@ struct _GIOChannel
|
||||
*/
|
||||
#endif
|
||||
};
|
||||
|
||||
GIOChannel *g_iochannel_new (gint fd);
|
||||
void g_iochannel_free (GIOChannel *channel);
|
||||
void g_iochannel_close_and_free (GIOChannel *channel);
|
||||
@ -2529,16 +2512,14 @@ void g_iochannel_wakeup_peer (GIOChannel *channel);
|
||||
#ifndef NATIVE_WIN32
|
||||
# define g_iochannel_wakeup_peer(channel) G_STMT_START { } G_STMT_END
|
||||
#endif
|
||||
#endif /* old IO Channels */
|
||||
|
||||
#endif /* old IO Channels */
|
||||
|
||||
/* Windows emulation stubs for common unix functions
|
||||
*/
|
||||
#ifdef NATIVE_WIN32
|
||||
|
||||
#define MAXPATHLEN 1024
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# define MAXPATHLEN 1024
|
||||
# ifdef _MSC_VER
|
||||
typedef int pid_t;
|
||||
|
||||
/* These POSIXish functions are available in the Microsoft C library
|
||||
@ -2553,30 +2534,27 @@ typedef int pid_t;
|
||||
* For some functions, we provide emulators in glib, which are prefixed
|
||||
* with gwin_.
|
||||
*/
|
||||
#define getcwd _getcwd
|
||||
#define getpid _getpid
|
||||
#define access _access
|
||||
#define open _open
|
||||
#define read _read
|
||||
#define write _write
|
||||
#define lseek _lseek
|
||||
#define close _close
|
||||
#define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)
|
||||
#define popen _popen
|
||||
#define pclose _pclose
|
||||
#define fdopen _fdopen
|
||||
#define ftruncate(fd, size) gwin_ftruncate (fd, size)
|
||||
#define opendir gwin_opendir
|
||||
#define readdir gwin_readdir
|
||||
#define rewinddir gwin_rewinddir
|
||||
#define closedir gwin_closedir
|
||||
|
||||
#define NAME_MAX 255
|
||||
|
||||
# define getcwd _getcwd
|
||||
# define getpid _getpid
|
||||
# define access _access
|
||||
# define open _open
|
||||
# define read _read
|
||||
# define write _write
|
||||
# define lseek _lseek
|
||||
# define close _close
|
||||
# define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)
|
||||
# define popen _popen
|
||||
# define pclose _pclose
|
||||
# define fdopen _fdopen
|
||||
# define ftruncate(fd, size) gwin_ftruncate (fd, size)
|
||||
# define opendir gwin_opendir
|
||||
# define readdir gwin_readdir
|
||||
# define rewinddir gwin_rewinddir
|
||||
# define closedir gwin_closedir
|
||||
# define NAME_MAX 255
|
||||
struct DIR
|
||||
{
|
||||
gchar *dir_name;
|
||||
|
||||
gboolean just_opened;
|
||||
guint find_file_handle;
|
||||
gpointer find_file_data;
|
||||
@ -2586,7 +2564,6 @@ struct dirent
|
||||
{
|
||||
gchar d_name[NAME_MAX + 1];
|
||||
};
|
||||
|
||||
/* emulation functions */
|
||||
extern int gwin_ftruncate (gint f,
|
||||
guint size);
|
||||
@ -2594,145 +2571,153 @@ DIR* gwin_opendir (const gchar *dirname);
|
||||
struct dirent* gwin_readdir (DIR *dir);
|
||||
void gwin_rewinddir (DIR *dir);
|
||||
gint gwin_closedir (DIR *dir);
|
||||
# endif /* _MSC_VER */
|
||||
#endif /* NATIVE_WIN32 */
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#endif /* NATIVE_WIN32 */
|
||||
|
||||
/* functions for thread support for glib. */
|
||||
|
||||
typedef struct _GMutex GMutex;
|
||||
typedef struct _GCond GCond;
|
||||
typedef struct _GPrivate GPrivate;
|
||||
typedef struct _GStaticPrivate GStaticPrivate;
|
||||
|
||||
/* GLib Thread support
|
||||
*/
|
||||
typedef struct _GMutex GMutex;
|
||||
typedef struct _GCond GCond;
|
||||
typedef struct _GPrivate GPrivate;
|
||||
typedef struct _GStaticPrivate GStaticPrivate;
|
||||
typedef struct _GThreadFunctions GThreadFunctions;
|
||||
struct _GThreadFunctions
|
||||
{
|
||||
GMutex* (*mutex_new) (void);
|
||||
void (*mutex_lock) (GMutex* mutex);
|
||||
gboolean (*mutex_trylock) (GMutex* mutex);
|
||||
void (*mutex_unlock) (GMutex* mutex);
|
||||
void (*mutex_free) (GMutex* mutex);
|
||||
void (*mutex_lock) (GMutex *mutex);
|
||||
gboolean (*mutex_trylock) (GMutex *mutex);
|
||||
void (*mutex_unlock) (GMutex *mutex);
|
||||
void (*mutex_free) (GMutex *mutex);
|
||||
GCond* (*cond_new) (void);
|
||||
void (*cond_signal) (GCond* cond);
|
||||
void (*cond_broadcast) (GCond* cond);
|
||||
void (*cond_wait) (GCond* cond, GMutex* mutex);
|
||||
gboolean (*cond_timed_wait) (GCond* cond, GMutex* mutex,
|
||||
GTimeVal *end_time);
|
||||
void (*cond_free) (GCond* cond);
|
||||
GPrivate* (*private_new) (GDestroyNotify destructor);
|
||||
gpointer (*private_get) (GPrivate* private_key);
|
||||
void (*private_set) (GPrivate* private_key, gpointer value);
|
||||
void (*cond_signal) (GCond *cond);
|
||||
void (*cond_broadcast) (GCond *cond);
|
||||
void (*cond_wait) (GCond *cond,
|
||||
GMutex *mutex);
|
||||
gboolean (*cond_timed_wait) (GCond *cond,
|
||||
GMutex *mutex,
|
||||
GTimeVal *end_time);
|
||||
void (*cond_free) (GCond *cond);
|
||||
GPrivate* (*private_new) (GDestroyNotify destructor);
|
||||
gpointer (*private_get) (GPrivate *private_key);
|
||||
void (*private_set) (GPrivate *private_key,
|
||||
gpointer data);
|
||||
};
|
||||
|
||||
GUTILS_C_VAR GThreadFunctions g_thread_functions_for_glib_use;
|
||||
GUTILS_C_VAR gboolean g_thread_use_default_impl;
|
||||
GUTILS_C_VAR gboolean g_thread_supported;
|
||||
GUTILS_C_VAR GThreadFunctions g_thread_functions_for_glib_use;
|
||||
GUTILS_C_VAR gboolean g_thread_use_default_impl;
|
||||
GUTILS_C_VAR gboolean g_threads_got_initialized;
|
||||
|
||||
/* initializes the mutex/cond/private implementation for glib, might
|
||||
* only be called once, and must not be called directly or indirectly
|
||||
* from another glib-function, e.g. as a callback. */
|
||||
void g_thread_init(GThreadFunctions* init);
|
||||
|
||||
/* Internal functions for fallback static mutex implementation
|
||||
* Please don't use it directly
|
||||
* from another glib-function, e.g. as a callback.
|
||||
*/
|
||||
GMutex* g_static_mutex_get_mutex_impl(GMutex** mutex);
|
||||
void g_thread_init (GThreadFunctions *vtable);
|
||||
|
||||
#define G_USE_THREAD_FUNC_UNCOND(name,arg) \
|
||||
(*g_thread_functions_for_glib_use.name)arg
|
||||
#define G_USE_THREAD_FUNC(name,fail,arg) \
|
||||
(g_thread_supported ? G_USE_THREAD_FUNC_UNCOND(name,arg) : (fail))
|
||||
/* internal function for fallback static mutex implementation */
|
||||
GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
||||
|
||||
/* shorthands for conditional and unconditional function calls */
|
||||
#define G_THREAD_UF(name, arglist) \
|
||||
(*g_thread_functions_for_glib_use . name) arglist
|
||||
#define G_THREAD_CF(name, fail, arg) \
|
||||
(g_thread_supported () ? G_THREAD_UF (name, arg) : (fail))
|
||||
/* keep in mind, all those mutexes and static mutexes are not
|
||||
* recursive in general, don't rely on that */
|
||||
#define g_mutex_new() G_USE_THREAD_FUNC_UNCOND(mutex_new,())
|
||||
#define g_mutex_lock(mutex) G_USE_THREAD_FUNC(mutex_lock,(void)0,(mutex))
|
||||
#define g_mutex_trylock(mutex) G_USE_THREAD_FUNC(mutex_trylock,TRUE,(mutex))
|
||||
#define g_mutex_unlock(mutex) G_USE_THREAD_FUNC(mutex_unlock,(void)0,(mutex))
|
||||
#define g_mutex_free(mutex) G_USE_THREAD_FUNC(mutex_free,(void)0,(mutex))
|
||||
#define g_cond_new() G_USE_THREAD_FUNC_UNCOND(cond_new,())
|
||||
#define g_cond_signal(cond) G_USE_THREAD_FUNC(cond_signal,(void)0,(cond))
|
||||
#define g_cond_broadcast(cond) G_USE_THREAD_FUNC(cond_broadcast,(void)0,(cond))
|
||||
#define g_cond_wait(cond,mutex) G_USE_THREAD_FUNC(cond_wait,(void)0,(cond,mutex))
|
||||
#define g_cond_timed_wait(cond,mutex,abs_time) \
|
||||
G_USE_THREAD_FUNC(cond_timed_wait,TRUE,(cond,mutex,abs_time))
|
||||
#define g_cond_free(cond) G_USE_THREAD_FUNC(cond_free,(void)0,(cond))
|
||||
|
||||
#define g_private_new(destructor) \
|
||||
G_USE_THREAD_FUNC_UNCOND(private_new,(destructor))
|
||||
#define g_private_get(private_key) \
|
||||
G_USE_THREAD_FUNC(private_get,((gpointer)private_key),(private_key))
|
||||
#define g_private_set(private_key,value) \
|
||||
G_USE_THREAD_FUNC(private_set,(void)(private_key=(GPrivate *)(value)), \
|
||||
(private_key,value))
|
||||
|
||||
/* GStaticMutex'es can be statically initialized with the value
|
||||
* recursive in general, don't rely on that
|
||||
*/
|
||||
#define g_thread_supported() (g_threads_got_initialized)
|
||||
#define g_mutex_new() G_THREAD_UF (mutex_new, ())
|
||||
#define g_mutex_lock(mutex) G_THREAD_CF (mutex_lock, (void)0, (mutex))
|
||||
#define g_mutex_trylock(mutex) G_THREAD_CF (mutex_trylock, TRUE, (mutex))
|
||||
#define g_mutex_unlock(mutex) G_THREAD_CF (mutex_unlock, (void)0, (mutex))
|
||||
#define g_mutex_free(mutex) G_THREAD_CF (mutex_free, (void)0, (mutex))
|
||||
#define g_cond_new() G_THREAD_UF (cond_new, ())
|
||||
#define g_cond_signal(cond) G_THREAD_CF (cond_signal, (void)0, (cond))
|
||||
#define g_cond_broadcast(cond) G_THREAD_CF (cond_broadcast, (void)0, (cond))
|
||||
#define g_cond_wait(cond, mutex) G_THREAD_CF (cond_wait, (void)0, (cond, \
|
||||
mutex))
|
||||
#define g_cond_free(cond) G_THREAD_CF (cond_free, (void)0, (cond))
|
||||
#define g_cond_timed_wait(cond, mutex, abs_time) G_THREAD_CF (cond_timed_wait, \
|
||||
TRUE, \
|
||||
(cond, mutex, \
|
||||
abs_time))
|
||||
#define g_private_new(destructor) G_THREAD_UF (private_new, (destructor))
|
||||
#define g_private_get(private_key) G_THREAD_CF (private_get, \
|
||||
((gpointer)private_key), \
|
||||
(private_key))
|
||||
#define g_private_set(private_key, value) G_THREAD_CF (private_set, \
|
||||
(void) (private_key = \
|
||||
(GPrivate*) (value)), \
|
||||
(private_key, value))
|
||||
/* GStaticMutexes can be statically initialized with the value
|
||||
* G_STATIC_MUTEX_INIT, and then they can directly be used, that is
|
||||
* much easier, than having to explicitly allocate the mutex before
|
||||
* use */
|
||||
* use
|
||||
*/
|
||||
#define g_static_mutex_lock(mutex) \
|
||||
g_mutex_lock( g_static_mutex_get_mutex(mutex) )
|
||||
g_mutex_lock (g_static_mutex_get_mutex (mutex))
|
||||
#define g_static_mutex_trylock(mutex) \
|
||||
g_mutex_trylock( g_static_mutex_get_mutex(mutex) )
|
||||
g_mutex_trylock (g_static_mutex_get_mutex (mutex))
|
||||
#define g_static_mutex_unlock(mutex) \
|
||||
g_mutex_unlock( g_static_mutex_get_mutex(mutex) )
|
||||
|
||||
g_mutex_unlock (g_static_mutex_get_mutex (mutex))
|
||||
struct _GStaticPrivate
|
||||
{
|
||||
guint index;
|
||||
};
|
||||
|
||||
#define G_STATIC_PRIVATE_INIT { 0 }
|
||||
gpointer g_static_private_get (GStaticPrivate *private_key);
|
||||
void g_static_private_set (GStaticPrivate *private_key,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
|
||||
gpointer g_static_private_get (GStaticPrivate* private_key);
|
||||
void g_static_private_set (GStaticPrivate *private_key,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
/* these are some convenience macros that expand to nothing if GLib was
|
||||
* configured with --deisable-threads. for using StaticMutexes, you
|
||||
* declare them with G_LOCK_DECLARE_STATIC (name) or G_LOCK_DECLARE (name)
|
||||
* if you need to export the mutex. name is a unique identifier for the
|
||||
* protected varibale or code portion. locking, testing and unlocking of
|
||||
* such mutexes can be done with G_LOCK(), G_UNLOCK() and G_TRYLOCK()
|
||||
* respectively.
|
||||
*/
|
||||
extern gboolean glib_dummy_decl;
|
||||
#define G_LOCK_NAME(name) (g__ ## name ## _lock)
|
||||
#ifdef G_THREADS_ENABLED
|
||||
# define G_LOCK_DECLARE_STATIC(name) static G_LOCK_DECLARE (name)
|
||||
# define G_LOCK_DECLARE(name) \
|
||||
GStaticMutex G_LOCK_NAME (name) = G_STATIC_MUTEX_INIT
|
||||
|
||||
/* these are some convenience macros, for using StaticMutex'es, you
|
||||
* define them by G_LOCK_DEFINE(name), where name could for example be the
|
||||
* name of the protected varibale, and you (un)lock them with
|
||||
* g_(un)lock(name) */
|
||||
#define g_lock_name(name) (name ## _lock)
|
||||
#define G_LOCK_DEFINE(name) GStaticMutex g_lock_name(name)=G_STATIC_MUTEX_INIT
|
||||
|
||||
#ifdef G_DEBUG_LOCKS
|
||||
#define g_lock(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, \
|
||||
G_LOG_LEVEL_MESSAGE, \
|
||||
"file %s: line %d (%s): locking: %s ", \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
__PRETTY_FUNCTION__, \
|
||||
#name); \
|
||||
g_static_mutex_lock(g_lock_name(name)); \
|
||||
# ifdef G_DEBUG_LOCKS
|
||||
# define G_LOCK(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
|
||||
"file %s: line %d (%s): locking: %s ", \
|
||||
__FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, \
|
||||
#name); \
|
||||
g_static_mutex_lock (G_LOCK_NAME (name)); \
|
||||
}G_STMT_END
|
||||
#define g_unlock(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, \
|
||||
G_LOG_LEVEL_MESSAGE, \
|
||||
"file %s: line %d (%s): unlocking: %s ", \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
__PRETTY_FUNCTION__, \
|
||||
#name); \
|
||||
g_static_mutex_unlock(g_lock_name(name)); \
|
||||
# define G_UNLOCK(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
|
||||
"file %s: line %d (%s): unlocking: %s ", \
|
||||
__FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, \
|
||||
#name); \
|
||||
g_static_mutex_unlock (G_LOCK_NAME (name)); \
|
||||
}G_STMT_END
|
||||
#define g_trylock(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, \
|
||||
G_LOG_LEVEL_MESSAGE, \
|
||||
"file %s: line %d (%s): try locking: %s ", \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
__PRETTY_FUNCTION__, \
|
||||
#name); \
|
||||
}G_STMT_END, g_static_mutex_trylock(g_lock_name(name))
|
||||
#else /* !G_DEBUG_LOCKS */
|
||||
#define g_lock(name) g_static_mutex_lock(g_lock_name(name))
|
||||
#define g_unlock(name) g_static_mutex_unlock(g_lock_name(name))
|
||||
#define g_trylock(name) g_static_mutex_trylock(g_lock_name(name))
|
||||
#endif
|
||||
# define G_TRYLOCK(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
|
||||
"file %s: line %d (%s): try locking: %s ", \
|
||||
__FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, \
|
||||
#name); \
|
||||
}G_STMT_END, g_static_mutex_trylock (G_LOCK_NAME (name))
|
||||
# else /* !G_DEBUG_LOCKS */
|
||||
# define G_LOCK(name) g_static_mutex_lock (G_LOCK_NAME (name))
|
||||
# define G_UNLOCK(name) g_static_mutex_unlock (G_LOCK_NAME (name))
|
||||
# define G_TRYLOCK(name) g_static_mutex_trylock (G_LOCK_NAME (name))
|
||||
# endif /* !G_DEBUG_LOCKS */
|
||||
#else /* !G_THREADS_ENABLED */
|
||||
# define G_LOCK_DECLARE_STATIC(name) extern gboolean glib_dummy_decl
|
||||
# define G_LOCK_DECLARE(name) extern gboolean glib_dummy_decl
|
||||
# define G_LOCK(name)
|
||||
# define G_UNLOCK(name)
|
||||
# define G_TRYLOCK(name) (FALSE)
|
||||
#endif /* !G_THREADS_ENABLED */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ static void g_array_maybe_expand (GRealArray *array,
|
||||
gint len);
|
||||
|
||||
static GMemChunk *array_mem_chunk = NULL;
|
||||
static G_LOCK_DEFINE(array_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (array_mem_chunk);
|
||||
|
||||
GArray*
|
||||
g_array_new (gboolean zero_terminated,
|
||||
@ -55,14 +55,14 @@ g_array_new (gboolean zero_terminated,
|
||||
{
|
||||
GRealArray *array;
|
||||
|
||||
g_lock (array_mem_chunk);
|
||||
G_LOCK (array_mem_chunk);
|
||||
if (!array_mem_chunk)
|
||||
array_mem_chunk = g_mem_chunk_new ("array mem chunk",
|
||||
sizeof (GRealArray),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
array = g_chunk_new (GRealArray, array_mem_chunk);
|
||||
g_unlock (array_mem_chunk);
|
||||
G_UNLOCK (array_mem_chunk);
|
||||
|
||||
array->data = NULL;
|
||||
array->len = 0;
|
||||
@ -81,9 +81,9 @@ g_array_free (GArray *array,
|
||||
if (free_segment)
|
||||
g_free (array->data);
|
||||
|
||||
g_lock (array_mem_chunk);
|
||||
G_LOCK (array_mem_chunk);
|
||||
g_mem_chunk_free (array_mem_chunk, array);
|
||||
g_unlock (array_mem_chunk);
|
||||
G_UNLOCK (array_mem_chunk);
|
||||
}
|
||||
|
||||
GArray*
|
||||
@ -250,7 +250,7 @@ static void g_ptr_array_maybe_expand (GRealPtrArray *array,
|
||||
gint len);
|
||||
|
||||
static GMemChunk *ptr_array_mem_chunk = NULL;
|
||||
static G_LOCK_DEFINE(ptr_array_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (ptr_array_mem_chunk);
|
||||
|
||||
|
||||
GPtrArray*
|
||||
@ -258,14 +258,14 @@ g_ptr_array_new (void)
|
||||
{
|
||||
GRealPtrArray *array;
|
||||
|
||||
g_lock (ptr_array_mem_chunk);
|
||||
G_LOCK (ptr_array_mem_chunk);
|
||||
if (!ptr_array_mem_chunk)
|
||||
ptr_array_mem_chunk = g_mem_chunk_new ("array mem chunk",
|
||||
sizeof (GRealPtrArray),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
array = g_chunk_new (GRealPtrArray, ptr_array_mem_chunk);
|
||||
g_unlock (ptr_array_mem_chunk);
|
||||
G_UNLOCK (ptr_array_mem_chunk);
|
||||
|
||||
array->pdata = NULL;
|
||||
array->len = 0;
|
||||
@ -283,9 +283,9 @@ g_ptr_array_free (GPtrArray *array,
|
||||
if (free_segment)
|
||||
g_free (array->pdata);
|
||||
|
||||
g_lock (ptr_array_mem_chunk);
|
||||
G_LOCK (ptr_array_mem_chunk);
|
||||
g_mem_chunk_free (ptr_array_mem_chunk, array);
|
||||
g_unlock (ptr_array_mem_chunk);
|
||||
G_UNLOCK (ptr_array_mem_chunk);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -61,7 +61,7 @@ static void g_cache_node_destroy (GCacheNode *node);
|
||||
|
||||
|
||||
static GMemChunk *node_mem_chunk = NULL;
|
||||
static G_LOCK_DEFINE(node_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (node_mem_chunk);
|
||||
|
||||
GCache*
|
||||
g_cache_new (GCacheNewFunc value_new_func,
|
||||
@ -198,13 +198,13 @@ g_cache_node_new (gpointer value)
|
||||
{
|
||||
GCacheNode *node;
|
||||
|
||||
g_lock (node_mem_chunk);
|
||||
G_LOCK (node_mem_chunk);
|
||||
if (!node_mem_chunk)
|
||||
node_mem_chunk = g_mem_chunk_new ("cache node mem chunk", sizeof (GCacheNode),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
node = g_chunk_new (GCacheNode, node_mem_chunk);
|
||||
g_unlock (node_mem_chunk);
|
||||
G_UNLOCK (node_mem_chunk);
|
||||
|
||||
node->value = value;
|
||||
node->ref_count = 1;
|
||||
@ -215,7 +215,7 @@ g_cache_node_new (gpointer value)
|
||||
static void
|
||||
g_cache_node_destroy (GCacheNode *node)
|
||||
{
|
||||
g_lock (node_mem_chunk);
|
||||
G_LOCK (node_mem_chunk);
|
||||
g_mem_chunk_free (node_mem_chunk, node);
|
||||
g_unlock (node_mem_chunk);
|
||||
G_UNLOCK (node_mem_chunk);
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ static inline GQuark g_quark_new (gchar *string);
|
||||
|
||||
|
||||
/* --- variables --- */
|
||||
static G_LOCK_DEFINE(g_dataset_global);
|
||||
G_LOCK_DECLARE_STATIC (g_dataset_global);
|
||||
static GHashTable *g_dataset_location_ht = NULL;
|
||||
static GDataset *g_dataset_cached = NULL; /* should this be
|
||||
threadspecific? */
|
||||
@ -76,7 +76,7 @@ static GMemChunk *g_data_mem_chunk = NULL;
|
||||
static GData *g_data_cache = NULL;
|
||||
static guint g_data_cache_length = 0;
|
||||
|
||||
static G_LOCK_DEFINE(g_quark_global);
|
||||
G_LOCK_DECLARE_STATIC (g_quark_global);
|
||||
static GHashTable *g_quark_ht = NULL;
|
||||
static gchar **g_quarks = NULL;
|
||||
static GQuark g_quark_seq_id = 0;
|
||||
@ -121,13 +121,13 @@ g_datalist_clear (GData **datalist)
|
||||
{
|
||||
g_return_if_fail (datalist != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (!g_dataset_location_ht)
|
||||
g_data_initialize ();
|
||||
|
||||
while (*datalist)
|
||||
g_datalist_clear_i (datalist);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
/* HOLDS: g_dataset_global_lock */
|
||||
@ -174,7 +174,7 @@ g_dataset_destroy (gconstpointer dataset_location)
|
||||
{
|
||||
g_return_if_fail (dataset_location != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (g_dataset_location_ht)
|
||||
{
|
||||
register GDataset *dataset;
|
||||
@ -183,7 +183,7 @@ g_dataset_destroy (gconstpointer dataset_location)
|
||||
if (dataset)
|
||||
g_dataset_destroy_internal (dataset);
|
||||
}
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
/* HOLDS: g_dataset_global_lock */
|
||||
@ -312,7 +312,7 @@ g_dataset_id_set_data_full (gconstpointer dataset_location,
|
||||
return;
|
||||
}
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (!g_dataset_location_ht)
|
||||
g_data_initialize ();
|
||||
|
||||
@ -328,7 +328,7 @@ g_dataset_id_set_data_full (gconstpointer dataset_location,
|
||||
}
|
||||
|
||||
g_data_set_internal (&dataset->datalist, key_id, data, destroy_func, dataset);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
void
|
||||
@ -348,12 +348,12 @@ g_datalist_id_set_data_full (GData **datalist,
|
||||
return;
|
||||
}
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (!g_dataset_location_ht)
|
||||
g_data_initialize ();
|
||||
|
||||
g_data_set_internal (datalist, key_id, data, destroy_func, NULL);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
void
|
||||
@ -362,7 +362,7 @@ g_dataset_id_remove_no_notify (gconstpointer dataset_location,
|
||||
{
|
||||
g_return_if_fail (dataset_location != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (key_id && g_dataset_location_ht)
|
||||
{
|
||||
GDataset *dataset;
|
||||
@ -371,7 +371,7 @@ g_dataset_id_remove_no_notify (gconstpointer dataset_location,
|
||||
if (dataset)
|
||||
g_data_set_internal (&dataset->datalist, key_id, NULL, (GDestroyNotify) 42, dataset);
|
||||
}
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
void
|
||||
@ -380,10 +380,10 @@ g_datalist_id_remove_no_notify (GData **datalist,
|
||||
{
|
||||
g_return_if_fail (datalist != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (key_id && g_dataset_location_ht)
|
||||
g_data_set_internal (datalist, key_id, NULL, (GDestroyNotify) 42, NULL);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
|
||||
gpointer
|
||||
@ -392,7 +392,7 @@ g_dataset_id_get_data (gconstpointer dataset_location,
|
||||
{
|
||||
g_return_val_if_fail (dataset_location != NULL, NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (key_id && g_dataset_location_ht)
|
||||
{
|
||||
register GDataset *dataset;
|
||||
@ -405,12 +405,12 @@ g_dataset_id_get_data (gconstpointer dataset_location,
|
||||
for (list = dataset->datalist; list; list = list->next)
|
||||
if (list->id == key_id)
|
||||
{
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
return list->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -443,11 +443,11 @@ g_dataset_foreach (gconstpointer dataset_location,
|
||||
g_return_if_fail (dataset_location != NULL);
|
||||
g_return_if_fail (func != NULL);
|
||||
|
||||
g_lock (g_dataset_global);
|
||||
G_LOCK (g_dataset_global);
|
||||
if (g_dataset_location_ht)
|
||||
{
|
||||
dataset = g_dataset_lookup (dataset_location);
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
if (dataset)
|
||||
{
|
||||
register GData *list;
|
||||
@ -458,7 +458,7 @@ g_dataset_foreach (gconstpointer dataset_location,
|
||||
}
|
||||
else
|
||||
{
|
||||
g_unlock (g_dataset_global);
|
||||
G_UNLOCK (g_dataset_global);
|
||||
}
|
||||
}
|
||||
|
||||
@ -510,10 +510,10 @@ g_quark_try_string (const gchar *string)
|
||||
GQuark quark = 0;
|
||||
g_return_val_if_fail (string != NULL, 0);
|
||||
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (g_quark_ht)
|
||||
quark = GPOINTER_TO_UINT (g_hash_table_lookup (g_quark_ht, string));
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return quark;
|
||||
}
|
||||
@ -525,7 +525,7 @@ g_quark_from_string (const gchar *string)
|
||||
|
||||
g_return_val_if_fail (string != NULL, 0);
|
||||
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (g_quark_ht)
|
||||
quark = (gulong) g_hash_table_lookup (g_quark_ht, string);
|
||||
else
|
||||
@ -536,7 +536,7 @@ g_quark_from_string (const gchar *string)
|
||||
|
||||
if (!quark)
|
||||
quark = g_quark_new (g_strdup (string));
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return quark;
|
||||
}
|
||||
@ -548,7 +548,7 @@ g_quark_from_static_string (const gchar *string)
|
||||
|
||||
g_return_val_if_fail (string != NULL, 0);
|
||||
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (g_quark_ht)
|
||||
quark = (gulong) g_hash_table_lookup (g_quark_ht, string);
|
||||
else
|
||||
@ -559,7 +559,7 @@ g_quark_from_static_string (const gchar *string)
|
||||
|
||||
if (!quark)
|
||||
quark = g_quark_new ((gchar*) string);
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return quark;
|
||||
}
|
||||
@ -568,10 +568,10 @@ gchar*
|
||||
g_quark_to_string (GQuark quark)
|
||||
{
|
||||
gchar* result = NULL;
|
||||
g_lock (g_quark_global);
|
||||
G_LOCK (g_quark_global);
|
||||
if (quark > 0 && quark <= g_quark_seq_id)
|
||||
result = g_quarks[quark - 1];
|
||||
g_unlock (g_quark_global);
|
||||
G_UNLOCK (g_quark_global);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -388,7 +388,7 @@ g_date_clear (GDate *d, guint ndates)
|
||||
memset (d, 0x0, ndates*sizeof (GDate));
|
||||
}
|
||||
|
||||
static G_LOCK_DEFINE(g_date_global);
|
||||
G_LOCK_DECLARE_STATIC (g_date_global);
|
||||
|
||||
/* These are for the parser, output to the user should use *
|
||||
* g_date_strftime () - this creates more never-freed memory to annoy
|
||||
@ -652,7 +652,7 @@ g_date_set_parse (GDate *d,
|
||||
/* set invalid */
|
||||
g_date_clear (d, 1);
|
||||
|
||||
g_lock (g_date_global);
|
||||
G_LOCK (g_date_global);
|
||||
|
||||
g_date_prepare_to_parse (str, &pt);
|
||||
|
||||
@ -664,7 +664,7 @@ g_date_set_parse (GDate *d,
|
||||
|
||||
if (pt.num_ints == 4)
|
||||
{
|
||||
g_unlock (g_date_global);
|
||||
G_UNLOCK (g_date_global);
|
||||
return; /* presumably a typo; bail out. */
|
||||
}
|
||||
|
||||
@ -782,7 +782,7 @@ g_date_set_parse (GDate *d,
|
||||
else
|
||||
g_message ("Rejected DMY %u %u %u", day, m, y);
|
||||
#endif
|
||||
g_unlock (g_date_global);
|
||||
G_UNLOCK (g_date_global);
|
||||
}
|
||||
|
||||
void
|
||||
|
14
glib/ghash.c
14
glib/ghash.c
@ -57,7 +57,7 @@ static void g_hash_node_destroy (GHashNode *hash_node);
|
||||
static void g_hash_nodes_destroy (GHashNode *hash_node);
|
||||
|
||||
|
||||
static G_LOCK_DEFINE(g_hash_global);
|
||||
G_LOCK_DECLARE_STATIC (g_hash_global);
|
||||
|
||||
static GMemChunk *node_mem_chunk = NULL;
|
||||
static GHashNode *node_free_list = NULL;
|
||||
@ -345,7 +345,7 @@ g_hash_node_new (gpointer key,
|
||||
{
|
||||
GHashNode *hash_node;
|
||||
|
||||
g_lock (g_hash_global);
|
||||
G_LOCK (g_hash_global);
|
||||
if (node_free_list)
|
||||
{
|
||||
hash_node = node_free_list;
|
||||
@ -360,7 +360,7 @@ g_hash_node_new (gpointer key,
|
||||
|
||||
hash_node = g_chunk_new (GHashNode, node_mem_chunk);
|
||||
}
|
||||
g_unlock (g_hash_global);
|
||||
G_UNLOCK (g_hash_global);
|
||||
|
||||
hash_node->key = key;
|
||||
hash_node->value = value;
|
||||
@ -372,10 +372,10 @@ g_hash_node_new (gpointer key,
|
||||
static void
|
||||
g_hash_node_destroy (GHashNode *hash_node)
|
||||
{
|
||||
g_lock (g_hash_global);
|
||||
G_LOCK (g_hash_global);
|
||||
hash_node->next = node_free_list;
|
||||
node_free_list = hash_node;
|
||||
g_unlock (g_hash_global);
|
||||
G_UNLOCK (g_hash_global);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -391,8 +391,8 @@ g_hash_nodes_destroy (GHashNode *hash_node)
|
||||
while (node->next)
|
||||
node = node->next;
|
||||
|
||||
g_lock (g_hash_global);
|
||||
G_LOCK (g_hash_global);
|
||||
node->next = node_free_list;
|
||||
node_free_list = hash_node;
|
||||
g_unlock (g_hash_global);
|
||||
G_UNLOCK (g_hash_global);
|
||||
}
|
||||
|
607
glib/glib.h
607
glib/glib.h
@ -2007,7 +2007,8 @@ gint g_scanner_stat_mode (const gchar *filename);
|
||||
} G_STMT_END
|
||||
|
||||
|
||||
/* Completion */
|
||||
/* GCompletion
|
||||
*/
|
||||
|
||||
struct _GCompletion
|
||||
{
|
||||
@ -2030,28 +2031,32 @@ GList* g_completion_complete (GCompletion* cmp,
|
||||
void g_completion_free (GCompletion* cmp);
|
||||
|
||||
|
||||
|
||||
|
||||
/* Date calculations (not time for now, to be resolved). These are a
|
||||
/* GDate
|
||||
*
|
||||
* Date calculations (not time for now, to be resolved). These are a
|
||||
* mutant combination of Steffen Beyer's DateCalc routines
|
||||
* (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
|
||||
* date routines (written for in-house software). Written by Havoc
|
||||
* Pennington <hp@pobox.com>
|
||||
*/
|
||||
|
||||
/* this enum is used to specify order of appearance in parsed date
|
||||
* strings
|
||||
*/
|
||||
typedef guint16 GDateYear;
|
||||
typedef guint8 GDateDay; /* day of the month */
|
||||
typedef struct _GDate GDate;
|
||||
/* make struct tm known without having to include time.h */
|
||||
struct tm;
|
||||
|
||||
typedef enum {
|
||||
/* enum used to specify order of appearance in parsed date strings */
|
||||
typedef enum
|
||||
{
|
||||
G_DATE_DAY = 0,
|
||||
G_DATE_MONTH = 1,
|
||||
G_DATE_YEAR = 2
|
||||
} GDateDMY;
|
||||
|
||||
/* These other types specify the actual values. */
|
||||
|
||||
typedef enum {
|
||||
/* actual week and month values */
|
||||
typedef enum
|
||||
{
|
||||
G_DATE_BAD_WEEKDAY = 0,
|
||||
G_DATE_MONDAY = 1,
|
||||
G_DATE_TUESDAY = 2,
|
||||
@ -2061,8 +2066,8 @@ typedef enum {
|
||||
G_DATE_SATURDAY = 6,
|
||||
G_DATE_SUNDAY = 7
|
||||
} GDateWeekday;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_DATE_BAD_MONTH = 0,
|
||||
G_DATE_JANUARY = 1,
|
||||
G_DATE_FEBRUARY = 2,
|
||||
@ -2078,22 +2083,17 @@ typedef enum {
|
||||
G_DATE_DECEMBER = 12
|
||||
} GDateMonth;
|
||||
|
||||
typedef guint16 GDateYear;
|
||||
typedef guint8 GDateDay; /* day of the month */
|
||||
|
||||
#define G_DATE_BAD_JULIAN 0U
|
||||
#define G_DATE_BAD_DAY 0U
|
||||
#define G_DATE_BAD_YEAR 0U
|
||||
|
||||
typedef struct _GDate GDate;
|
||||
|
||||
/* Note: directly manipulating structs is generally a bad idea, but
|
||||
* in this case it's an *incredibly* bad idea, because all or part
|
||||
* of this struct can be invalid at any given time. Use the functions,
|
||||
* or you will get hosed, I promise.
|
||||
*/
|
||||
|
||||
struct _GDate {
|
||||
struct _GDate
|
||||
{
|
||||
guint julian_days : 32; /* julian days representation - we use a
|
||||
* bitfield hoping that 64 bit platforms
|
||||
* will pack this whole struct in one big
|
||||
@ -2109,105 +2109,95 @@ struct _GDate {
|
||||
guint year : 16;
|
||||
};
|
||||
|
||||
/* _new with no args returns an invalid date, you then have to _set() stuff
|
||||
/* g_date_new() returns an invalid date, you then have to _set() stuff
|
||||
* to get a usable object. You can also allocate a GDate statically,
|
||||
* then call g_date_clear() to initialize.
|
||||
*/
|
||||
|
||||
GDate* g_date_new (void);
|
||||
GDate* g_date_new_dmy (GDateDay d,
|
||||
GDateMonth m,
|
||||
GDateYear y);
|
||||
GDate* g_date_new_dmy (GDateDay day,
|
||||
GDateMonth month,
|
||||
GDateYear year);
|
||||
GDate* g_date_new_julian (guint32 julian_day);
|
||||
void g_date_free (GDate *d);
|
||||
void g_date_free (GDate *date);
|
||||
|
||||
/* check g_date_valid() after doing an operation that might fail, like
|
||||
* _parse. Almost all g_date operations are undefined on invalid
|
||||
* dates (the exceptions are the mutators, since you need those to
|
||||
* return to validity).
|
||||
*/
|
||||
gboolean g_date_valid (GDate *date);
|
||||
gboolean g_date_valid_day (GDateDay day);
|
||||
gboolean g_date_valid_month (GDateMonth month);
|
||||
gboolean g_date_valid_year (GDateYear year);
|
||||
gboolean g_date_valid_weekday (GDateWeekday weekday);
|
||||
gboolean g_date_valid_julian (guint32 julian_date);
|
||||
gboolean g_date_valid_dmy (GDateDay day,
|
||||
GDateMonth month,
|
||||
GDateYear year);
|
||||
|
||||
gboolean g_date_valid (GDate *d);
|
||||
gboolean g_date_valid_day (GDateDay d);
|
||||
gboolean g_date_valid_month (GDateMonth m);
|
||||
gboolean g_date_valid_year (GDateYear y);
|
||||
gboolean g_date_valid_weekday (GDateWeekday w);
|
||||
gboolean g_date_valid_julian (guint32 j);
|
||||
gboolean g_date_valid_dmy (GDateDay d,
|
||||
GDateMonth m,
|
||||
GDateYear y);
|
||||
|
||||
GDateWeekday g_date_weekday (GDate *d);
|
||||
GDateMonth g_date_month (GDate *d);
|
||||
GDateYear g_date_year (GDate *d);
|
||||
GDateDay g_date_day (GDate *d);
|
||||
guint32 g_date_julian (GDate *d);
|
||||
|
||||
guint g_date_day_of_year (GDate *d);
|
||||
GDateWeekday g_date_weekday (GDate *date);
|
||||
GDateMonth g_date_month (GDate *date);
|
||||
GDateYear g_date_year (GDate *date);
|
||||
GDateDay g_date_day (GDate *date);
|
||||
guint32 g_date_julian (GDate *date);
|
||||
guint g_date_day_of_year (GDate *date);
|
||||
|
||||
/* First monday/sunday is the start of week 1; if we haven't reached
|
||||
* that day, return 0. These are not ISO weeks of the year; that
|
||||
* routine should be added.
|
||||
* that day, return 0. These are not ISO weeks of the year; that
|
||||
* routine needs to be added.
|
||||
* these functions return the number of weeks, starting on the
|
||||
* corrsponding day
|
||||
*/
|
||||
|
||||
guint g_date_monday_week_of_year (GDate *d); /* # weeks, starting on Monday */
|
||||
guint g_date_sunday_week_of_year (GDate *d); /* # weeks, starting on Sunday */
|
||||
guint g_date_monday_week_of_year (GDate *date);
|
||||
guint g_date_sunday_week_of_year (GDate *date);
|
||||
|
||||
/* If you create a static date struct you need to clear it to get it
|
||||
* in a sane state before use. You can clear a whole array at
|
||||
* once with the ndates argument.
|
||||
*/
|
||||
|
||||
void g_date_clear (GDate *d,
|
||||
guint ndates);
|
||||
void g_date_clear (GDate *date,
|
||||
guint n_dates);
|
||||
|
||||
/* The parse routine is meant for dates typed in by a user, so it
|
||||
* permits many formats but tries to catch common typos. If your data
|
||||
* needs to be strictly validated, it is not an appropriate function.
|
||||
*/
|
||||
|
||||
void g_date_set_parse (GDate *d,
|
||||
void g_date_set_parse (GDate *date,
|
||||
const gchar *str);
|
||||
|
||||
void g_date_set_time (GDate *d,
|
||||
void g_date_set_time (GDate *date,
|
||||
GTime time);
|
||||
|
||||
void g_date_set_month (GDate *d,
|
||||
GDateMonth m);
|
||||
void g_date_set_day (GDate *d,
|
||||
void g_date_set_month (GDate *date,
|
||||
GDateMonth month);
|
||||
void g_date_set_day (GDate *date,
|
||||
GDateDay day);
|
||||
void g_date_set_year (GDate *d,
|
||||
GDateYear y);
|
||||
void g_date_set_dmy (GDate *d,
|
||||
void g_date_set_year (GDate *date,
|
||||
GDateYear year);
|
||||
void g_date_set_dmy (GDate *date,
|
||||
GDateDay day,
|
||||
GDateMonth m,
|
||||
GDateMonth month,
|
||||
GDateYear y);
|
||||
|
||||
void g_date_set_julian (GDate *d,
|
||||
guint32 j);
|
||||
|
||||
gboolean g_date_is_first_of_month (GDate *d);
|
||||
gboolean g_date_is_last_of_month (GDate *d);
|
||||
|
||||
void g_date_set_julian (GDate *date,
|
||||
guint32 julian_date);
|
||||
gboolean g_date_is_first_of_month (GDate *date);
|
||||
gboolean g_date_is_last_of_month (GDate *date);
|
||||
|
||||
/* To go forward by some number of weeks just go forward weeks*7 days */
|
||||
void g_date_add_days (GDate *d,
|
||||
guint ndays);
|
||||
void g_date_subtract_days (GDate *d,
|
||||
guint ndays);
|
||||
void g_date_add_days (GDate *date,
|
||||
guint n_days);
|
||||
void g_date_subtract_days (GDate *date,
|
||||
guint n_days);
|
||||
|
||||
/* If you add/sub months while day > 28, the day might change */
|
||||
void g_date_add_months (GDate *d,
|
||||
guint nmonths);
|
||||
void g_date_subtract_months (GDate *d,
|
||||
guint nmonths);
|
||||
void g_date_add_months (GDate *date,
|
||||
guint n_months);
|
||||
void g_date_subtract_months (GDate *date,
|
||||
guint n_months);
|
||||
|
||||
/* If it's feb 29, changing years can move you to the 28th */
|
||||
void g_date_add_years (GDate *d,
|
||||
guint nyears);
|
||||
void g_date_subtract_years (GDate *d,
|
||||
guint nyears);
|
||||
|
||||
void g_date_add_years (GDate *date,
|
||||
guint n_years);
|
||||
void g_date_subtract_years (GDate *date,
|
||||
guint n_years);
|
||||
gboolean g_date_is_leap_year (GDateYear year);
|
||||
guint8 g_date_days_in_month (GDateMonth month,
|
||||
GDateYear year);
|
||||
@ -2217,11 +2207,7 @@ guint8 g_date_sunday_weeks_in_year (GDateYear year);
|
||||
/* qsort-friendly (with a cast...) */
|
||||
gint g_date_compare (GDate *lhs,
|
||||
GDate *rhs);
|
||||
|
||||
/* make struct tm known without having to include time.h */
|
||||
struct tm;
|
||||
|
||||
void g_date_to_struct_tm (GDate *d,
|
||||
void g_date_to_struct_tm (GDate *date,
|
||||
struct tm *tm);
|
||||
|
||||
/* Just like strftime() except you can only use date-related formats.
|
||||
@ -2230,12 +2216,12 @@ void g_date_to_struct_tm (GDate *d,
|
||||
gsize g_date_strftime (gchar *s,
|
||||
gsize slen,
|
||||
const gchar *format,
|
||||
GDate *d);
|
||||
GDate *date);
|
||||
|
||||
|
||||
|
||||
|
||||
/* GRelation: Indexed Relations. Imagine a really simple table in a
|
||||
/* GRelation
|
||||
*
|
||||
* Indexed Relations. Imagine a really simple table in a
|
||||
* database. Relations are not ordered. This data type is meant for
|
||||
* maintaining a N-way mapping.
|
||||
*
|
||||
@ -2295,47 +2281,47 @@ gpointer g_tuples_index (GTuples *tuples,
|
||||
guint g_spaced_primes_closest (guint num);
|
||||
|
||||
|
||||
/* IO Channels
|
||||
/* GIOChannel
|
||||
*/
|
||||
|
||||
typedef struct _GIOFuncs GIOFuncs;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_IO_ERROR_NONE,
|
||||
G_IO_ERROR_AGAIN,
|
||||
G_IO_ERROR_INVAL,
|
||||
G_IO_ERROR_UNKNOWN
|
||||
} GIOError;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_SEEK_CUR,
|
||||
G_SEEK_SET,
|
||||
G_SEEK_END
|
||||
} GSeekType;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
G_IO_IN
|
||||
#ifdef POLLIN
|
||||
= POLLIN
|
||||
#endif
|
||||
,G_IO_OUT
|
||||
, G_IO_OUT
|
||||
#ifdef POLLOUT
|
||||
= POLLOUT
|
||||
#endif
|
||||
,G_IO_PRI
|
||||
, G_IO_PRI
|
||||
#ifdef POLLPRI
|
||||
= POLLPRI
|
||||
#endif
|
||||
|
||||
,G_IO_ERR
|
||||
, G_IO_ERR
|
||||
#ifdef POLLERR
|
||||
= POLLERR
|
||||
#endif
|
||||
,G_IO_HUP
|
||||
, G_IO_HUP
|
||||
#ifdef POLLHUP
|
||||
= POLLHUP
|
||||
#endif
|
||||
,G_IO_NVAL
|
||||
, G_IO_NVAL
|
||||
#ifdef POLLNVAL
|
||||
= POLLNVAL
|
||||
#endif
|
||||
@ -2351,27 +2337,27 @@ struct _GIOChannel
|
||||
typedef gboolean (*GIOFunc) (GIOChannel *source,
|
||||
GIOCondition condition,
|
||||
gpointer data);
|
||||
|
||||
struct _GIOFuncs {
|
||||
GIOError (*io_read) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_read);
|
||||
GIOError (*io_write) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_written);
|
||||
GIOError (*io_seek) (GIOChannel *channel,
|
||||
gint offset,
|
||||
GSeekType type);
|
||||
void (*io_close) (GIOChannel *channel);
|
||||
guint (*io_add_watch) (GIOChannel *channel,
|
||||
gint priority,
|
||||
GIOCondition condition,
|
||||
GIOFunc func,
|
||||
gpointer user_data,
|
||||
GDestroyNotify notify);
|
||||
void (*io_free) (GIOChannel *channel);
|
||||
struct _GIOFuncs
|
||||
{
|
||||
GIOError (*io_read) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_read);
|
||||
GIOError (*io_write) (GIOChannel *channel,
|
||||
gchar *buf,
|
||||
guint count,
|
||||
guint *bytes_written);
|
||||
GIOError (*io_seek) (GIOChannel *channel,
|
||||
gint offset,
|
||||
GSeekType type);
|
||||
void (*io_close) (GIOChannel *channel);
|
||||
guint (*io_add_watch) (GIOChannel *channel,
|
||||
gint priority,
|
||||
GIOCondition condition,
|
||||
GIOFunc func,
|
||||
gpointer user_data,
|
||||
GDestroyNotify notify);
|
||||
void (*io_free) (GIOChannel *channel);
|
||||
};
|
||||
|
||||
void g_io_channel_init (GIOChannel *channel);
|
||||
@ -2400,19 +2386,20 @@ guint g_io_add_watch (GIOChannel *channel,
|
||||
GIOFunc func,
|
||||
gpointer user_data);
|
||||
|
||||
/* Main loop */
|
||||
|
||||
typedef struct _GTimeVal GTimeVal;
|
||||
typedef struct _GSourceFuncs GSourceFuncs;
|
||||
/* Main loop
|
||||
*/
|
||||
typedef struct _GTimeVal GTimeVal;
|
||||
typedef struct _GSourceFuncs GSourceFuncs;
|
||||
typedef struct _GMainLoop GMainLoop; /* Opaque */
|
||||
|
||||
typedef struct _GMainLoop GMainLoop; /* Opaque */
|
||||
|
||||
struct _GTimeVal {
|
||||
struct _GTimeVal
|
||||
{
|
||||
glong tv_sec;
|
||||
glong tv_usec;
|
||||
};
|
||||
|
||||
struct _GSourceFuncs {
|
||||
struct _GSourceFuncs
|
||||
{
|
||||
gboolean (*prepare) (gpointer source_data,
|
||||
GTimeVal *current_time,
|
||||
gint *timeout);
|
||||
@ -2424,10 +2411,9 @@ struct _GSourceFuncs {
|
||||
GDestroyNotify destroy;
|
||||
};
|
||||
|
||||
typedef gboolean (*GSourceFunc) (gpointer data);
|
||||
typedef gboolean (*GSourceFunc) (gpointer data);
|
||||
|
||||
/* Hooks for adding to the main loop */
|
||||
|
||||
guint g_source_add (gint priority,
|
||||
gboolean can_recurse,
|
||||
GSourceFuncs *funcs,
|
||||
@ -2438,67 +2424,65 @@ void g_source_remove (guint tag);
|
||||
void g_source_remove_by_user_data (gpointer user_data);
|
||||
void g_source_remove_by_source_data (gpointer source_data);
|
||||
|
||||
|
||||
void g_get_current_time (GTimeVal *result);
|
||||
void g_get_current_time (GTimeVal *result);
|
||||
|
||||
/* Running the main loop */
|
||||
|
||||
GMainLoop *g_main_new (void);
|
||||
void g_main_run (GMainLoop *loop);
|
||||
void g_main_quit (GMainLoop *loop);
|
||||
void g_main_destroy (GMainLoop *loop);
|
||||
GMainLoop* g_main_new (void);
|
||||
void g_main_run (GMainLoop *loop);
|
||||
void g_main_quit (GMainLoop *loop);
|
||||
void g_main_destroy (GMainLoop *loop);
|
||||
|
||||
/* Run a single iteration of the mainloop. If block is FALSE,
|
||||
* will never block
|
||||
*/
|
||||
gboolean g_main_iteration (gboolean block);
|
||||
gboolean g_main_iteration (gboolean may_block);
|
||||
|
||||
/* See if any events are pending
|
||||
*/
|
||||
gboolean g_main_pending ();
|
||||
/* See if any events are pending */
|
||||
gboolean g_main_pending (void);
|
||||
|
||||
/* Idles and timeouts */
|
||||
guint g_timeout_add_full (gint priority,
|
||||
guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
guint g_timeout_add (guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data);
|
||||
guint g_idle_add (GSourceFunc function,
|
||||
gpointer data);
|
||||
guint g_idle_add_full (gint priority,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify destroy);
|
||||
|
||||
guint g_timeout_add_full (gint priority,
|
||||
guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
guint g_timeout_add (guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data);
|
||||
|
||||
guint g_idle_add (GSourceFunc function,
|
||||
gpointer data);
|
||||
guint g_idle_add_full (gint priority,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify destroy);
|
||||
|
||||
/* Unix-specific IO and main loop calls */
|
||||
/* GPollFD
|
||||
*
|
||||
* Unix-specific IO and main loop calls
|
||||
*/
|
||||
|
||||
typedef struct _GPollFD GPollFD;
|
||||
|
||||
struct _GPollFD {
|
||||
gint fd;
|
||||
gushort events;
|
||||
gushort revents;
|
||||
typedef gint (*GPollFunc) (GPollFD *ufds,
|
||||
guint nfsd,
|
||||
gint timeout);
|
||||
struct _GPollFD
|
||||
{
|
||||
gint fd;
|
||||
gushort events;
|
||||
gushort revents;
|
||||
};
|
||||
|
||||
typedef gint (*GPollFunc) (GPollFD *ufds, guint nfsd, gint timeout);
|
||||
|
||||
void g_main_poll_add (gint priority,
|
||||
GPollFD *fd);
|
||||
void g_main_poll_remove (GPollFD *fd);
|
||||
|
||||
void g_main_set_poll_func (GPollFunc func);
|
||||
|
||||
|
||||
GIOChannel *g_io_channel_unix_new (int fd);
|
||||
GIOChannel* g_io_channel_unix_new (int fd);
|
||||
gint g_io_channel_unix_get_fd (GIOChannel *channel);
|
||||
|
||||
#if 0 /* old IO Channels */
|
||||
|
||||
/* old IO Channels */
|
||||
#if 0
|
||||
/* IO Channels.
|
||||
* These are used for plug-in communication in the GIMP, for instance.
|
||||
* On Unix, it's simply an encapsulated file descriptor (a pipe).
|
||||
@ -2521,7 +2505,6 @@ struct _GIOChannel
|
||||
*/
|
||||
#endif
|
||||
};
|
||||
|
||||
GIOChannel *g_iochannel_new (gint fd);
|
||||
void g_iochannel_free (GIOChannel *channel);
|
||||
void g_iochannel_close_and_free (GIOChannel *channel);
|
||||
@ -2529,16 +2512,14 @@ void g_iochannel_wakeup_peer (GIOChannel *channel);
|
||||
#ifndef NATIVE_WIN32
|
||||
# define g_iochannel_wakeup_peer(channel) G_STMT_START { } G_STMT_END
|
||||
#endif
|
||||
#endif /* old IO Channels */
|
||||
|
||||
#endif /* old IO Channels */
|
||||
|
||||
/* Windows emulation stubs for common unix functions
|
||||
*/
|
||||
#ifdef NATIVE_WIN32
|
||||
|
||||
#define MAXPATHLEN 1024
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# define MAXPATHLEN 1024
|
||||
# ifdef _MSC_VER
|
||||
typedef int pid_t;
|
||||
|
||||
/* These POSIXish functions are available in the Microsoft C library
|
||||
@ -2553,30 +2534,27 @@ typedef int pid_t;
|
||||
* For some functions, we provide emulators in glib, which are prefixed
|
||||
* with gwin_.
|
||||
*/
|
||||
#define getcwd _getcwd
|
||||
#define getpid _getpid
|
||||
#define access _access
|
||||
#define open _open
|
||||
#define read _read
|
||||
#define write _write
|
||||
#define lseek _lseek
|
||||
#define close _close
|
||||
#define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)
|
||||
#define popen _popen
|
||||
#define pclose _pclose
|
||||
#define fdopen _fdopen
|
||||
#define ftruncate(fd, size) gwin_ftruncate (fd, size)
|
||||
#define opendir gwin_opendir
|
||||
#define readdir gwin_readdir
|
||||
#define rewinddir gwin_rewinddir
|
||||
#define closedir gwin_closedir
|
||||
|
||||
#define NAME_MAX 255
|
||||
|
||||
# define getcwd _getcwd
|
||||
# define getpid _getpid
|
||||
# define access _access
|
||||
# define open _open
|
||||
# define read _read
|
||||
# define write _write
|
||||
# define lseek _lseek
|
||||
# define close _close
|
||||
# define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)
|
||||
# define popen _popen
|
||||
# define pclose _pclose
|
||||
# define fdopen _fdopen
|
||||
# define ftruncate(fd, size) gwin_ftruncate (fd, size)
|
||||
# define opendir gwin_opendir
|
||||
# define readdir gwin_readdir
|
||||
# define rewinddir gwin_rewinddir
|
||||
# define closedir gwin_closedir
|
||||
# define NAME_MAX 255
|
||||
struct DIR
|
||||
{
|
||||
gchar *dir_name;
|
||||
|
||||
gboolean just_opened;
|
||||
guint find_file_handle;
|
||||
gpointer find_file_data;
|
||||
@ -2586,7 +2564,6 @@ struct dirent
|
||||
{
|
||||
gchar d_name[NAME_MAX + 1];
|
||||
};
|
||||
|
||||
/* emulation functions */
|
||||
extern int gwin_ftruncate (gint f,
|
||||
guint size);
|
||||
@ -2594,145 +2571,153 @@ DIR* gwin_opendir (const gchar *dirname);
|
||||
struct dirent* gwin_readdir (DIR *dir);
|
||||
void gwin_rewinddir (DIR *dir);
|
||||
gint gwin_closedir (DIR *dir);
|
||||
# endif /* _MSC_VER */
|
||||
#endif /* NATIVE_WIN32 */
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#endif /* NATIVE_WIN32 */
|
||||
|
||||
/* functions for thread support for glib. */
|
||||
|
||||
typedef struct _GMutex GMutex;
|
||||
typedef struct _GCond GCond;
|
||||
typedef struct _GPrivate GPrivate;
|
||||
typedef struct _GStaticPrivate GStaticPrivate;
|
||||
|
||||
/* GLib Thread support
|
||||
*/
|
||||
typedef struct _GMutex GMutex;
|
||||
typedef struct _GCond GCond;
|
||||
typedef struct _GPrivate GPrivate;
|
||||
typedef struct _GStaticPrivate GStaticPrivate;
|
||||
typedef struct _GThreadFunctions GThreadFunctions;
|
||||
struct _GThreadFunctions
|
||||
{
|
||||
GMutex* (*mutex_new) (void);
|
||||
void (*mutex_lock) (GMutex* mutex);
|
||||
gboolean (*mutex_trylock) (GMutex* mutex);
|
||||
void (*mutex_unlock) (GMutex* mutex);
|
||||
void (*mutex_free) (GMutex* mutex);
|
||||
void (*mutex_lock) (GMutex *mutex);
|
||||
gboolean (*mutex_trylock) (GMutex *mutex);
|
||||
void (*mutex_unlock) (GMutex *mutex);
|
||||
void (*mutex_free) (GMutex *mutex);
|
||||
GCond* (*cond_new) (void);
|
||||
void (*cond_signal) (GCond* cond);
|
||||
void (*cond_broadcast) (GCond* cond);
|
||||
void (*cond_wait) (GCond* cond, GMutex* mutex);
|
||||
gboolean (*cond_timed_wait) (GCond* cond, GMutex* mutex,
|
||||
GTimeVal *end_time);
|
||||
void (*cond_free) (GCond* cond);
|
||||
GPrivate* (*private_new) (GDestroyNotify destructor);
|
||||
gpointer (*private_get) (GPrivate* private_key);
|
||||
void (*private_set) (GPrivate* private_key, gpointer value);
|
||||
void (*cond_signal) (GCond *cond);
|
||||
void (*cond_broadcast) (GCond *cond);
|
||||
void (*cond_wait) (GCond *cond,
|
||||
GMutex *mutex);
|
||||
gboolean (*cond_timed_wait) (GCond *cond,
|
||||
GMutex *mutex,
|
||||
GTimeVal *end_time);
|
||||
void (*cond_free) (GCond *cond);
|
||||
GPrivate* (*private_new) (GDestroyNotify destructor);
|
||||
gpointer (*private_get) (GPrivate *private_key);
|
||||
void (*private_set) (GPrivate *private_key,
|
||||
gpointer data);
|
||||
};
|
||||
|
||||
GUTILS_C_VAR GThreadFunctions g_thread_functions_for_glib_use;
|
||||
GUTILS_C_VAR gboolean g_thread_use_default_impl;
|
||||
GUTILS_C_VAR gboolean g_thread_supported;
|
||||
GUTILS_C_VAR GThreadFunctions g_thread_functions_for_glib_use;
|
||||
GUTILS_C_VAR gboolean g_thread_use_default_impl;
|
||||
GUTILS_C_VAR gboolean g_threads_got_initialized;
|
||||
|
||||
/* initializes the mutex/cond/private implementation for glib, might
|
||||
* only be called once, and must not be called directly or indirectly
|
||||
* from another glib-function, e.g. as a callback. */
|
||||
void g_thread_init(GThreadFunctions* init);
|
||||
|
||||
/* Internal functions for fallback static mutex implementation
|
||||
* Please don't use it directly
|
||||
* from another glib-function, e.g. as a callback.
|
||||
*/
|
||||
GMutex* g_static_mutex_get_mutex_impl(GMutex** mutex);
|
||||
void g_thread_init (GThreadFunctions *vtable);
|
||||
|
||||
#define G_USE_THREAD_FUNC_UNCOND(name,arg) \
|
||||
(*g_thread_functions_for_glib_use.name)arg
|
||||
#define G_USE_THREAD_FUNC(name,fail,arg) \
|
||||
(g_thread_supported ? G_USE_THREAD_FUNC_UNCOND(name,arg) : (fail))
|
||||
/* internal function for fallback static mutex implementation */
|
||||
GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
||||
|
||||
/* shorthands for conditional and unconditional function calls */
|
||||
#define G_THREAD_UF(name, arglist) \
|
||||
(*g_thread_functions_for_glib_use . name) arglist
|
||||
#define G_THREAD_CF(name, fail, arg) \
|
||||
(g_thread_supported () ? G_THREAD_UF (name, arg) : (fail))
|
||||
/* keep in mind, all those mutexes and static mutexes are not
|
||||
* recursive in general, don't rely on that */
|
||||
#define g_mutex_new() G_USE_THREAD_FUNC_UNCOND(mutex_new,())
|
||||
#define g_mutex_lock(mutex) G_USE_THREAD_FUNC(mutex_lock,(void)0,(mutex))
|
||||
#define g_mutex_trylock(mutex) G_USE_THREAD_FUNC(mutex_trylock,TRUE,(mutex))
|
||||
#define g_mutex_unlock(mutex) G_USE_THREAD_FUNC(mutex_unlock,(void)0,(mutex))
|
||||
#define g_mutex_free(mutex) G_USE_THREAD_FUNC(mutex_free,(void)0,(mutex))
|
||||
#define g_cond_new() G_USE_THREAD_FUNC_UNCOND(cond_new,())
|
||||
#define g_cond_signal(cond) G_USE_THREAD_FUNC(cond_signal,(void)0,(cond))
|
||||
#define g_cond_broadcast(cond) G_USE_THREAD_FUNC(cond_broadcast,(void)0,(cond))
|
||||
#define g_cond_wait(cond,mutex) G_USE_THREAD_FUNC(cond_wait,(void)0,(cond,mutex))
|
||||
#define g_cond_timed_wait(cond,mutex,abs_time) \
|
||||
G_USE_THREAD_FUNC(cond_timed_wait,TRUE,(cond,mutex,abs_time))
|
||||
#define g_cond_free(cond) G_USE_THREAD_FUNC(cond_free,(void)0,(cond))
|
||||
|
||||
#define g_private_new(destructor) \
|
||||
G_USE_THREAD_FUNC_UNCOND(private_new,(destructor))
|
||||
#define g_private_get(private_key) \
|
||||
G_USE_THREAD_FUNC(private_get,((gpointer)private_key),(private_key))
|
||||
#define g_private_set(private_key,value) \
|
||||
G_USE_THREAD_FUNC(private_set,(void)(private_key=(GPrivate *)(value)), \
|
||||
(private_key,value))
|
||||
|
||||
/* GStaticMutex'es can be statically initialized with the value
|
||||
* recursive in general, don't rely on that
|
||||
*/
|
||||
#define g_thread_supported() (g_threads_got_initialized)
|
||||
#define g_mutex_new() G_THREAD_UF (mutex_new, ())
|
||||
#define g_mutex_lock(mutex) G_THREAD_CF (mutex_lock, (void)0, (mutex))
|
||||
#define g_mutex_trylock(mutex) G_THREAD_CF (mutex_trylock, TRUE, (mutex))
|
||||
#define g_mutex_unlock(mutex) G_THREAD_CF (mutex_unlock, (void)0, (mutex))
|
||||
#define g_mutex_free(mutex) G_THREAD_CF (mutex_free, (void)0, (mutex))
|
||||
#define g_cond_new() G_THREAD_UF (cond_new, ())
|
||||
#define g_cond_signal(cond) G_THREAD_CF (cond_signal, (void)0, (cond))
|
||||
#define g_cond_broadcast(cond) G_THREAD_CF (cond_broadcast, (void)0, (cond))
|
||||
#define g_cond_wait(cond, mutex) G_THREAD_CF (cond_wait, (void)0, (cond, \
|
||||
mutex))
|
||||
#define g_cond_free(cond) G_THREAD_CF (cond_free, (void)0, (cond))
|
||||
#define g_cond_timed_wait(cond, mutex, abs_time) G_THREAD_CF (cond_timed_wait, \
|
||||
TRUE, \
|
||||
(cond, mutex, \
|
||||
abs_time))
|
||||
#define g_private_new(destructor) G_THREAD_UF (private_new, (destructor))
|
||||
#define g_private_get(private_key) G_THREAD_CF (private_get, \
|
||||
((gpointer)private_key), \
|
||||
(private_key))
|
||||
#define g_private_set(private_key, value) G_THREAD_CF (private_set, \
|
||||
(void) (private_key = \
|
||||
(GPrivate*) (value)), \
|
||||
(private_key, value))
|
||||
/* GStaticMutexes can be statically initialized with the value
|
||||
* G_STATIC_MUTEX_INIT, and then they can directly be used, that is
|
||||
* much easier, than having to explicitly allocate the mutex before
|
||||
* use */
|
||||
* use
|
||||
*/
|
||||
#define g_static_mutex_lock(mutex) \
|
||||
g_mutex_lock( g_static_mutex_get_mutex(mutex) )
|
||||
g_mutex_lock (g_static_mutex_get_mutex (mutex))
|
||||
#define g_static_mutex_trylock(mutex) \
|
||||
g_mutex_trylock( g_static_mutex_get_mutex(mutex) )
|
||||
g_mutex_trylock (g_static_mutex_get_mutex (mutex))
|
||||
#define g_static_mutex_unlock(mutex) \
|
||||
g_mutex_unlock( g_static_mutex_get_mutex(mutex) )
|
||||
|
||||
g_mutex_unlock (g_static_mutex_get_mutex (mutex))
|
||||
struct _GStaticPrivate
|
||||
{
|
||||
guint index;
|
||||
};
|
||||
|
||||
#define G_STATIC_PRIVATE_INIT { 0 }
|
||||
gpointer g_static_private_get (GStaticPrivate *private_key);
|
||||
void g_static_private_set (GStaticPrivate *private_key,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
|
||||
gpointer g_static_private_get (GStaticPrivate* private_key);
|
||||
void g_static_private_set (GStaticPrivate *private_key,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
/* these are some convenience macros that expand to nothing if GLib was
|
||||
* configured with --deisable-threads. for using StaticMutexes, you
|
||||
* declare them with G_LOCK_DECLARE_STATIC (name) or G_LOCK_DECLARE (name)
|
||||
* if you need to export the mutex. name is a unique identifier for the
|
||||
* protected varibale or code portion. locking, testing and unlocking of
|
||||
* such mutexes can be done with G_LOCK(), G_UNLOCK() and G_TRYLOCK()
|
||||
* respectively.
|
||||
*/
|
||||
extern gboolean glib_dummy_decl;
|
||||
#define G_LOCK_NAME(name) (g__ ## name ## _lock)
|
||||
#ifdef G_THREADS_ENABLED
|
||||
# define G_LOCK_DECLARE_STATIC(name) static G_LOCK_DECLARE (name)
|
||||
# define G_LOCK_DECLARE(name) \
|
||||
GStaticMutex G_LOCK_NAME (name) = G_STATIC_MUTEX_INIT
|
||||
|
||||
/* these are some convenience macros, for using StaticMutex'es, you
|
||||
* define them by G_LOCK_DEFINE(name), where name could for example be the
|
||||
* name of the protected varibale, and you (un)lock them with
|
||||
* g_(un)lock(name) */
|
||||
#define g_lock_name(name) (name ## _lock)
|
||||
#define G_LOCK_DEFINE(name) GStaticMutex g_lock_name(name)=G_STATIC_MUTEX_INIT
|
||||
|
||||
#ifdef G_DEBUG_LOCKS
|
||||
#define g_lock(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, \
|
||||
G_LOG_LEVEL_MESSAGE, \
|
||||
"file %s: line %d (%s): locking: %s ", \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
__PRETTY_FUNCTION__, \
|
||||
#name); \
|
||||
g_static_mutex_lock(g_lock_name(name)); \
|
||||
# ifdef G_DEBUG_LOCKS
|
||||
# define G_LOCK(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
|
||||
"file %s: line %d (%s): locking: %s ", \
|
||||
__FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, \
|
||||
#name); \
|
||||
g_static_mutex_lock (G_LOCK_NAME (name)); \
|
||||
}G_STMT_END
|
||||
#define g_unlock(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, \
|
||||
G_LOG_LEVEL_MESSAGE, \
|
||||
"file %s: line %d (%s): unlocking: %s ", \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
__PRETTY_FUNCTION__, \
|
||||
#name); \
|
||||
g_static_mutex_unlock(g_lock_name(name)); \
|
||||
# define G_UNLOCK(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
|
||||
"file %s: line %d (%s): unlocking: %s ", \
|
||||
__FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, \
|
||||
#name); \
|
||||
g_static_mutex_unlock (G_LOCK_NAME (name)); \
|
||||
}G_STMT_END
|
||||
#define g_trylock(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, \
|
||||
G_LOG_LEVEL_MESSAGE, \
|
||||
"file %s: line %d (%s): try locking: %s ", \
|
||||
__FILE__, \
|
||||
__LINE__, \
|
||||
__PRETTY_FUNCTION__, \
|
||||
#name); \
|
||||
}G_STMT_END, g_static_mutex_trylock(g_lock_name(name))
|
||||
#else /* !G_DEBUG_LOCKS */
|
||||
#define g_lock(name) g_static_mutex_lock(g_lock_name(name))
|
||||
#define g_unlock(name) g_static_mutex_unlock(g_lock_name(name))
|
||||
#define g_trylock(name) g_static_mutex_trylock(g_lock_name(name))
|
||||
#endif
|
||||
# define G_TRYLOCK(name) G_STMT_START{ \
|
||||
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
|
||||
"file %s: line %d (%s): try locking: %s ", \
|
||||
__FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, \
|
||||
#name); \
|
||||
}G_STMT_END, g_static_mutex_trylock (G_LOCK_NAME (name))
|
||||
# else /* !G_DEBUG_LOCKS */
|
||||
# define G_LOCK(name) g_static_mutex_lock (G_LOCK_NAME (name))
|
||||
# define G_UNLOCK(name) g_static_mutex_unlock (G_LOCK_NAME (name))
|
||||
# define G_TRYLOCK(name) g_static_mutex_trylock (G_LOCK_NAME (name))
|
||||
# endif /* !G_DEBUG_LOCKS */
|
||||
#else /* !G_THREADS_ENABLED */
|
||||
# define G_LOCK_DECLARE_STATIC(name) extern gboolean glib_dummy_decl
|
||||
# define G_LOCK_DECLARE(name) extern gboolean glib_dummy_decl
|
||||
# define G_LOCK(name)
|
||||
# define G_UNLOCK(name)
|
||||
# define G_TRYLOCK(name) (FALSE)
|
||||
#endif /* !G_THREADS_ENABLED */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
22
glib/glist.c
22
glib/glist.c
@ -36,7 +36,7 @@ struct _GAllocator /* from gmem.c */
|
||||
};
|
||||
|
||||
static GAllocator *current_allocator = NULL;
|
||||
static G_LOCK_DEFINE(current_allocator);
|
||||
G_LOCK_DECLARE_STATIC (current_allocator);
|
||||
|
||||
/* HOLDS: current_allocator_lock */
|
||||
static void
|
||||
@ -70,17 +70,17 @@ g_list_validate_allocator (GAllocator *allocator)
|
||||
void
|
||||
g_list_push_allocator(GAllocator *allocator)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
g_list_validate_allocator ( allocator );
|
||||
allocator->last = current_allocator;
|
||||
current_allocator = allocator;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
g_list_pop_allocator (void)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (current_allocator)
|
||||
{
|
||||
GAllocator *allocator;
|
||||
@ -90,7 +90,7 @@ g_list_pop_allocator (void)
|
||||
allocator->last = NULL;
|
||||
allocator->is_unused = TRUE;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
GList*
|
||||
@ -98,7 +98,7 @@ g_list_alloc (void)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (!current_allocator)
|
||||
{
|
||||
GAllocator *allocator = g_allocator_new ("GLib default GList allocator",
|
||||
@ -126,7 +126,7 @@ g_list_alloc (void)
|
||||
current_allocator->free_lists = list->next;
|
||||
}
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
list->next = NULL;
|
||||
list->prev = NULL;
|
||||
|
||||
@ -139,10 +139,10 @@ g_list_free (GList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = list->next;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,10 +152,10 @@ g_list_free_1 (GList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = NULL;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
|
46
glib/gmain.c
46
glib/gmain.c
@ -101,7 +101,7 @@ static GHookList source_list = { 0 };
|
||||
/* The following lock is used for both the list of sources
|
||||
* and the list of poll records
|
||||
*/
|
||||
static G_LOCK_DEFINE (main_loop);
|
||||
G_LOCK_DECLARE_STATIC (main_loop);
|
||||
|
||||
static GSourceFuncs timeout_funcs = {
|
||||
g_timeout_prepare,
|
||||
@ -232,7 +232,7 @@ g_source_add (gint priority,
|
||||
guint return_val;
|
||||
GSource *source;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
if (!source_list.is_setup)
|
||||
g_hook_list_init (&source_list, sizeof(GSource));
|
||||
@ -261,7 +261,7 @@ g_source_add (gint priority,
|
||||
write (wake_up_pipe[1], "A", 1);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
|
||||
return return_val;
|
||||
}
|
||||
@ -271,7 +271,7 @@ g_source_remove (guint tag)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
hook = g_hook_get (&source_list, tag);
|
||||
if (hook)
|
||||
@ -281,7 +281,7 @@ g_source_remove (guint tag)
|
||||
g_hook_destroy_link (&source_list, hook);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void
|
||||
@ -289,7 +289,7 @@ g_source_remove_by_user_data (gpointer user_data)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
hook = g_hook_find_data (&source_list, TRUE, user_data);
|
||||
if (hook)
|
||||
@ -299,7 +299,7 @@ g_source_remove_by_user_data (gpointer user_data)
|
||||
g_hook_destroy_link (&source_list, hook);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -315,7 +315,7 @@ g_source_remove_by_source_data (gpointer source_data)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
hook = g_hook_find (&source_list, TRUE,
|
||||
g_source_find_source_data, source_data);
|
||||
@ -326,7 +326,7 @@ g_source_remove_by_source_data (gpointer source_data)
|
||||
g_hook_destroy_link (&source_list, hook);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void g_get_current_time (GTimeVal *result)
|
||||
@ -360,11 +360,11 @@ g_main_dispatch (GTimeVal *current_time)
|
||||
|
||||
source->hook.flags |= G_HOOK_FLAG_IN_CALL;
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
need_destroy = ! dispatch(source_data,
|
||||
current_time,
|
||||
hook_data);
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
source->hook.flags &= ~G_HOOK_FLAG_IN_CALL;
|
||||
|
||||
@ -394,7 +394,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
|
||||
g_get_current_time (¤t_time);
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
/* If recursing, finish up current dispatch, before starting over */
|
||||
if (pending_dispatches)
|
||||
@ -402,7 +402,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
if (dispatch)
|
||||
g_main_dispatch (¤t_time);
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -434,7 +434,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
if (!dispatch)
|
||||
{
|
||||
g_hook_unref (&source_list, hook);
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@ -499,7 +499,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
else
|
||||
{
|
||||
g_hook_unref (&source_list, hook);
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -519,7 +519,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
retval = TRUE;
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -605,10 +605,10 @@ g_main_poll (gint timeout, gboolean use_priority, gint priority)
|
||||
|
||||
poll_waiting = TRUE;
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
npoll = i;
|
||||
(*poll_func) (fd_array, npoll, timeout);
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
if (!poll_waiting)
|
||||
{
|
||||
@ -634,9 +634,9 @@ void
|
||||
g_main_poll_add (gint priority,
|
||||
GPollFD *fd)
|
||||
{
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
g_main_poll_add_unlocked (priority, fd);
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -676,7 +676,7 @@ g_main_poll_add_unlocked (gint priority,
|
||||
|
||||
n_poll_records++;
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void
|
||||
@ -684,7 +684,7 @@ g_main_poll_remove (GPollFD *fd)
|
||||
{
|
||||
GPollRec *pollrec, *lastrec;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
lastrec = NULL;
|
||||
pollrec = poll_records;
|
||||
@ -708,7 +708,7 @@ g_main_poll_remove (GPollFD *fd)
|
||||
pollrec = pollrec->next;
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void
|
||||
|
18
glib/gnode.c
18
glib/gnode.c
@ -39,7 +39,7 @@ struct _GAllocator /* from gmem.c */
|
||||
GNode *free_nodes; /* implementation specific */
|
||||
};
|
||||
|
||||
static G_LOCK_DEFINE(current_allocator);
|
||||
G_LOCK_DECLARE_STATIC (current_allocator);
|
||||
static GAllocator *current_allocator = NULL;
|
||||
|
||||
/* HOLDS: current_allocator_lock */
|
||||
@ -74,17 +74,17 @@ g_node_validate_allocator (GAllocator *allocator)
|
||||
void
|
||||
g_node_push_allocator (GAllocator *allocator)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
g_node_validate_allocator ( allocator );
|
||||
allocator->last = current_allocator;
|
||||
current_allocator = allocator;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
g_node_pop_allocator (void)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (current_allocator)
|
||||
{
|
||||
GAllocator *allocator;
|
||||
@ -94,7 +94,7 @@ g_node_pop_allocator (void)
|
||||
allocator->last = NULL;
|
||||
allocator->is_unused = TRUE;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
|
||||
@ -104,7 +104,7 @@ g_node_new (gpointer data)
|
||||
{
|
||||
GNode *node;
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (!current_allocator)
|
||||
{
|
||||
GAllocator *allocator = g_allocator_new ("GLib default GNode allocator",
|
||||
@ -120,7 +120,7 @@ g_node_new (gpointer data)
|
||||
node = current_allocator->free_nodes;
|
||||
current_allocator->free_nodes = node->next;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
|
||||
node->data = data;
|
||||
node->next = NULL;
|
||||
@ -147,10 +147,10 @@ g_nodes_free (GNode *node)
|
||||
break;
|
||||
}
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
parent->next = current_allocator->free_nodes;
|
||||
current_allocator->free_nodes = node;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -35,7 +35,7 @@ struct _GAllocator /* from gmem.c */
|
||||
GSList *free_lists; /* implementation specific */
|
||||
};
|
||||
|
||||
static G_LOCK_DEFINE(current_allocator);
|
||||
G_LOCK_DECLARE_STATIC (current_allocator);
|
||||
static GAllocator *current_allocator = NULL;
|
||||
|
||||
/* HOLDS: current_allocator_lock */
|
||||
@ -70,17 +70,17 @@ g_slist_validate_allocator (GAllocator *allocator)
|
||||
void
|
||||
g_slist_push_allocator (GAllocator *allocator)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
g_slist_validate_allocator (allocator);
|
||||
allocator->last = current_allocator;
|
||||
current_allocator = allocator;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
g_slist_pop_allocator (void)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (current_allocator)
|
||||
{
|
||||
GAllocator *allocator;
|
||||
@ -90,7 +90,7 @@ g_slist_pop_allocator (void)
|
||||
allocator->last = NULL;
|
||||
allocator->is_unused = TRUE;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
GSList*
|
||||
@ -98,7 +98,7 @@ g_slist_alloc (void)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (!current_allocator)
|
||||
{
|
||||
GAllocator *allocator = g_allocator_new ("GLib default GSList allocator",
|
||||
@ -126,7 +126,7 @@ g_slist_alloc (void)
|
||||
current_allocator->free_lists = list->next;
|
||||
}
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
|
||||
list->next = NULL;
|
||||
|
||||
@ -139,10 +139,10 @@ g_slist_free (GSList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = list->next;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,10 +152,10 @@ g_slist_free_1 (GSList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = NULL;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ struct _GRealString
|
||||
gint alloc;
|
||||
};
|
||||
|
||||
static G_LOCK_DEFINE(string_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (string_mem_chunk);
|
||||
static GMemChunk *string_mem_chunk = NULL;
|
||||
|
||||
/* Hash Functions.
|
||||
@ -207,14 +207,14 @@ g_string_sized_new (guint dfl_size)
|
||||
{
|
||||
GRealString *string;
|
||||
|
||||
g_lock (string_mem_chunk);
|
||||
G_LOCK (string_mem_chunk);
|
||||
if (!string_mem_chunk)
|
||||
string_mem_chunk = g_mem_chunk_new ("string mem chunk",
|
||||
sizeof (GRealString),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
string = g_chunk_new (GRealString, string_mem_chunk);
|
||||
g_unlock (string_mem_chunk);
|
||||
G_UNLOCK (string_mem_chunk);
|
||||
|
||||
string->alloc = 0;
|
||||
string->len = 0;
|
||||
@ -248,9 +248,9 @@ g_string_free (GString *string,
|
||||
if (free_segment)
|
||||
g_free (string->str);
|
||||
|
||||
g_lock (string_mem_chunk);
|
||||
G_LOCK (string_mem_chunk);
|
||||
g_mem_chunk_free (string_mem_chunk, string);
|
||||
g_unlock (string_mem_chunk);
|
||||
G_UNLOCK (string_mem_chunk);
|
||||
}
|
||||
|
||||
GString*
|
||||
|
14
glib/gtree.c
14
glib/gtree.c
@ -83,7 +83,7 @@ static GTreeNode* g_tree_node_rotate_right (GTreeNode *node);
|
||||
static void g_tree_node_check (GTreeNode *node);
|
||||
|
||||
|
||||
static G_LOCK_DEFINE(g_tree_global);
|
||||
G_LOCK_DECLARE_STATIC (g_tree_global);
|
||||
static GMemChunk *node_mem_chunk = NULL;
|
||||
static GTreeNode *node_free_list = NULL;
|
||||
|
||||
@ -94,7 +94,7 @@ g_tree_node_new (gpointer key,
|
||||
{
|
||||
GTreeNode *node;
|
||||
|
||||
g_lock (g_tree_global);
|
||||
G_LOCK (g_tree_global);
|
||||
if (node_free_list)
|
||||
{
|
||||
node = node_free_list;
|
||||
@ -110,7 +110,7 @@ g_tree_node_new (gpointer key,
|
||||
|
||||
node = g_chunk_new (GTreeNode, node_mem_chunk);
|
||||
}
|
||||
g_unlock (g_tree_global);
|
||||
G_UNLOCK (g_tree_global);
|
||||
|
||||
node->balance = 0;
|
||||
node->left = NULL;
|
||||
@ -128,10 +128,10 @@ g_tree_node_destroy (GTreeNode *node)
|
||||
{
|
||||
g_tree_node_destroy (node->right);
|
||||
g_tree_node_destroy (node->left);
|
||||
g_lock (g_tree_global);
|
||||
G_LOCK (g_tree_global);
|
||||
node->right = node_free_list;
|
||||
node_free_list = node;
|
||||
g_unlock (g_tree_global);
|
||||
G_UNLOCK (g_tree_global);
|
||||
}
|
||||
}
|
||||
|
||||
@ -385,10 +385,10 @@ g_tree_node_remove (GTreeNode *node,
|
||||
node = g_tree_node_restore_right_balance (new_root, old_balance);
|
||||
}
|
||||
|
||||
g_lock (g_tree_global);
|
||||
G_LOCK (g_tree_global);
|
||||
garbage->right = node_free_list;
|
||||
node_free_list = garbage;
|
||||
g_unlock (g_tree_global);
|
||||
G_UNLOCK (g_tree_global);
|
||||
}
|
||||
else if (cmp < 0)
|
||||
{
|
||||
|
@ -371,7 +371,7 @@ g_getenv (const gchar *variable)
|
||||
#endif
|
||||
}
|
||||
|
||||
static G_LOCK_DEFINE(g_utils_global);
|
||||
G_LOCK_DECLARE_STATIC (g_utils_global);
|
||||
|
||||
static gchar *g_tmp_dir = NULL;
|
||||
static gchar *g_user_name = NULL;
|
||||
@ -455,10 +455,10 @@ g_get_any_init (void)
|
||||
gchar*
|
||||
g_get_user_name (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_user_name;
|
||||
}
|
||||
@ -466,10 +466,10 @@ g_get_user_name (void)
|
||||
gchar*
|
||||
g_get_real_name (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_real_name;
|
||||
}
|
||||
@ -483,10 +483,10 @@ g_get_real_name (void)
|
||||
gchar*
|
||||
g_get_home_dir (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_home_dir;
|
||||
}
|
||||
@ -501,10 +501,10 @@ g_get_home_dir (void)
|
||||
gchar*
|
||||
g_get_tmp_dir (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_tmp_dir;
|
||||
}
|
||||
@ -516,9 +516,9 @@ g_get_prgname (void)
|
||||
{
|
||||
gchar* retval;
|
||||
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
retval = g_prgname;
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -528,11 +528,11 @@ g_set_prgname (const gchar *prgname)
|
||||
{
|
||||
gchar *c;
|
||||
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
c = g_prgname;
|
||||
g_prgname = g_strdup (prgname);
|
||||
g_free (c);
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
}
|
||||
|
||||
guint
|
||||
|
22
glist.c
22
glist.c
@ -36,7 +36,7 @@ struct _GAllocator /* from gmem.c */
|
||||
};
|
||||
|
||||
static GAllocator *current_allocator = NULL;
|
||||
static G_LOCK_DEFINE(current_allocator);
|
||||
G_LOCK_DECLARE_STATIC (current_allocator);
|
||||
|
||||
/* HOLDS: current_allocator_lock */
|
||||
static void
|
||||
@ -70,17 +70,17 @@ g_list_validate_allocator (GAllocator *allocator)
|
||||
void
|
||||
g_list_push_allocator(GAllocator *allocator)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
g_list_validate_allocator ( allocator );
|
||||
allocator->last = current_allocator;
|
||||
current_allocator = allocator;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
g_list_pop_allocator (void)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (current_allocator)
|
||||
{
|
||||
GAllocator *allocator;
|
||||
@ -90,7 +90,7 @@ g_list_pop_allocator (void)
|
||||
allocator->last = NULL;
|
||||
allocator->is_unused = TRUE;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
GList*
|
||||
@ -98,7 +98,7 @@ g_list_alloc (void)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (!current_allocator)
|
||||
{
|
||||
GAllocator *allocator = g_allocator_new ("GLib default GList allocator",
|
||||
@ -126,7 +126,7 @@ g_list_alloc (void)
|
||||
current_allocator->free_lists = list->next;
|
||||
}
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
list->next = NULL;
|
||||
list->prev = NULL;
|
||||
|
||||
@ -139,10 +139,10 @@ g_list_free (GList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = list->next;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,10 +152,10 @@ g_list_free_1 (GList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = NULL;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
|
46
gmain.c
46
gmain.c
@ -101,7 +101,7 @@ static GHookList source_list = { 0 };
|
||||
/* The following lock is used for both the list of sources
|
||||
* and the list of poll records
|
||||
*/
|
||||
static G_LOCK_DEFINE (main_loop);
|
||||
G_LOCK_DECLARE_STATIC (main_loop);
|
||||
|
||||
static GSourceFuncs timeout_funcs = {
|
||||
g_timeout_prepare,
|
||||
@ -232,7 +232,7 @@ g_source_add (gint priority,
|
||||
guint return_val;
|
||||
GSource *source;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
if (!source_list.is_setup)
|
||||
g_hook_list_init (&source_list, sizeof(GSource));
|
||||
@ -261,7 +261,7 @@ g_source_add (gint priority,
|
||||
write (wake_up_pipe[1], "A", 1);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
|
||||
return return_val;
|
||||
}
|
||||
@ -271,7 +271,7 @@ g_source_remove (guint tag)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
hook = g_hook_get (&source_list, tag);
|
||||
if (hook)
|
||||
@ -281,7 +281,7 @@ g_source_remove (guint tag)
|
||||
g_hook_destroy_link (&source_list, hook);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void
|
||||
@ -289,7 +289,7 @@ g_source_remove_by_user_data (gpointer user_data)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
hook = g_hook_find_data (&source_list, TRUE, user_data);
|
||||
if (hook)
|
||||
@ -299,7 +299,7 @@ g_source_remove_by_user_data (gpointer user_data)
|
||||
g_hook_destroy_link (&source_list, hook);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -315,7 +315,7 @@ g_source_remove_by_source_data (gpointer source_data)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
hook = g_hook_find (&source_list, TRUE,
|
||||
g_source_find_source_data, source_data);
|
||||
@ -326,7 +326,7 @@ g_source_remove_by_source_data (gpointer source_data)
|
||||
g_hook_destroy_link (&source_list, hook);
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void g_get_current_time (GTimeVal *result)
|
||||
@ -360,11 +360,11 @@ g_main_dispatch (GTimeVal *current_time)
|
||||
|
||||
source->hook.flags |= G_HOOK_FLAG_IN_CALL;
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
need_destroy = ! dispatch(source_data,
|
||||
current_time,
|
||||
hook_data);
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
source->hook.flags &= ~G_HOOK_FLAG_IN_CALL;
|
||||
|
||||
@ -394,7 +394,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
|
||||
g_get_current_time (¤t_time);
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
/* If recursing, finish up current dispatch, before starting over */
|
||||
if (pending_dispatches)
|
||||
@ -402,7 +402,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
if (dispatch)
|
||||
g_main_dispatch (¤t_time);
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -434,7 +434,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
if (!dispatch)
|
||||
{
|
||||
g_hook_unref (&source_list, hook);
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@ -499,7 +499,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
else
|
||||
{
|
||||
g_hook_unref (&source_list, hook);
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -519,7 +519,7 @@ g_main_iterate (gboolean block, gboolean dispatch)
|
||||
retval = TRUE;
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -605,10 +605,10 @@ g_main_poll (gint timeout, gboolean use_priority, gint priority)
|
||||
|
||||
poll_waiting = TRUE;
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
npoll = i;
|
||||
(*poll_func) (fd_array, npoll, timeout);
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
if (!poll_waiting)
|
||||
{
|
||||
@ -634,9 +634,9 @@ void
|
||||
g_main_poll_add (gint priority,
|
||||
GPollFD *fd)
|
||||
{
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
g_main_poll_add_unlocked (priority, fd);
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -676,7 +676,7 @@ g_main_poll_add_unlocked (gint priority,
|
||||
|
||||
n_poll_records++;
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void
|
||||
@ -684,7 +684,7 @@ g_main_poll_remove (GPollFD *fd)
|
||||
{
|
||||
GPollRec *pollrec, *lastrec;
|
||||
|
||||
g_lock (main_loop);
|
||||
G_LOCK (main_loop);
|
||||
|
||||
lastrec = NULL;
|
||||
pollrec = poll_records;
|
||||
@ -708,7 +708,7 @@ g_main_poll_remove (GPollFD *fd)
|
||||
pollrec = pollrec->next;
|
||||
}
|
||||
|
||||
g_unlock (main_loop);
|
||||
G_UNLOCK (main_loop);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -64,7 +64,7 @@ static inline GModule* g_module_find_by_name (const gchar *name);
|
||||
|
||||
|
||||
/* --- variables --- */
|
||||
static G_LOCK_DEFINE (g_module_global);
|
||||
G_LOCK_DECLARE_STATIC (GModule);
|
||||
const char *g_log_domain_gmodule = "GModule";
|
||||
static GModule *modules = NULL;
|
||||
static GModule *main_module = NULL;
|
||||
@ -78,7 +78,7 @@ g_module_find_by_handle (gpointer handle)
|
||||
GModule *module;
|
||||
GModule *retval = NULL;
|
||||
|
||||
g_lock (g_module_global);
|
||||
G_LOCK (GModule);
|
||||
if (main_module && main_module->handle == handle)
|
||||
retval = main_module;
|
||||
else
|
||||
@ -88,7 +88,7 @@ g_module_find_by_handle (gpointer handle)
|
||||
retval = module;
|
||||
break;
|
||||
}
|
||||
g_unlock (g_module_global);
|
||||
G_UNLOCK (GModule);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -99,14 +99,14 @@ g_module_find_by_name (const gchar *name)
|
||||
GModule *module;
|
||||
GModule *retval = NULL;
|
||||
|
||||
g_lock (g_module_global);
|
||||
G_LOCK (GModule);
|
||||
for (module = modules; module; module = module->next)
|
||||
if (strcmp (name, module->file_name) == 0)
|
||||
{
|
||||
retval = module;
|
||||
break;
|
||||
}
|
||||
g_unlock (g_module_global);
|
||||
G_UNLOCK (GModule);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -198,7 +198,7 @@ g_module_open (const gchar *file_name,
|
||||
|
||||
if (!file_name)
|
||||
{
|
||||
g_lock (g_module_global);
|
||||
G_LOCK (GModule);
|
||||
if (!main_module)
|
||||
{
|
||||
handle = _g_module_self ();
|
||||
@ -213,7 +213,7 @@ g_module_open (const gchar *file_name,
|
||||
main_module->next = NULL;
|
||||
}
|
||||
}
|
||||
g_unlock (g_module_global);
|
||||
G_UNLOCK (GModule);
|
||||
|
||||
return main_module;
|
||||
}
|
||||
@ -256,10 +256,10 @@ g_module_open (const gchar *file_name,
|
||||
module->ref_count = 1;
|
||||
module->is_resident = FALSE;
|
||||
module->unload = NULL;
|
||||
g_lock (g_module_global);
|
||||
G_LOCK (GModule);
|
||||
module->next = modules;
|
||||
modules = module;
|
||||
g_unlock (g_module_global);
|
||||
G_UNLOCK (GModule);
|
||||
|
||||
/* check initialization */
|
||||
if (g_module_symbol (module, "g_module_check_init", (gpointer) &check_init))
|
||||
@ -313,7 +313,7 @@ g_module_close (GModule *module)
|
||||
|
||||
last = NULL;
|
||||
|
||||
g_lock (g_module_global);
|
||||
G_LOCK (GModule);
|
||||
node = modules;
|
||||
while (node)
|
||||
{
|
||||
@ -329,7 +329,7 @@ g_module_close (GModule *module)
|
||||
node = last->next;
|
||||
}
|
||||
module->next = NULL;
|
||||
g_unlock (g_module_global);
|
||||
G_UNLOCK (GModule);
|
||||
|
||||
_g_module_close (module->handle, FALSE);
|
||||
g_free (module->file_name);
|
||||
|
6
gmutex.c
6
gmutex.c
@ -40,7 +40,7 @@ static void g_thread_fail (void);
|
||||
/* Global variables */
|
||||
|
||||
gboolean g_thread_use_default_impl = TRUE;
|
||||
gboolean g_thread_supported = FALSE;
|
||||
gboolean g_threads_got_initialized = FALSE;
|
||||
|
||||
GThreadFunctions g_thread_functions_for_glib_use = {
|
||||
(GMutex*(*)())g_thread_fail, /* mutex_new */
|
||||
@ -76,7 +76,7 @@ g_mutex_init (void)
|
||||
gpointer private_old = g_thread_specific_private;
|
||||
g_thread_specific_private = g_private_new (g_static_private_free_data);
|
||||
|
||||
/* we can not use g_private_set here, as g_thread_supported is not
|
||||
/* we can not use g_private_set here, as g_threads_got_initialized is not
|
||||
yet set TRUE, whereas the private_set function is already set. */
|
||||
g_thread_functions_for_glib_use.private_set (g_thread_specific_private,
|
||||
private_old);
|
||||
@ -88,7 +88,7 @@ g_mutex_init (void)
|
||||
GMutex *
|
||||
g_static_mutex_get_mutex_impl (GMutex** mutex)
|
||||
{
|
||||
if (!g_thread_supported)
|
||||
if (!g_thread_supported ())
|
||||
return NULL;
|
||||
|
||||
g_assert (g_mutex_protect_static_mutex_allocation);
|
||||
|
18
gnode.c
18
gnode.c
@ -39,7 +39,7 @@ struct _GAllocator /* from gmem.c */
|
||||
GNode *free_nodes; /* implementation specific */
|
||||
};
|
||||
|
||||
static G_LOCK_DEFINE(current_allocator);
|
||||
G_LOCK_DECLARE_STATIC (current_allocator);
|
||||
static GAllocator *current_allocator = NULL;
|
||||
|
||||
/* HOLDS: current_allocator_lock */
|
||||
@ -74,17 +74,17 @@ g_node_validate_allocator (GAllocator *allocator)
|
||||
void
|
||||
g_node_push_allocator (GAllocator *allocator)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
g_node_validate_allocator ( allocator );
|
||||
allocator->last = current_allocator;
|
||||
current_allocator = allocator;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
g_node_pop_allocator (void)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (current_allocator)
|
||||
{
|
||||
GAllocator *allocator;
|
||||
@ -94,7 +94,7 @@ g_node_pop_allocator (void)
|
||||
allocator->last = NULL;
|
||||
allocator->is_unused = TRUE;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
|
||||
@ -104,7 +104,7 @@ g_node_new (gpointer data)
|
||||
{
|
||||
GNode *node;
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (!current_allocator)
|
||||
{
|
||||
GAllocator *allocator = g_allocator_new ("GLib default GNode allocator",
|
||||
@ -120,7 +120,7 @@ g_node_new (gpointer data)
|
||||
node = current_allocator->free_nodes;
|
||||
current_allocator->free_nodes = node->next;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
|
||||
node->data = data;
|
||||
node->next = NULL;
|
||||
@ -147,10 +147,10 @@ g_nodes_free (GNode *node)
|
||||
break;
|
||||
}
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
parent->next = current_allocator->free_nodes;
|
||||
current_allocator->free_nodes = node;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
|
22
gslist.c
22
gslist.c
@ -35,7 +35,7 @@ struct _GAllocator /* from gmem.c */
|
||||
GSList *free_lists; /* implementation specific */
|
||||
};
|
||||
|
||||
static G_LOCK_DEFINE(current_allocator);
|
||||
G_LOCK_DECLARE_STATIC (current_allocator);
|
||||
static GAllocator *current_allocator = NULL;
|
||||
|
||||
/* HOLDS: current_allocator_lock */
|
||||
@ -70,17 +70,17 @@ g_slist_validate_allocator (GAllocator *allocator)
|
||||
void
|
||||
g_slist_push_allocator (GAllocator *allocator)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
g_slist_validate_allocator (allocator);
|
||||
allocator->last = current_allocator;
|
||||
current_allocator = allocator;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
void
|
||||
g_slist_pop_allocator (void)
|
||||
{
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (current_allocator)
|
||||
{
|
||||
GAllocator *allocator;
|
||||
@ -90,7 +90,7 @@ g_slist_pop_allocator (void)
|
||||
allocator->last = NULL;
|
||||
allocator->is_unused = TRUE;
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
|
||||
GSList*
|
||||
@ -98,7 +98,7 @@ g_slist_alloc (void)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
if (!current_allocator)
|
||||
{
|
||||
GAllocator *allocator = g_allocator_new ("GLib default GSList allocator",
|
||||
@ -126,7 +126,7 @@ g_slist_alloc (void)
|
||||
current_allocator->free_lists = list->next;
|
||||
}
|
||||
}
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
|
||||
list->next = NULL;
|
||||
|
||||
@ -139,10 +139,10 @@ g_slist_free (GSList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = list->next;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,10 +152,10 @@ g_slist_free_1 (GSList *list)
|
||||
if (list)
|
||||
{
|
||||
list->data = NULL;
|
||||
g_lock (current_allocator);
|
||||
G_LOCK (current_allocator);
|
||||
list->next = current_allocator->free_lists;
|
||||
current_allocator->free_lists = list;
|
||||
g_unlock (current_allocator);
|
||||
G_UNLOCK (current_allocator);
|
||||
}
|
||||
}
|
||||
|
||||
|
10
gstring.c
10
gstring.c
@ -48,7 +48,7 @@ struct _GRealString
|
||||
gint alloc;
|
||||
};
|
||||
|
||||
static G_LOCK_DEFINE(string_mem_chunk);
|
||||
G_LOCK_DECLARE_STATIC (string_mem_chunk);
|
||||
static GMemChunk *string_mem_chunk = NULL;
|
||||
|
||||
/* Hash Functions.
|
||||
@ -207,14 +207,14 @@ g_string_sized_new (guint dfl_size)
|
||||
{
|
||||
GRealString *string;
|
||||
|
||||
g_lock (string_mem_chunk);
|
||||
G_LOCK (string_mem_chunk);
|
||||
if (!string_mem_chunk)
|
||||
string_mem_chunk = g_mem_chunk_new ("string mem chunk",
|
||||
sizeof (GRealString),
|
||||
1024, G_ALLOC_AND_FREE);
|
||||
|
||||
string = g_chunk_new (GRealString, string_mem_chunk);
|
||||
g_unlock (string_mem_chunk);
|
||||
G_UNLOCK (string_mem_chunk);
|
||||
|
||||
string->alloc = 0;
|
||||
string->len = 0;
|
||||
@ -248,9 +248,9 @@ g_string_free (GString *string,
|
||||
if (free_segment)
|
||||
g_free (string->str);
|
||||
|
||||
g_lock (string_mem_chunk);
|
||||
G_LOCK (string_mem_chunk);
|
||||
g_mem_chunk_free (string_mem_chunk, string);
|
||||
g_unlock (string_mem_chunk);
|
||||
G_UNLOCK (string_mem_chunk);
|
||||
}
|
||||
|
||||
GString*
|
||||
|
@ -1,3 +1,9 @@
|
||||
Wed Dec 16 03:16:16 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* testgthread.c: s/g_thread_supported/g_thread_supported ()/
|
||||
* gthread.c: s/g_thread_supported/g_threads_got_initialized/
|
||||
(g_thread_init): bail out if G_THREADS_ENABLED is not defined.
|
||||
|
||||
1998-12-15 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* Makefile.am (EXTRA_DIST): updated.
|
||||
|
@ -17,8 +17,7 @@ libgthread_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
||||
-release $(LT_RELEASE)
|
||||
|
||||
libgthread_la_LIBADD = \
|
||||
@G_THREAD_LIBS@
|
||||
libgthread_la_LIBADD = @G_THREAD_LIBS@
|
||||
|
||||
noinst_PROGRAMS = testgthread
|
||||
testgthread_LDADD = ../libglib.la libgthread.la
|
||||
|
@ -40,12 +40,16 @@ void g_mem_init (void);
|
||||
void g_messages_init (void);
|
||||
|
||||
void
|
||||
g_thread_init(GThreadFunctions* init)
|
||||
g_thread_init (GThreadFunctions* init)
|
||||
{
|
||||
gboolean supported;
|
||||
|
||||
#ifndef G_THREADS_ENABLED
|
||||
g_error ("GLib thread support is disabled.");
|
||||
#endif /* !G_THREADS_ENABLED */
|
||||
|
||||
if (thread_system_already_initialized)
|
||||
g_error ("the glib thread system may only be initialized once.");
|
||||
g_error ("GThread system may only be initialized once.");
|
||||
|
||||
thread_system_already_initialized = TRUE;
|
||||
|
||||
@ -56,29 +60,28 @@ g_thread_init(GThreadFunctions* init)
|
||||
|
||||
g_thread_functions_for_glib_use = *init;
|
||||
|
||||
/* It is important, that g_thread_supported is not set before the
|
||||
thread initialization functions of the different modules are
|
||||
called */
|
||||
/* It is important, that g_threads_got_initialized is not set before the
|
||||
* thread initialization functions of the different modules are called
|
||||
*/
|
||||
|
||||
supported =
|
||||
init->mutex_new &&
|
||||
init->mutex_lock &&
|
||||
init->mutex_trylock &&
|
||||
init->mutex_unlock &&
|
||||
init->mutex_free &&
|
||||
init->cond_new &&
|
||||
init->cond_signal &&
|
||||
init->cond_broadcast &&
|
||||
init->cond_wait &&
|
||||
init->cond_timed_wait &&
|
||||
init->cond_free &&
|
||||
init->private_new &&
|
||||
init->private_get &&
|
||||
init->private_get;
|
||||
supported = (init->mutex_new &&
|
||||
init->mutex_lock &&
|
||||
init->mutex_trylock &&
|
||||
init->mutex_unlock &&
|
||||
init->mutex_free &&
|
||||
init->cond_new &&
|
||||
init->cond_signal &&
|
||||
init->cond_broadcast &&
|
||||
init->cond_wait &&
|
||||
init->cond_timed_wait &&
|
||||
init->cond_free &&
|
||||
init->private_new &&
|
||||
init->private_get &&
|
||||
init->private_get);
|
||||
|
||||
/* if somebody is calling g_thread_init (), it means that he wants to
|
||||
have thread support, so check this */
|
||||
|
||||
* have thread support, so check this
|
||||
*/
|
||||
if (!supported)
|
||||
{
|
||||
if (g_thread_use_default_impl)
|
||||
@ -88,14 +91,14 @@ g_thread_init(GThreadFunctions* init)
|
||||
}
|
||||
|
||||
/* now call the thread initialization functions of the different
|
||||
glib modules. BTW: order does matter, g_mutex_init MUST be first */
|
||||
|
||||
* glib modules. order does matter, g_mutex_init MUST come first.
|
||||
*/
|
||||
g_mutex_init ();
|
||||
g_mem_init ();
|
||||
g_messages_init ();
|
||||
|
||||
/* now we can set g_thread_supported and thus enable all the thread
|
||||
functions */
|
||||
|
||||
g_thread_supported = TRUE;
|
||||
/* now we can set g_threads_got_initialized and thus enable
|
||||
* all the thread functions
|
||||
*/
|
||||
g_threads_got_initialized = TRUE;
|
||||
}
|
||||
|
@ -13,9 +13,9 @@ test_mutexes ()
|
||||
GMutex *mutex = NULL;
|
||||
GCond *cond = NULL;
|
||||
GStaticMutex static_mutex = G_STATIC_MUTEX_INIT;
|
||||
G_LOCK_DEFINE (test_me);
|
||||
G_LOCK_DECLARE (test_me);
|
||||
|
||||
if (g_thread_supported)
|
||||
if (g_thread_supported ())
|
||||
{
|
||||
mutex = g_mutex_new ();
|
||||
cond = g_cond_new ();
|
||||
@ -30,10 +30,10 @@ test_mutexes ()
|
||||
g_cond_signal (cond);
|
||||
g_cond_broadcast (cond);
|
||||
|
||||
g_lock (test_me);
|
||||
g_unlock (test_me);
|
||||
G_LOCK (test_me);
|
||||
G_UNLOCK (test_me);
|
||||
|
||||
if (g_thread_supported)
|
||||
if (g_thread_supported ())
|
||||
{
|
||||
g_cond_free (cond);
|
||||
g_mutex_free (mutex);
|
||||
|
14
gtree.c
14
gtree.c
@ -83,7 +83,7 @@ static GTreeNode* g_tree_node_rotate_right (GTreeNode *node);
|
||||
static void g_tree_node_check (GTreeNode *node);
|
||||
|
||||
|
||||
static G_LOCK_DEFINE(g_tree_global);
|
||||
G_LOCK_DECLARE_STATIC (g_tree_global);
|
||||
static GMemChunk *node_mem_chunk = NULL;
|
||||
static GTreeNode *node_free_list = NULL;
|
||||
|
||||
@ -94,7 +94,7 @@ g_tree_node_new (gpointer key,
|
||||
{
|
||||
GTreeNode *node;
|
||||
|
||||
g_lock (g_tree_global);
|
||||
G_LOCK (g_tree_global);
|
||||
if (node_free_list)
|
||||
{
|
||||
node = node_free_list;
|
||||
@ -110,7 +110,7 @@ g_tree_node_new (gpointer key,
|
||||
|
||||
node = g_chunk_new (GTreeNode, node_mem_chunk);
|
||||
}
|
||||
g_unlock (g_tree_global);
|
||||
G_UNLOCK (g_tree_global);
|
||||
|
||||
node->balance = 0;
|
||||
node->left = NULL;
|
||||
@ -128,10 +128,10 @@ g_tree_node_destroy (GTreeNode *node)
|
||||
{
|
||||
g_tree_node_destroy (node->right);
|
||||
g_tree_node_destroy (node->left);
|
||||
g_lock (g_tree_global);
|
||||
G_LOCK (g_tree_global);
|
||||
node->right = node_free_list;
|
||||
node_free_list = node;
|
||||
g_unlock (g_tree_global);
|
||||
G_UNLOCK (g_tree_global);
|
||||
}
|
||||
}
|
||||
|
||||
@ -385,10 +385,10 @@ g_tree_node_remove (GTreeNode *node,
|
||||
node = g_tree_node_restore_right_balance (new_root, old_balance);
|
||||
}
|
||||
|
||||
g_lock (g_tree_global);
|
||||
G_LOCK (g_tree_global);
|
||||
garbage->right = node_free_list;
|
||||
node_free_list = garbage;
|
||||
g_unlock (g_tree_global);
|
||||
G_UNLOCK (g_tree_global);
|
||||
}
|
||||
else if (cmp < 0)
|
||||
{
|
||||
|
26
gutils.c
26
gutils.c
@ -371,7 +371,7 @@ g_getenv (const gchar *variable)
|
||||
#endif
|
||||
}
|
||||
|
||||
static G_LOCK_DEFINE(g_utils_global);
|
||||
G_LOCK_DECLARE_STATIC (g_utils_global);
|
||||
|
||||
static gchar *g_tmp_dir = NULL;
|
||||
static gchar *g_user_name = NULL;
|
||||
@ -455,10 +455,10 @@ g_get_any_init (void)
|
||||
gchar*
|
||||
g_get_user_name (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_user_name;
|
||||
}
|
||||
@ -466,10 +466,10 @@ g_get_user_name (void)
|
||||
gchar*
|
||||
g_get_real_name (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_real_name;
|
||||
}
|
||||
@ -483,10 +483,10 @@ g_get_real_name (void)
|
||||
gchar*
|
||||
g_get_home_dir (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_home_dir;
|
||||
}
|
||||
@ -501,10 +501,10 @@ g_get_home_dir (void)
|
||||
gchar*
|
||||
g_get_tmp_dir (void)
|
||||
{
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
if (!g_tmp_dir)
|
||||
g_get_any_init ();
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return g_tmp_dir;
|
||||
}
|
||||
@ -516,9 +516,9 @@ g_get_prgname (void)
|
||||
{
|
||||
gchar* retval;
|
||||
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
retval = g_prgname;
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -528,11 +528,11 @@ g_set_prgname (const gchar *prgname)
|
||||
{
|
||||
gchar *c;
|
||||
|
||||
g_lock (g_utils_global);
|
||||
G_LOCK (g_utils_global);
|
||||
c = g_prgname;
|
||||
g_prgname = g_strdup (prgname);
|
||||
g_free (c);
|
||||
g_unlock (g_utils_global);
|
||||
G_UNLOCK (g_utils_global);
|
||||
}
|
||||
|
||||
guint
|
||||
|
Loading…
Reference in New Issue
Block a user