Commit Graph

73 Commits

Author SHA1 Message Date
Matthias Clasen
c182ee1f71 Fix GModule documentation a bit
The documentation for g_module_make_resident was for some reason
in the doc comment for g_module_name.

https://bugzilla.gnome.org/show_bug.cgi?id=679813
2012-07-13 17:37:37 -04:00
Robert Ancell
4143842eb4 Add missing allow-none annotations for function parameters.
Found using:
find . -name '*.c' | xargs grep 'or %NULL' | grep ' \* @' | grep -v '@error' | grep -v allow-none
2012-03-31 20:34:28 +11:00
Stef Walter
7e92997539 documentation fixes
Fixes for gtk-doc warnings.

http://bugzilla.gnome.org/show_bug.cgi?id=66469

https://bugzilla.gnome.org/show_bug.cgi?id=664699
2011-12-13 23:01:51 -05:00
Matthias Clasen
9e19b6fe0f Fix doc formatting 2011-11-17 00:01:18 -05:00
Matthias Clasen
127df9bd83 Move GModule docs inline 2011-11-14 21:22:46 -05:00
Ryan Lortie
2a677d1370 locks: drop _INIT macros
All locks are now zero-initialised, so we can drop the G_*_INIT macros
for them.

Adjust various users around GLib accordingly and change the docs.

https://bugzilla.gnome.org/show_bug.cgi?id=659866
2011-10-02 22:33:10 -04:00
Matthias Clasen
34ce4dd032 Replace static privates by privates
GStaticPrivate is heading for deprecation soon, and GPrivate
can replace these uses now.
2011-10-02 22:11:33 -04:00
Ryan Lortie
b6140c2f89 Port internal GStaticRecMutex users to GRecMutex 2011-09-21 16:09:04 -04:00
Matthias Clasen
1b28408b8b Spelling fixes
Spelling fixes in comments and docs, provided by
Kjartan Maraas in bug 657336.
2011-08-29 14:49:32 -04:00
Matthias Clasen
9b68d9892a Remove a redundant NULL check 2011-06-14 21:06:17 -04:00
Ryan Lortie
8073759f8c Remove all uses of G_CONST_RETURN
Just use 'const'.

https://bugzilla.gnome.org/show_bug.cgi?id=644611
2011-06-09 11:15:40 -04:00
Emmanuele Bassi
08f0a31289 Revert "Remove all uses of G_CONST_RETURN"
This reverts commit 36741245cc.

The removal has not been discussed, except on Bugzilla:

https://bugzilla.gnome.org/show_bug.cgi?id=644611
2011-03-15 09:03:28 +00:00
Ryan Lortie
36741245cc Remove all uses of G_CONST_RETURN
Just use 'const'.
2011-03-15 01:32:22 -04:00
Matthias Clasen
90c9ab3178 Fix an include order problem
svn path=/trunk/; revision=7936
2009-03-02 03:56:31 +00:00
Tor Lillqvist
168c4d4708 New file.
2008-07-27  Tor Lillqvist  <tml@novell.com>

	* gmodule.symbols: New file.

	* gmodule.c: Bypass the Windows ABI compatibility symbols on
	64-bit Windows. Thus no need to keep the file name in system
	codepage around on 64-bit Windows either.
	
	* Makefile.am: Produce gmodule.def from gmodule.symbols. Dist
	gmodule.symbols instead of gmodule.def.

	* gmodule.def: Drop from SVN.


svn path=/trunk/; revision=7259
2008-07-27 17:35:46 +00:00
Michael Natterer
70af00fc06 Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent code from
2008-05-05  Michael Natterer  <mitch@imendio.com>

	* Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent
	code from being checked in that breaks the build of applications
	which use G_DISABLE_SINGLE_INCLUDES.

	* gmodule.c: #include "glib.h" instead of "glibconfig.h"


