gtypes: Deprecate GTimeVal in favour of guint64 or GDateTime

GTimeVal is subject to the year 2038 problem, since its `tv_sec` field
is a `glong`, which is 32 bits on 32-bit platforms.

Use `guint64` to represent microsecond-precision time since the Unix
epoch; or use `GDateTime` for full date/time representation.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

Fixes: #1438
This commit is contained in:
Philip Withnall 2019-06-14 12:30:11 +01:00
parent e357619d24
commit e3f88f311f
4 changed files with 8 additions and 2 deletions

View File

@ -110,12 +110,14 @@ GLIB_AVAILABLE_IN_2_46
void g_async_queue_push_front_unlocked (GAsyncQueue *queue, void g_async_queue_push_front_unlocked (GAsyncQueue *queue,
gpointer item); gpointer item);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop) GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop)
gpointer g_async_queue_timed_pop (GAsyncQueue *queue, gpointer g_async_queue_timed_pop (GAsyncQueue *queue,
GTimeVal *end_time); GTimeVal *end_time);
GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop_unlocked) GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop_unlocked)
gpointer g_async_queue_timed_pop_unlocked (GAsyncQueue *queue, gpointer g_async_queue_timed_pop_unlocked (GAsyncQueue *queue,
GTimeVal *end_time); GTimeVal *end_time);
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS G_END_DECLS

View File

@ -123,6 +123,8 @@
* removed from a future version of GLib. A consequence of using `glong` for * removed from a future version of GLib. A consequence of using `glong` for
* `tv_sec` is that on 32-bit systems `GTimeVal` is subject to the year 2038 * `tv_sec` is that on 32-bit systems `GTimeVal` is subject to the year 2038
* problem. * problem.
*
* Deprecated: 2.62: Use #GDateTime or #guint64 instead.
*/ */
/** /**

View File

@ -544,9 +544,11 @@ GLIB_AVAILABLE_IN_ALL
void g_source_remove_child_source (GSource *source, void g_source_remove_child_source (GSource *source,
GSource *child_source); GSource *child_source);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_28_FOR(g_source_get_time) GLIB_DEPRECATED_IN_2_28_FOR(g_source_get_time)
void g_source_get_current_time (GSource *source, void g_source_get_current_time (GSource *source,
GTimeVal *timeval); GTimeVal *timeval);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL GLIB_AVAILABLE_IN_ALL
gint64 g_source_get_time (GSource *source); gint64 g_source_get_time (GSource *source);

View File

@ -546,13 +546,13 @@ union _GDoubleIEEE754
#error unknown ENDIAN type #error unknown ENDIAN type
#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ #endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
typedef struct _GTimeVal GTimeVal; typedef struct _GTimeVal GTimeVal GLIB_DEPRECATED_TYPE_IN_2_62_FOR(GDateTime);
struct _GTimeVal struct _GTimeVal
{ {
glong tv_sec; glong tv_sec;
glong tv_usec; glong tv_usec;
}; } GLIB_DEPRECATED_TYPE_IN_2_62_FOR(GDateTime);
typedef gint grefcount; typedef gint grefcount;
typedef volatile gint gatomicrefcount; typedef volatile gint gatomicrefcount;