]> Savannah Git Hosting - gnulib.git/commit
timespec: fill in other members
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 15 May 2023 06:27:51 +0000 (23:27 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 15 May 2023 06:30:16 +0000 (23:30 -0700)
commit88811b7d0413ef4b48566e52eca4f91c37be3a3f
treecb1a2b721e81b7b5b5dfc8171c444b0057dfb7c9
parent29eff208358df3d6bb1668649f008894a312b336
timespec: fill in other members

This problem was found when compiling GNU Emacs with
--enable-gcc-warnings on a platform where tv_sec is 64 bits and
tv_nsec is 32 bits, and struct timespec has padding.  GCC
-Wuse-of-uninitialized-value complained when a struct timespec
initialized only via assigning to tv_sec and tv_nsec was copied
via assignment (this was in lib/timespec.h’s make_timespec).
Although behavior is well-defined on this platform, the warning is
annoying and the behavior might not be well-defined on theoretical
platforms where struct timespec has other members.  To work around
this, initialize all the struct’s members.
* lib/getsockopt.c (rpl_getsockopt):
* lib/gettime.c (gettime):
* lib/gettimeofday.c (gettimeofday):
* lib/glthread/thread.c (gl_thread_self):
* lib/nanosleep.c (nanosleep):
* lib/parse-datetime.y (digits_to_date_time, set_hhmmss)
(signed_seconds, unsigned_seconds, yylex, parse_datetime_body):
* lib/poll.c (poll):
* lib/pselect.c (pselect):
* lib/pthread-cond.c (endlessly, pthread_cond_timedwait):
* lib/pthread-rwlock.c (pthread_rwlock_timedrdlock)
(pthread_rwlock_timedwrlock):
* lib/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
* lib/select.c (rpl_select):
* lib/settime.c (settime):
* lib/stat-time.h (get_stat_atime, get_stat_ctime)
(get_stat_mtime, get_stat_birthtime):
* lib/thrd.c (rpl_thrd_current):
* lib/timespec.h (make_timespec):
* lib/timespec_getres.c (timespec_getres):
* lib/utimecmp.c (utimecmpat):
* lib/utimens.c (fdutimens):
When filling in a struct timespec or similar time-related structure
that might be copied elsewhere, also assign to any storage other
than tv_sec and tv_nsec, to avoid undefined behavior on (likely
theoretical) platforms where struct timespec has other members,
and also to avoid warnings from GCC and/or valgrind.
20 files changed:
ChangeLog
lib/getsockopt.c
lib/gettime.c
lib/gettimeofday.c
lib/glthread/thread.c
lib/nanosleep.c
lib/parse-datetime.y
lib/poll.c
lib/pselect.c
lib/pthread-cond.c
lib/pthread-rwlock.c
lib/pthread_mutex_timedlock.c
lib/select.c
lib/settime.c
lib/stat-time.h
lib/thrd.c
lib/timespec.h
lib/timespec_getres.c
lib/utimecmp.c
lib/utimens.c