From 5e27ad6b21f1cba6c08120e6123f317bbfc67e5c Mon Sep 17 00:00:00 2001 From: Roland Hieber Date: Wed, 29 Nov 2023 21:44:00 +0100 Subject: [PATCH] CDRIVER-4789 libbson: prevent -Werror=conversion with GCC 12 (#1479) * libbson: prevent -Werror=conversion with GCC 12 Building fails with GCC 12.3: bson-iter.h:434:33: error: conversion from 'int64_t' {aka 'long long int'} to '__suseconds_t' {aka 'long int'} may change value [-Werror=conversion] 434 | tv->tv_usec = (value % 1000) * 1000; | ~~~~~~~~~~~~~~~^~~~~~ cc1plus: all warnings being treated as errors Do the same as with tv->tv_sec, and explicitely cast it to suseconds_t on non-Win32 systems and to long on Win32. * use `time_t` in assignment to `tv_sec` This matches specificiation in POSIX 2008. --- src/libbson/NEWS | 4 +++- src/libbson/src/bson/bson-iter.h | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libbson/NEWS b/src/libbson/NEWS index 44d764747c..696077f29f 100644 --- a/src/libbson/NEWS +++ b/src/libbson/NEWS @@ -1,7 +1,9 @@ libbson 1.25.2 (Unreleased) =========================== -TODO: Add news. +Fixes: + + * Fix conversion warning with GCC 12. libbson 1.25.1 ============== diff --git a/src/libbson/src/bson/bson-iter.h b/src/libbson/src/bson/bson-iter.h index ef7ef59fb3..22af2e45d2 100644 --- a/src/libbson/src/bson/bson-iter.h +++ b/src/libbson/src/bson/bson-iter.h @@ -440,10 +440,11 @@ bson_iter_timeval_unsafe (const bson_iter_t *iter, struct timeval *tv) int64_t value = bson_iter_int64_unsafe (iter); #ifdef BSON_OS_WIN32 tv->tv_sec = (long) (value / 1000); + tv->tv_usec = (long) (value % 1000) * 1000; #else - tv->tv_sec = (suseconds_t) (value / 1000); + tv->tv_sec = (time_t) (value / 1000); + tv->tv_usec = (suseconds_t) (value % 1000) * 1000; #endif - tv->tv_usec = (value % 1000) * 1000; }