svn path=/trunk/; revision=6877
2008-05-05 15:04:58 +00:00
Matthias Clasen
b15b1eb10e Don't fail to load modules with suffix .la. (#480122, Andrey Tsyvarev)
2007-12-22  Matthias Clasen  <mclasen@redhat.com>

        * gmodule.c (g_module_open): Don't fail to load modules
        with suffix .la.  (#480122, Andrey Tsyvarev)



svn path=/trunk/; revision=6191
2007-12-23 05:50:26 +00:00
Matthias Clasen
5d8a5657c5 Include glibconfig.h before checking G_OS_WIN32.
2007-11-08  Matthias Clasen <mclasen@redhat.com>

        * gmodule.c: Include glibconfig.h before checking G_OS_WIN32.



svn path=/trunk/; revision=5832
2007-11-09 02:33:16 +00:00
Matthias Clasen
9757456e23 Make header include order consistent (#71704, Diego Escalante Urrelo)
2007-11-07  Matthias Clasen <mclasen@redhat.com>

        * *.c: Make header include order consistent (#71704,
        Diego Escalante Urrelo)


svn path=/trunk/; revision=5817
2007-11-08 03:43:46 +00:00
Matthias Clasen
964471d184 Include the module file name to the error message given when module
2007-07-09  Matthias Clasen  <mclasen@redhat.com>

        * gmodule.c (g_module_open): Include the module file
        name to the error message given when module initialization
        fails.  (#448484, Gustavo Carneiro)


svn path=/trunk/; revision=5611
2007-07-09 17:50:28 +00:00
Matthias Clasen
2c79668714 fix include order
svn path=/trunk/; revision=5182
2006-12-31 15:53:44 +00:00
Matthias Clasen
08e5183b36 Clean up includes.
2006-12-28  Matthias Clasen  <mclasen@redhat.com>

        * gmodule.c: Clean up includes.
2006-12-28 05:02:30 +00:00
Matthias Clasen
ea1512221b Handle valid symbols that are NULL correctly. (#385388, Felix Kater)
2006-12-13  Matthias Clasen  <mclasen@redhat.com>

        * gmodule.c (g_module_open):
        * gmodule-dl.c (_g_module_symbol): Handle valid symbols
        that are NULL correctly.  (#385388, Felix Kater)
2006-12-13 15:41:22 +00:00
Tim Janik
5c16431446 applied patch from Christian Persch to support G_DEBUG flags
Mon Sep 11 14:58:56 2006  Tim Janik  <timj@imendio.com>

        * gmodule.c: applied patch from Christian Persch to support
        G_DEBUG flags resident-modules and bind-now-modules, bug #345099.
2006-09-11 13:11:15 +00:00
Matthias Clasen
0f1e8fb313 Silence compiler warnings.
2005-11-28  Matthias Clasen  <mclasen@redhat.com>

	* gmodule.c (parse_libtool_archive): Silence
	compiler warnings.
2005-11-28 18:34:16 +00:00
Tor Lillqvist
a8cf492b2c It's wrong to call g_file_test() with more than one test (both
2004-12-31  Tor Lillqvist  <tml@iki.fi>

	* gmodule.c (g_module_open): It's wrong to call g_file_test() with
	more than one test (both G_FILE_TEST_EXISTS and _IS_REGULAR). (It
	would succeed even if the pathname existed as a nonregular file.)
	Just G_FILE_TEST_IS_REGULAR works fine. (#162594)
2005-01-02 16:03:56 +00:00
Tor Lillqvist
cff51f1f0b Makefile.am gmodule.def Win32 DLL ABI stability cruft like in ../glib.
2004-12-06  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am
	* gmodule.def
	* gmodule.[hc]: Win32 DLL ABI stability cruft like in ../glib.
2004-12-06 15:45:25 +00:00
Tor Lillqvist
f5de060304 Argument is in UTF-8. Use wide character Win32 API if present.
2004-11-04  Tor Lillqvist  <tml@iki.fi>

	* gmodule-win32.c (_g_module_open): Argument is in UTF-8. Use wide
	character Win32 API if present.

	* gmodule.c (parse_libtool_archive, g_module_open): Convert file
	name to UTF-8 before storing in the error message string.

	* gmodule.c (parse_libtool_archive): Use g_open().
2004-11-04 00:20:27 +00:00
Matthias Clasen
1c49b23e91 Set the gmodule suffix to 'a' for aix and use the aix gmodule
Sun Feb 22 02:28:43 2004  Matthias Clasen  <maclas@gmx.de>

	* configure.in: Set the gmodule suffix to 'a' for aix and
	use the aix gmodule implementation.  (#85930, Laurent Vivier)

	Bug #85930, Laurent Vivier:

	* gmodule-ar.c: Implementation of native module management for AIX.
	* gmoduleconf.h.in:
	* gmodule.c: Support gmodule-ar.c
2004-02-22 01:31:24 +00:00
Tim Janik
defca980e4 applied patch from David Schleef <ds@schleef.org> which implements a
Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>

        * applied patch from David Schleef <ds@schleef.org> which implements
        a G_MODULE_BIND_LOCAL flag to g_module_open() to disable global
        symbol registration.
2004-02-20 01:41:00 +00:00
Owen Taylor
faa29f03ed Properly refcount the main module if it is already open. (#98648)
Tue Dec  3 20:56:19 2002  Owen Taylor  <otaylor@redhat.com>

        * gmodule.c (g_module_open): Properly refcount the
        main module if it is already open. (#98648)
2002-12-04 02:01:27 +00:00
Owen Taylor
92e45a4009 Fix typo when checking if file + module_suffix exists. (Miroslaw
Sun Feb 17 18:15:22 2002  Owen Taylor  <otaylor@redhat.com>

        * gmodule.c (g_module_open): Fix typo when checking
        if file + module_suffix exists. (Miroslaw Dobrzanski-Neumann,
        #71801)
2002-02-17 23:17:52 +00:00
Michael Meeks
e3750c7c90 fix leak.
2001-11-16  Michael Meeks  <michael@ximian.com>

	* gmodule.c (parse_libtool_archive): fix leak.
2001-11-18 22:26:39 +00:00
Sebastian Wilhelmi
a3ad2d5774 build the library name ourselfs ... so we can load the library specified
2001-07-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmodule/gmodule.c (parse_libtool_archive): build the library
	name ourselfs ... so we can load the library specified and not
	mangle any name not beggining in 'lib'. Patch from Michael Meeks
	<michael@ximian.com>.
2001-07-30 08:52:20 +00:00
Darin Adler
624a3c9689 Add some generated files.
* .cvsignore: Add some generated files.

        * glib/gmain.c: (g_main_context_iterate): Comment out cruft
        after #endif to avoid gcc warning.
        * gmodule/gmodule.c: (g_module_set_error_unduped): Remove
        const from type to avoid gcc warning.
        * gobject/gsignal.c: (g_signal_emitv): ifdef variable used
        only if G_ENABLE_DEBUG to avoid gcc warning.
        * gobject/gtype.c: (type_iface_vtable_init_Wm),
        (type_iface_vtable_finalize_Wm): ifdef call needed only
        if !G_DISABLE_ASSERT to avoid gcc warning.
        * tests/testglib.c: (main): ifdef call needed only if
        !G_DISABLE_ASSERT to avoid gcc warning. Maybe later we
        should make the test to #undef G_DISABLE_ASSERT.
        * tests/unicode-collate.c: Add include of <string.h> to
        avoid gcc warning.
2001-07-11 20:08:50 +00:00
Owen Taylor
f5c28ce4ab Changes for 64-bit cleanliness, loosely based on patch from Mark Murnane.
Wed Jun 20 12:00:54 2001  Owen Taylor  <otaylor@redhat.com>

        Changes for 64-bit cleanliness, loosely based on patch
	from Mark Murnane.

	* gconvert.c (g_convert/g_convert_with_fallback): Remove
	workarounds for since-fixed GNU libc bugs. Minor
	doc fix.

	* gconvert.[ch]: Change gint to gsize/gssize as
	appropriate.

	* gconvert.c (g_locale/filename_to/from_utf8): Fix incorrect
	computation of bytes_read / bytes_written.

	* gfileutils.[ch] (g_file_get_contents): Make length
	out parameter 'gsize *len'.

	* ghook.c (g_hook_compare_ids): Don't compare a
	and b as 'a - b'.

	* gmacros.h (GSIZE_TO_POINTER): Add GPOINTER_TO_SIZE,
	GSIZE_TO_POINTER.

	* gmain.c (g_timeout_prepare): Rewrite to avoid
	overflows. (Fixes bug when system clock skews
	backwards more than 24 days.)

	* gmarkup.[ch]: Make lengths passed to callbacks
	gsize, length for g_markup_parse-context_parse(),
	g_markup_escape_text() gssize.

	* gmessages.[ch] (g_printf_string_upper_bound): Change
	return value to gsize.

	* gmessages.c (printf_string_upper_bound): Remove
	a ridiculous use of 'inline' on a 300 line function.

	* gstring.[ch]: Represent size of string as a gsize,
	not gint. Make parameters to functions take gsize,
	or gssize where -1 is allowed.

	* gstring.c (g_string_erase): Make
	g_string_erase (string, pos, -1) a synonym for
	g_string_truncate for consistency with other G*
	APIs.

	* gstrfuncs.[ch]: Make all functions taking a string
	length, take a gsize, or gssize if -1 is allowed.
	(g_strstr_len, g_strrstr_len). Also fix some boundary
	conditions in g_str[r]str[_len].

	* gutf8.c tests/unicode-encoding.c: Make parameters that
	are byte lengths gsize, gssize as appropriate. Make
	character offsets, other counts, glong.

	* gasyncqueue.c gcompletion.c
          timeloop.c timeloop-basic.c gutils.c gspawn.c.
	Small 64 bit cleanliness fixups.

	* glist.c (g_list_sort2, g_list_sort_real): Fix functions
	that should have been static.

	* gdate.c (g_date_fill_parse_tokens): Fix extra
	declaration that was shadowing another.

	* tests/module-test.c: Include string.h

Mon Jun 18 15:43:29 2001  Owen Taylor  <otaylor@redhat.com>

	* gutf8.c (g_get_charset): Make argument
	G_CONST_RETURN char **.
2001-06-23 13:55:09 +00:00
Sebastian Wilhelmi
2fd34ae182 Do not g_strdup, as promised in the function name.
2001-05-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmodule.c (g_module_set_error_unduped): Do not g_strdup, as
	promised in the function name.
2001-05-29 13:48:18 +00:00
Tim Janik
ba1c852a68 erk, strconcat needs NULL as last arg. make sure we pass module name with
Tue May 29 12:57:51 2001  Tim Janik  <timj@gtk.org>

        * gmodule.c (g_module_symbol): erk, strconcat needs NULL as last arg.
        make sure we pass module name with suffix into backend open.
2001-05-29 11:05:53 +00:00
Tim Janik
2d0ea4af6c as a last resort, if we can't access() the module, leave it up to the
Mon May 28 20:19:25 2001  Tim Janik  <timj@gtk.org>

        * gmodule.c (g_module_open): as a last resort, if we can't access()
        the module, leave it up to the platform backends to find it.
        (fixes implicit search patch loading i broke with my last
        commit, spotted by Padraig O'Briain).
2001-05-28 18:23:31 +00:00
Tim Janik
e28e398eb0 unlock context when bailing out with a warning. (g_main_context_check):
Sun May 27 05:09:18 2001  Tim Janik  <timj@gtk.org>

        * gmain.c (g_main_context_prepare): unlock context when bailing
        out with a warning.
        (g_main_context_check): same here.

        * gmain.c (g_main_context_check): before returning due to
        changed pollfds, unlock context.

Sun May 27 04:52:28 2001  Tim Janik  <timj@gtk.org>

        * gsignal.[hc] (g_signal_stop_emission_by_name): added variant
        to stop signal emissions through a detailed_signal string.

        * gsignal.c (signal_emit_R) (g_signal_emit_valist): account for
        the fact that g_value_* functions may cause signal emissons by
        unlocking the global signal system lock around g_value_* functions.
        (signal_emit_unlocked_R): renamed this from signal_emit_R() to reflect
        that this functions acquires the lock on its own now.
2001-05-27 18:28:58 +00:00
Dan Winship
d7daf59800 gmodule implementation for Darwin/Mac OS X
* gmodule-dyld.c: gmodule implementation for Darwin/Mac OS X

        * gmodule.c:
        * gmoduleconf.h.in: Add gmodule-dyld support

        * testgmodule.c (main): Fix spelling
2001-04-20 17:05:38 +00:00
Sebastian Wilhelmi
66107ac7e1 Set G_LOG_DOMAIN to \"GModule\" instead of g_log_domain_gmodule.
2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am, makefile.mingw.in, makefile.msc.in: Set
	G_LOG_DOMAIN to \"GModule\" instead of g_log_domain_gmodule.

	* gmodule.def, gmodule.h, gmodule.c: Removed g_log_domain_gmodule.

	* docs/reference/glib/glib-sections.txt,
	docs/reference/glib/tmpl/messages.sgml: Removed	g_log_domain_gmodule.
2001-03-07 14:22:25 +00:00
Havoc Pennington
1c391cc698 include string.h
2001-02-17  Havoc Pennington  <hp@pobox.com>

	* gthread.c: include string.h

        Applied patch from Soeren Sandmann:

	* testglib.c: const fixes

	* gwin32.h: format cleanups

	* gutils.c (g_atexit): constify a variable
	(g_find_program_in_path): constification
	(g_basename): G_CONST_RETURN
	(g_path_skip_root): G_CONST_RETURN
	(g_getenv): G_CONST_RETURN
	(g_get_user_name): G_CONST_RETURN
	(g_get_real_name): G_CONST_RETURN
	(g_get_home_dir): G_CONST_RETURN
	(g_get_tmp_dir): G_CONST_RETURN
	(g_get_prgname): G_CONST_RETURN
	(_glib_gettext): G_CONST_RETURN

	* gunicode.h: formatting cleanups

	* gstrfuncs.c (g_strerror): G_CONST_RETURN
	(g_strsignal): G_CONST_RETURN

	* gspawn.c (g_execute): const on variables

	* gmessages.c (printf_string_upper_bound): fix const on a variable

	* gmem.c (g_mem_chunk_new): make the "name" arg const
	(struct _GRealMemChunk): make the "name" field const

	* gfileutils.c (g_file_open_tmp): store const return in a const
	gchar* variable

	* gdataset.c (g_quark_to_string): G_CONST_RETURN

2001-02-17  Havoc Pennington  <hp@pobox.com>

        Applied patch from Soeren Sandmann:

	* gvaluetypes.c (g_value_get_string): G_CONST_RETURN

	* gtype.c (g_type_name): G_CONST_RETURN

	* gsignal.c (g_signal_name): G_CONST_RETURN

	* gobject-query.c (main): const fix

2001-02-17  Havoc Pennington  <hp@pobox.com>

        Applied patch from Soeren Sandmann:

	* gmodule.c (g_module_error): G_CONST_RETURN
	(g_module_name): G_CONST_RETURN
2001-02-17 23:30:48 +00:00
Tor Lillqvist
cd888afb5a Need <io.h> for open() and close().
2001-01-27  Tor Lillqvist  <tml@iki.fi>

	* gmodule.c: (Win32) Need <io.h> for open() and close().

2001-01-27  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in: Don't try to compile gmarshal.c on its own.
2001-01-27 15:07:03 +00:00
Sebastian Wilhelmi
57a7a2b010 Determine the suffix of the shared librarries for this system. This is
2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Determine the suffix of the shared librarries for
	this system. This is done analogous to
	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
	"sl", "dll", or (most often) "so".

	* tests/Makefile.am, tests/module-test.c,
	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
	Added new testcase for gmodule. This is mostly copied from
	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
	some tests that verbose, not to say loquacious...)

	* gmodule.c: Make g_module_open more tolerant wrt to the module
	name. First it tries to open the module as named, if that fails,
	it checks, whether it is a libtool archive and parses it, if that
	fails it appends the systems shared library suffix
	(i.e. ".so") (if not already found) and tries again and if that
	fails it tries to append the ".la" libtool suffix (if not already
	found) and parses it.

	* gmodule.c: Lock recursive mutex during most module functions for
	safety.

	* gmodule-dl.c: Return an error from _g_module_symbol only, if
	dlerror says so. All other functions return an error as well, if
	dlerror returns NULL.

	* testgmodule.c: Thanks to the above change the #ifdefs have
	vanished.

	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.

	* glib/tmpl/modules.sgml: Updated.
2000-12-22 13:44:25 +00:00
Tim Janik
c9bd7542e1 applied patch from Andreas Persenius <ndap@swipnet.se> that updates the
Wed Jul 26 12:59:31 2000  Tim Janik  <timj@gtk.org>

        * *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that
        updates the license headers to the GNU Lesser General Public License,
        as well as updating the copyright year to 2000.
2000-07-26 11:02:02 +00:00
Tor Lillqvist
549faafc02 New function that returns the message string for a Win32 error code.
2000-03-04  Tor Lillqvist  <tml@iki.fi>

* gwin32.c (g_win32_error_message): New function that returns the
message string for a Win32 error code.

* glib.h: Declare it.

* glib.def: Export it, plus g_node_copy.

* gmodule-win32.c: Call g_win32_error_message() to get the error
message strings.

* libgplugin_a.c
* libgplugin_b.c
* gmodule.c: Remove LibMain functions that were needed by LCC,
which is not a supported compiler.

* testgmodule.c (main): Test for G_MODULE_IMPL ==
G_MODULE_IMPL_WIN32, not G_OS_WIN32.

* gmoduleconf.h.win32: Remove LCC stuff from here, too.
2000-03-01 04:57:07 +00:00
Tim Janik
5991248acf do not return NULL symbols.
Wed Mar  1 05:34:47 2000  Tim Janik  <timj@gtk.org>

        * gmodule-beos.c (_g_module_symbol): do not return NULL symbols.

        * gmodule-os2.c: removed NetBSD specific defines.
        (_g_module_self): set an error message for unsupported behaviour.

        * gmodule-beos.c: many coding style fixups.
        (_g_module_open):
        (_g_module_self):
        (_g_module_close):
        (_g_module_symbol): bunch of memory leaks plugged.

        * gmodule-dl.c: make sure the error message returned from dlerror()
        is always != NULL, by using a wrapper function fetch_dlerror(). based
        on a patch to fix _g_module_symbol() for NetBSD from Scott Presnell
        <srp@zgi.com>.

        * gmodule-dld.c: minor indentation.

        * gmodule-win32.c: minor cleanups.

        * merges from glib-1-2.
2000-03-01 04:57:07 +00:00
Martin Baulig
9bee3ef88d [FIXME: On NetBSD, dlsym() doesn't set errno != 0 when the system cannot be
found; this leads to an incorrect return value of g_module_symbol.]

2000-01-13  Martin Baulig  <martin@home-of-linux.org>

	* gmodule.c (g_module_open): Check whether `check_init' is not NULL
	before we attempt to call it.
2000-01-13 22:11:39 +00:00
Tim Janik
87c7aeb93b 18:36. incorporated proposed cleanups from gtk-devel-list.
Sat Jul 24 20:11:35 1999  Tim Janik  <timj@gtk.org>

        * merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
        * incorporated proposed cleanups from gtk-devel-list.

        * bumped version number to GLib-1.3.1

        * glib.h:
        * gqueue.c:
        * gstring.c:
        * glist.c:
        removed string tokenisation (we got g_strsplit() and g_strjoin()
        already) and readline functions.
        s/g_list_delete/g_list_delete_link.
        implemented g_slist_delete_link.
        removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
        macro, g_atexit() is provided for public consumption.
        added GTrashStack inline utility functions.
        reimplement double eneded queues.
        removed GStack implementation, people can use a queue or a (singly)
        linked list for this task.
        deprecated g_strescape(), we need the SunOS variants here.

        * gdate.c: added DEBUG_MSG() macro to wrap old messages.

        * *.*: CVS merges.

        * upgrade to libtool 1.3.3.
1999-07-24 18:50:58 +00:00