From patchwork Fri Mar 5 20:15:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 42327 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5387D39A5C15; Fri, 5 Mar 2021 20:16:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5387D39A5C15 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614975384; bh=zRhRYGuqFyDwM8NgTimOLK1hQr8xDvz3AgH8Uv0eW3U=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=UIPwtaHcC4eygqRwVNTn1WufKw0SQxbS/24758CM7QYSYdhgQrOPc3u1J6Yw34ZDK 8M3gHGSCwC1DrhSvDyxvYjRnIf2QmfFveQSIjoL0pGmV9yAWTjaa78AYFd+Ye/ml1J sx08+ciTQZzNEEmOM40XCe/m/b+uQerRH8gSA88c= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) by sourceware.org (Postfix) with ESMTPS id BCF0F399F031 for ; Fri, 5 Mar 2021 20:16:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org BCF0F399F031 Received: by mail-qk1-x72f.google.com with SMTP id z128so3240893qkc.12 for ; Fri, 05 Mar 2021 12:16:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zRhRYGuqFyDwM8NgTimOLK1hQr8xDvz3AgH8Uv0eW3U=; b=dn4i0PYPS0lgAqKnuz9/7pohUXL/jHeXDk6D6cNLmBTcB0mkZ6VpSNFyYoYqZluKCW MZydBD/L9nvMGtbISWFQz5+RGrDdv+xIMbBzifbVaDc9XnmAxMPurcSlJmhcNO+UjRbj Mcxn0uIB1y3aMvsJjsk/Ee/7XK67slq8rylDTdqtAAZS8XeFQ9X1sLVef8S/ytx3/VDM iKUvPBE1EuDvjtcAuTVEq4nFhY1YFNK4fwuz5ZjgqGxaliJalOxNzxRy0YSttZoHRAt8 96X6s52GbPWfJOJsLu6/b4/gNeBopWglIDlvg1w23LLVNZzWDwoT1KEp4byLUX8/X5sv kpvA== X-Gm-Message-State: AOAM533IwATxX3Yc6xBj9S/Eaw8ryIJkqLqJFvyethko7pKsbPAiy7YW rbCG+1u5iaZ60AF4WPphz3FKodGfuj99xw== X-Google-Smtp-Source: ABdhPJxk4wDAwoXCUjMt+L1m7WJ7WikBw2wEEHb2a1sRMuCwi1WxsHRNK5UKoOIxqvjqOYgVdjWONg== X-Received: by 2002:a05:620a:108f:: with SMTP id g15mr11059857qkk.298.1614975376360; Fri, 05 Mar 2021 12:16:16 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id c5sm2526145qkl.21.2021.03.05.12.16.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Mar 2021 12:16:16 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 44/52] y2038: Add test coverage Date: Fri, 5 Mar 2021 17:15:10 -0300 Message-Id: <20210305201518.798584-45-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210305201518.798584-1-adhemerval.zanella@linaro.org> References: <20210305201518.798584-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" It is enabled through a new rule, tests-y2038, which is built only when the ABI supports the comapt 64-bit time_t (defined by the header time64-compat.h, which also enables the creation of the symbol Version for Linux). It means the tests are not built for ABI which already provide default 64-bit time_t. The new rule already adds the required LFS and 64-bit time_t compiler flags. The current coverage is: * libc: - adjtime - adjtimex - clock_adjtime tst-clock_adjtime-time64 - clock_getres tst-clock-time64, tst-cpuclock1-time64 - clock_gettime tst-clock-time64, tst-clock2-time64, tst-cpuclock1-time64 - clock_nanoslee tst-clock_nanosleep-time64, tst-cpuclock1-time64 - clock_settime tst-clock2-time64 - ctime tst-ctime-time64 - ctime_r tst-ctime-time64 - difftime tst-difftime-time64 - fstat tst-stat-time64 - fstatat tst-stat-time64 - futimens tst-futimens-time64 - futimes tst-futimes-time64 - futimesat tst-futimesat-time64 - fts_* tst-fts-time64 - getitimer tst-itimer-timer64 - getrusage - gettimeofday tst-clock_nanosleep-time64 - glob / globfree tst-gnuglob64-time64 - gmtime tst-gmtime-time64 - gmtime_r tst-gmtime-time64 - lstat tst-stat-time64 - localtime tst-y2039-time64 - localtime_t tst-y2039-time64 - lutimes tst-lutimes-time64 - mktime tst-mktime4-time64 - mq_timedreceive tst-mqueue{1248}-time64 - mq_timedsend tst-mqueue{1248}-time64 - msgctl test-sysvmsg-time64 - nanosleep tst-cpuclock{12}-time64, tst-mqueue8-time64, tst-clock-time64 - nftw / ftw ftwtest-time64 - ntp_adjtime - ntp_gettime - ntp_gettimex - ppoll tst-ppoll-time64 - pselect tst-pselect-time64 - recvmmsg tst-cancel4_2-time64 - sched_rr_get_interval tst-sched_rr_get_interval-time64 - select - semctl test-sysvsem-time64 - semtimedop test-sysvsem-time64 - setitimer tst-mqueue2-time64, tst-itimer-timer64 - settimeofday - shmctl test-sysvshm-time64 - sigtimedwait - stat tst-stat-time64 - time tst-mqueue{1248}-time64 - timegm tst-timegm-time64 - timer_gettime tst-timer4-time64 - timer_settime tst-timer4-time64 - timerfd_gettime tst-timerfd-time64 - timerfd_settime tst-timerfd-time64 - timespec_get tst-timespec_get-time64 - utime tst-utime-time64 - utimensat tst-utimensat-time64 - utimes tst-utimes-time64 - wait3 tst-wait3-time64 - wait4 tst-wait4-time64 * libpthread: - cnd_timedwait tst-cnd-timedwait-time64 - mtx_timedlock tst-mtx-timedlock-time64 - pthread_clockjoin_np tst-join14-time64 - pthread_cond_clockwait tst-cond11-time64 - pthread_cond_timedwait tst-abstime-time64 - pthread_mutex_clocklock tst-abstime-time64 - pthread_mutex_timedlock tst-abstime-time64 - pthread_rwlock_clockrdlock tst-abstime-time64, tst-rwlock14-time64 - pthread_rwlock_clockwrlock tst-abstime-time64, tst-rwlock14-time64 - pthread_rwlock_timedrdlock tst-abstime-time64, tst-rwlock14-time64 - pthread_rwlock_timedwrlock tst-abstime-time64, tst-rwlock14-time64 - pthread_timedjoin_np tst-join14-time64 - sem_clockwait tst-sem5-time64 - sem_timedwait tst-sem5-time64 - thrd_sleep tst-thrd-sleep-time64 * librt: - aio_suspend tst-aio6-time64 - mq_timedreceive tst-mqueue{1248}-time64 - mq_timedsend tst-mqueue{1248}-time64 - timer_gettime tst-timer4-time64 - timer_settime tst-timer4-time64 * libanl: - gai_suspend Reviewed-by: Lukasz Majewski --- Makeconfig | 14 +++ Makerules | 18 +++- io/Makefile | 16 ++- io/ftwtest-time64.c | 1 + io/tst-fts-time64.c | 1 + io/tst-futimesat-time64.c | 4 + io/tst-futimesat.c | 47 +++++--- io/tst-stat-time64.c | 102 ++++++++++++++++++ io/tst-utimensat-time64.c | 2 + misc/Makefile | 2 + misc/tst-pselect-time64.c | 1 + nptl/Makefile | 3 + nptl/tst-cancel4_2-time64.c | 1 + posix/Makefile | 2 + posix/tst-gnuglob64-time64.c | 7 ++ posix/tst-sched_rr_get_interval-time64.c | 1 + posix/tst-wait3-time64.c | 1 + posix/tst-wait4-time64.c | 1 + rt/Makefile | 9 ++ rt/tst-aio6-time64.c | 1 + rt/tst-cpuclock2-time64.c | 1 + rt/tst-cpuclock2.c | 9 +- rt/tst-mqueue1-time64.c | 1 + rt/tst-mqueue2-time64.c | 1 + rt/tst-mqueue4-time64.c | 1 + rt/tst-mqueue8-time64.c | 1 + rt/tst-timer4-time64.c | 1 + sysdeps/pthread/Makefile | 10 ++ sysdeps/pthread/tst-abstime-time64.c | 1 + sysdeps/pthread/tst-cnd-timedwait-time64.c | 1 + sysdeps/pthread/tst-cond11-time64.c | 1 + sysdeps/pthread/tst-join14-time64.c | 1 + sysdeps/pthread/tst-mtx-timedlock-time64.c | 1 + sysdeps/pthread/tst-rwlock14-time64.c | 1 + sysdeps/pthread/tst-sem5-time64.c | 1 + sysdeps/pthread/tst-thrd-sleep-time64.c | 1 + sysdeps/unix/sysv/linux/Makefile | 8 ++ sysdeps/unix/sysv/linux/Versions | 4 +- sysdeps/unix/sysv/linux/tst-futimens-time64.c | 2 + sysdeps/unix/sysv/linux/tst-futimens.c | 8 +- sysdeps/unix/sysv/linux/tst-futimes-time64.c | 2 + sysdeps/unix/sysv/linux/tst-lutimes-time64.c | 2 + sysdeps/unix/sysv/linux/tst-ppoll-time64.c | 1 + sysdeps/unix/sysv/linux/tst-timerfd-time64.c | 1 + sysdeps/unix/sysv/linux/tst-utime-time64.c | 2 + sysdeps/unix/sysv/linux/tst-utime.c | 6 +- sysdeps/unix/sysv/linux/tst-utimes-time64.c | 2 + sysdeps/unix/sysv/linux/tst-utimes.c | 6 +- sysvipc/Makefile | 2 + sysvipc/test-sysvmsg-time64.c | 1 + sysvipc/test-sysvsem-time64.c | 1 + sysvipc/test-sysvshm-time64.c | 1 + time/Makefile | 15 +++ time/tst-adjtime-time64.c | 1 + time/tst-clock-time64.c | 1 + time/tst-clock2-time64.c | 1 + time/tst-clock_nanosleep-time64.c | 1 + time/tst-cpuclock1-time64.c | 1 + time/tst-ctime-time64.c | 1 + time/tst-ctime.c | 16 +++ time/tst-difftime-time64.c | 1 + time/tst-gmtime-time64.c | 1 + time/tst-itimer-time64.c | 1 + time/tst-mktime4-time64.c | 1 + time/tst-timegm-time64.c | 1 + time/tst-timespec_get-time64.c | 1 + time/tst-y2039-time64.c | 1 + time/tst-y2039.c | 10 ++ 68 files changed, 346 insertions(+), 24 deletions(-) create mode 100644 io/ftwtest-time64.c create mode 100644 io/tst-fts-time64.c create mode 100644 io/tst-futimesat-time64.c create mode 100644 io/tst-stat-time64.c create mode 100644 io/tst-utimensat-time64.c create mode 100644 misc/tst-pselect-time64.c create mode 100644 nptl/tst-cancel4_2-time64.c create mode 100644 posix/tst-gnuglob64-time64.c create mode 100644 posix/tst-sched_rr_get_interval-time64.c create mode 100644 posix/tst-wait3-time64.c create mode 100644 posix/tst-wait4-time64.c create mode 100644 rt/tst-aio6-time64.c create mode 100644 rt/tst-cpuclock2-time64.c create mode 100644 rt/tst-mqueue1-time64.c create mode 100644 rt/tst-mqueue2-time64.c create mode 100644 rt/tst-mqueue4-time64.c create mode 100644 rt/tst-mqueue8-time64.c create mode 100644 rt/tst-timer4-time64.c create mode 100644 sysdeps/pthread/tst-abstime-time64.c create mode 100644 sysdeps/pthread/tst-cnd-timedwait-time64.c create mode 100644 sysdeps/pthread/tst-cond11-time64.c create mode 100644 sysdeps/pthread/tst-join14-time64.c create mode 100644 sysdeps/pthread/tst-mtx-timedlock-time64.c create mode 100644 sysdeps/pthread/tst-rwlock14-time64.c create mode 100644 sysdeps/pthread/tst-sem5-time64.c create mode 100644 sysdeps/pthread/tst-thrd-sleep-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-futimens-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-futimes-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-lutimes-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-ppoll-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-timerfd-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-utime-time64.c create mode 100644 sysdeps/unix/sysv/linux/tst-utimes-time64.c create mode 100644 sysvipc/test-sysvmsg-time64.c create mode 100644 sysvipc/test-sysvsem-time64.c create mode 100644 sysvipc/test-sysvshm-time64.c create mode 100644 time/tst-adjtime-time64.c create mode 100644 time/tst-clock-time64.c create mode 100644 time/tst-clock2-time64.c create mode 100644 time/tst-clock_nanosleep-time64.c create mode 100644 time/tst-cpuclock1-time64.c create mode 100644 time/tst-ctime-time64.c create mode 100644 time/tst-difftime-time64.c create mode 100644 time/tst-gmtime-time64.c create mode 100644 time/tst-itimer-time64.c create mode 100644 time/tst-mktime4-time64.c create mode 100644 time/tst-timegm-time64.c create mode 100644 time/tst-timespec_get-time64.c create mode 100644 time/tst-y2039-time64.c diff --git a/Makeconfig b/Makeconfig index 0a4811b5e5..e12ee30eca 100644 --- a/Makeconfig +++ b/Makeconfig @@ -1227,6 +1227,20 @@ $(common-objpfx)versions.stmp: $(common-objpfx)Versions.all \ touch $@ endif # avoid-generated endif # $(build-shared) = yes + +-include $(common-objpfx)time64-compat.mk +postclean-generated += time64-compat.mk + +$(common-objpfx)time64-compat.mk: $(sysd-versions-force) \ + $(common-objpfx)time64-compat.i + sed '/^[ ]*#/d;/^[ ]*$$/d' $< > $@T + mv -f $@T $@ +$(common-objpfx)time64-compat.i: $(..)Makeconfig + printf "#include \n#ifdef TIME64_NON_DEFAULT\nhave-time64-compat = yes\n#endif" \ + | $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - > $@T + mv -f $@T $@ + + endif # sysd-sorted-done # The name under which the run-time dynamic linker is installed. diff --git a/Makerules b/Makerules index fc5251ffad..f4f641bb26 100644 --- a/Makerules +++ b/Makerules @@ -771,7 +771,8 @@ endif $(patsubst %.o,%.d,$(filter %.o,$(extra-objs:.os=.o))) \ $(patsubst %.oS,%.d,$(filter %.oS,$(extra-objs))) \ $(patsubst %.o,%.d,$(filter %.o,$(extra-test-objs:.os=.o))) \ - $(addsuffix .d,$(tests) $(tests-internal) $(xtests) $(test-srcs)) + $(addsuffix .d,$(tests) $(tests-internal) $(xtests) \ + $(test-srcs) $(tests-time64) $(xtests-time64)) ifeq ($(build-programs),yes) +depfiles += $(addsuffix .d,$(others) $(sysdep-others)) endif @@ -1286,6 +1287,21 @@ check: tests .PHONY: xcheck xcheck: xtests +# Handle tests-time64 and xtests-time64 that should built with LFS +# and 64-bit time support. +include $(o-iterator) +define o-iterator-doit +$(foreach f,$(tests-time64) $(xtests-time64),\ + $(objpfx)$(f)$(o)): CFLAGS += -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 +endef +object-suffixes-left := $(all-object-suffixes) +include $(o-iterator) + +ifeq ($(have-time64-compat),yes) +tests += $(foreach t,$(tests-time64),$(t)) +xtests += $(foreach t,$(xtests-time64),$(t)) +endif + # The only difference between MODULE_NAME=testsuite and MODULE_NAME=nonlib is # that almost all internal declarations from config.h, libc-symbols.h, and # include/*.h are not available to 'testsuite' code, but are to 'nonlib' code. diff --git a/io/Makefile b/io/Makefile index 6c637f7c6d..a39f0ecfc1 100644 --- a/io/Makefile +++ b/io/Makefile @@ -59,7 +59,7 @@ routines := \ ftw64-time64 others := pwd -test-srcs := ftwtest +test-srcs := ftwtest ftwtest-time64 tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ tst-fcntl bug-ftw1 bug-ftw2 bug-ftw3 bug-ftw4 tst-statvfs \ tst-openat tst-unlinkat tst-fstatat tst-futimesat \ @@ -72,12 +72,18 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ tst-ftw-lnk tst-file_change_detection tst-lchmod \ tst-ftw-bz26353 tst-utimensat +tests-time64 := tst-fts-time64 \ + tst-stat-time64 \ + tst-futimesat-time64 \ + tst-utimensat-time64 + # Likewise for statx, but we do not need static linking here. tests-internal += tst-statx tests-static += tst-statx ifeq ($(run-built-tests),yes) -tests-special += $(objpfx)ftwtest.out +tests-special += $(objpfx)ftwtest.out \ + $(objpfx)ftwtest-time64.out endif include ../Rules @@ -118,8 +124,14 @@ tst-statvfs-ARGS = $(objpfx)tst-statvfs tst-statvfs.c /tmp tst-open-tmpfile-ARGS = --test-dir=$(objpfx) +CFLAGS-ftwtest-time64.c += -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 + ifeq ($(run-built-tests),yes) $(objpfx)ftwtest.out: ftwtest-sh $(objpfx)ftwtest $(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \ $(evaluate-test) + +$(objpfx)ftwtest-time64.out: ftwtest-sh $(objpfx)ftwtest-time64 + $(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \ + $(evaluate-test) endif diff --git a/io/ftwtest-time64.c b/io/ftwtest-time64.c new file mode 100644 index 0000000000..67f1c46826 --- /dev/null +++ b/io/ftwtest-time64.c @@ -0,0 +1 @@ +#include "ftwtest.c" diff --git a/io/tst-fts-time64.c b/io/tst-fts-time64.c new file mode 100644 index 0000000000..a4a41fe1cf --- /dev/null +++ b/io/tst-fts-time64.c @@ -0,0 +1 @@ +#include "tst-fts.c" diff --git a/io/tst-futimesat-time64.c b/io/tst-futimesat-time64.c new file mode 100644 index 0000000000..f6c0500eef --- /dev/null +++ b/io/tst-futimesat-time64.c @@ -0,0 +1,4 @@ +#define struct_stat struct stat +#define fstat fstat +#define fstatat fstatat +#include "io/tst-futimesat.c" diff --git a/io/tst-futimesat.c b/io/tst-futimesat.c index af58ad06dd..c32ab2b668 100644 --- a/io/tst-futimesat.c +++ b/io/tst-futimesat.c @@ -1,4 +1,23 @@ +/* futimesat basic tests. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + #include +#include #include #include #include @@ -7,19 +26,19 @@ #include #include +#include +#include -static void prepare (void); -#define PREPARE(argc, argv) prepare () - -static int do_test (void); -#define TEST_FUNCTION do_test () - -#include "../test-skeleton.c" +#ifndef struct_stat +# define struct_stat struct stat64 +# define fstat fstat64 +# define fstatat fstatat64 +#endif static int dir_fd; static void -prepare (void) +prepare (int argc, char *argv[]) { size_t test_dir_len = strlen (test_dir); static const char dir_name[] = "/tst-futimesat.XXXXXX"; @@ -48,7 +67,7 @@ prepare (void) exit (1); } } - +#define PREPARE prepare static int do_test (void) @@ -98,8 +117,8 @@ do_test (void) write (fd, "hello", 5); puts ("file created"); - struct stat64 st1; - if (fstat64 (fd, &st1) != 0) + struct_stat st1; + if (fstat (fd, &st1) != 0) { puts ("fstat64 failed"); return 1; @@ -118,8 +137,8 @@ do_test (void) return 1; } - struct stat64 st2; - if (fstatat64 (dir_fd, "some-file", &st2, 0) != 0) + struct_stat st2; + if (fstatat (dir_fd, "some-file", &st2, 0) != 0) { puts ("fstatat64 failed"); return 1; @@ -146,3 +165,5 @@ do_test (void) return 0; } + +#include diff --git a/io/tst-stat-time64.c b/io/tst-stat-time64.c new file mode 100644 index 0000000000..c10fe1284a --- /dev/null +++ b/io/tst-stat-time64.c @@ -0,0 +1,102 @@ +/* Basic test of stat with 64 bit time_t interfaces. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* The idea of the test is check whether the 64 bit time_t stat implementation + returns the expected value for comparable fields, so it does not really + matter whether statx uses a fallback implementation or not. */ + +static void +stat_check (int fd, const char *path, struct stat *st) +{ + TEST_COMPARE (stat (path, st), 0); +} + +static void +lstat_check (int fd, const char *path, struct stat *st) +{ + TEST_COMPARE (lstat (path, st), 0); +} + +static void +fstat_check (int fd, const char *path, struct stat *st) +{ + TEST_COMPARE (fstat (fd, st), 0); +} + +static void +fstatat_check (int fd, const char *path, struct stat *st) +{ + TEST_COMPARE (fstatat (fd, path, st, 0), 0); +} + +typedef void (*test_t)(int, const char *path, struct stat *); + +static int +do_test (void) +{ + char *path; + int fd = create_temp_file ("tst-statx-", &path); + TEST_VERIFY_EXIT (fd >= 0); + support_write_file_string (path, "abc"); + + struct statx stx; + TEST_COMPARE (statx (fd, path, 0, STATX_BASIC_STATS, &stx), 0); + + for (test_t *test = (test_t[]) { stat_check, lstat_check, fstat_check, + fstatat_check, NULL }; + *test != NULL; test++) + { + struct stat st; + (*test) (fd, path, &st); + + TEST_COMPARE (stx.stx_dev_major, major (st.st_dev)); + TEST_COMPARE (stx.stx_dev_minor, minor (st.st_dev)); + TEST_COMPARE (stx.stx_ino, st.st_ino); + TEST_COMPARE (stx.stx_mode, st.st_mode); + TEST_COMPARE (stx.stx_nlink, st.st_nlink); + TEST_COMPARE (stx.stx_uid, st.st_uid); + TEST_COMPARE (stx.stx_gid, st.st_gid); + TEST_COMPARE (stx.stx_rdev_major, major (st.st_rdev)); + TEST_COMPARE (stx.stx_rdev_minor, minor (st.st_rdev)); + TEST_COMPARE (stx.stx_blksize, st.st_blksize); + TEST_COMPARE (stx.stx_blocks, st.st_blocks); + + TEST_COMPARE (stx.stx_ctime.tv_sec, st.st_ctim.tv_sec); + TEST_COMPARE (stx.stx_ctime.tv_nsec, st.st_ctim.tv_nsec); + TEST_COMPARE (stx.stx_mtime.tv_sec, st.st_mtim.tv_sec); + TEST_COMPARE (stx.stx_mtime.tv_nsec, st.st_mtim.tv_nsec); + } + + xclose (fd); + free (path); + + return 0; +} + +#include diff --git a/io/tst-utimensat-time64.c b/io/tst-utimensat-time64.c new file mode 100644 index 0000000000..7ac7d8df1d --- /dev/null +++ b/io/tst-utimensat-time64.c @@ -0,0 +1,2 @@ +#define struct_stat struct stat +#include "tst-utimensat.c" diff --git a/misc/Makefile b/misc/Makefile index cfc15355d6..a8363d4b76 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -90,6 +90,8 @@ tests := tst-dirname tst-tsearch tst-fdset tst-mntent tst-hsearch \ tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt tst-ldbl-efgcvt \ tst-mntent-autofs tst-syscalls tst-mntent-escape +tests-time64 := tst-pselect-time64 + # Tests which need libdl. ifeq (yes,$(build-shared)) tests += tst-gethostid diff --git a/misc/tst-pselect-time64.c b/misc/tst-pselect-time64.c new file mode 100644 index 0000000000..15a1e49292 --- /dev/null +++ b/misc/tst-pselect-time64.c @@ -0,0 +1 @@ +#include "tst-pselect.c" diff --git a/nptl/Makefile b/nptl/Makefile index 33766eaf7a..d1c786e88b 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -380,6 +380,9 @@ xtests = tst-setuid1 tst-setuid1-static tst-setuid2 \ tst-mutexpp1 tst-mutexpp6 tst-mutexpp10 tst-setgroups \ tst-mutexpp5 tst-mutexpp9 +tests-time64 := \ + tst-cancel4_2-time64 + # This test can run into task limits because of a linux kernel bug # and then cause the make process to fail too, see bug 24537. xtests += tst-eintr1 diff --git a/nptl/tst-cancel4_2-time64.c b/nptl/tst-cancel4_2-time64.c new file mode 100644 index 0000000000..4ac086a312 --- /dev/null +++ b/nptl/tst-cancel4_2-time64.c @@ -0,0 +1 @@ +#include "tst-cancel4_2.c" diff --git a/posix/Makefile b/posix/Makefile index aba66efde8..e246ff1d14 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -109,7 +109,9 @@ tests-internal := bug-regex5 bug-regex20 bug-regex33 \ tst-rfc3484 tst-rfc3484-2 tst-rfc3484-3 \ tst-glob_lstat_compat tst-spawn4-compat tests-container := bug-ga2 +tests-time64 := tst-wait4-time64 tst-wait3-time64 tst-gnuglob64-time64 xtests := tst-getaddrinfo4 tst-getaddrinfo5 tst-sched_rr_get_interval +xtests-time64 := tst-sched_rr_get_interval-time64 ifeq (yes,$(build-shared)) test-srcs := globtest tests += wordexp-test tst-exec tst-spawn tst-spawn2 tst-spawn3 diff --git a/posix/tst-gnuglob64-time64.c b/posix/tst-gnuglob64-time64.c new file mode 100644 index 0000000000..00922bcdc6 --- /dev/null +++ b/posix/tst-gnuglob64-time64.c @@ -0,0 +1,7 @@ +#define GLOB_FUNC glob +#define GLOB_TYPE glob_t +#define GLOBFREE_FUNC globfree +#define DIRENT_STRUCT dirent +#define STAT_STRUCT stat + +#include "tst-gnuglob-skeleton.c" diff --git a/posix/tst-sched_rr_get_interval-time64.c b/posix/tst-sched_rr_get_interval-time64.c new file mode 100644 index 0000000000..f4e66d2939 --- /dev/null +++ b/posix/tst-sched_rr_get_interval-time64.c @@ -0,0 +1 @@ +#include "tst-sched_rr_get_interval.c" diff --git a/posix/tst-wait3-time64.c b/posix/tst-wait3-time64.c new file mode 100644 index 0000000000..2837bc7a9e --- /dev/null +++ b/posix/tst-wait3-time64.c @@ -0,0 +1 @@ +#include "tst-wait3.c" diff --git a/posix/tst-wait4-time64.c b/posix/tst-wait4-time64.c new file mode 100644 index 0000000000..12543b270f --- /dev/null +++ b/posix/tst-wait4-time64.c @@ -0,0 +1 @@ +#include "tst-wait4.c" diff --git a/rt/Makefile b/rt/Makefile index 7b374f2073..3ce98297f9 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -49,6 +49,15 @@ tests := tst-shm tst-timer tst-timer2 \ tst-shm-cancel tests-internal := tst-timer-sigmask +tests-time64 := \ + tst-aio6-time64 \ + tst-cpuclock2-time64 \ + tst-mqueue1-time64 \ + tst-mqueue2-time64 \ + tst-mqueue4-time64 \ + tst-mqueue8-time64 \ + tst-timer4-time64 + extra-libs := librt extra-libs-others := $(extra-libs) diff --git a/rt/tst-aio6-time64.c b/rt/tst-aio6-time64.c new file mode 100644 index 0000000000..a386a577ec --- /dev/null +++ b/rt/tst-aio6-time64.c @@ -0,0 +1 @@ +#include "tst-aio6.c" diff --git a/rt/tst-cpuclock2-time64.c b/rt/tst-cpuclock2-time64.c new file mode 100644 index 0000000000..05775522bb --- /dev/null +++ b/rt/tst-cpuclock2-time64.c @@ -0,0 +1 @@ +#include "tst-cpuclock2.c" diff --git a/rt/tst-cpuclock2.c b/rt/tst-cpuclock2.c index c1c7ed2ad8..eebc3609d0 100644 --- a/rt/tst-cpuclock2.c +++ b/rt/tst-cpuclock2.c @@ -21,7 +21,11 @@ #if (_POSIX_THREADS - 0) <= 0 -# define TEST_FUNCTION 0 +static int +do_test () +{ + return 0; +} #else @@ -330,7 +334,6 @@ do_test (void) return result; } -# define TEST_FUNCTION do_test () #endif -#include "../test-skeleton.c" +#include diff --git a/rt/tst-mqueue1-time64.c b/rt/tst-mqueue1-time64.c new file mode 100644 index 0000000000..9c600a9a97 --- /dev/null +++ b/rt/tst-mqueue1-time64.c @@ -0,0 +1 @@ +#include "tst-mqueue1.c" diff --git a/rt/tst-mqueue2-time64.c b/rt/tst-mqueue2-time64.c new file mode 100644 index 0000000000..9d49f0b196 --- /dev/null +++ b/rt/tst-mqueue2-time64.c @@ -0,0 +1 @@ +#include "tst-mqueue2.c" diff --git a/rt/tst-mqueue4-time64.c b/rt/tst-mqueue4-time64.c new file mode 100644 index 0000000000..c23a228dc4 --- /dev/null +++ b/rt/tst-mqueue4-time64.c @@ -0,0 +1 @@ +#include "tst-mqueue4.c" diff --git a/rt/tst-mqueue8-time64.c b/rt/tst-mqueue8-time64.c new file mode 100644 index 0000000000..972637f7f5 --- /dev/null +++ b/rt/tst-mqueue8-time64.c @@ -0,0 +1 @@ +#include "tst-mqueue8.c" diff --git a/rt/tst-timer4-time64.c b/rt/tst-timer4-time64.c new file mode 100644 index 0000000000..e47a593f10 --- /dev/null +++ b/rt/tst-timer4-time64.c @@ -0,0 +1 @@ +#include "tst-timer4.c" diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile index 53b65ef349..31df6f97e5 100644 --- a/sysdeps/pthread/Makefile +++ b/sysdeps/pthread/Makefile @@ -109,6 +109,16 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \ tst-unwind-thread \ tst-pt-vfork1 tst-pt-vfork2 tst-vfork1x tst-vfork2x \ +tests-time64 := \ + tst-abstime-time64 \ + tst-cnd-timedwait-time64 \ + tst-cond11-time64 \ + tst-join14-time64 \ + tst-mtx-timedlock-time64 \ + tst-rwlock14-time64 \ + tst-sem5-time64 \ + tst-thrd-sleep-time64 \ + # Files which must not be linked with libpthread. tests-nolibpthread = tst-unload diff --git a/sysdeps/pthread/tst-abstime-time64.c b/sysdeps/pthread/tst-abstime-time64.c new file mode 100644 index 0000000000..2fc77cb365 --- /dev/null +++ b/sysdeps/pthread/tst-abstime-time64.c @@ -0,0 +1 @@ +#include "tst-abstime.c" diff --git a/sysdeps/pthread/tst-cnd-timedwait-time64.c b/sysdeps/pthread/tst-cnd-timedwait-time64.c new file mode 100644 index 0000000000..9b2abfd277 --- /dev/null +++ b/sysdeps/pthread/tst-cnd-timedwait-time64.c @@ -0,0 +1 @@ +#include "tst-cnd-timedwait.c" diff --git a/sysdeps/pthread/tst-cond11-time64.c b/sysdeps/pthread/tst-cond11-time64.c new file mode 100644 index 0000000000..9bccb8ec8b --- /dev/null +++ b/sysdeps/pthread/tst-cond11-time64.c @@ -0,0 +1 @@ +#include "tst-cond11.c" diff --git a/sysdeps/pthread/tst-join14-time64.c b/sysdeps/pthread/tst-join14-time64.c new file mode 100644 index 0000000000..bed784ee24 --- /dev/null +++ b/sysdeps/pthread/tst-join14-time64.c @@ -0,0 +1 @@ +#include "tst-join14.c" diff --git a/sysdeps/pthread/tst-mtx-timedlock-time64.c b/sysdeps/pthread/tst-mtx-timedlock-time64.c new file mode 100644 index 0000000000..b3393c99ef --- /dev/null +++ b/sysdeps/pthread/tst-mtx-timedlock-time64.c @@ -0,0 +1 @@ +#include "tst-mtx-timedlock.c" diff --git a/sysdeps/pthread/tst-rwlock14-time64.c b/sysdeps/pthread/tst-rwlock14-time64.c new file mode 100644 index 0000000000..ae9b1912cf --- /dev/null +++ b/sysdeps/pthread/tst-rwlock14-time64.c @@ -0,0 +1 @@ +#include "tst-rwlock14.c" diff --git a/sysdeps/pthread/tst-sem5-time64.c b/sysdeps/pthread/tst-sem5-time64.c new file mode 100644 index 0000000000..89c2a14f94 --- /dev/null +++ b/sysdeps/pthread/tst-sem5-time64.c @@ -0,0 +1 @@ +#include "tst-sem5.c" diff --git a/sysdeps/pthread/tst-thrd-sleep-time64.c b/sysdeps/pthread/tst-thrd-sleep-time64.c new file mode 100644 index 0000000000..02837bd19f --- /dev/null +++ b/sysdeps/pthread/tst-thrd-sleep-time64.c @@ -0,0 +1 @@ +#include "tst-thrd-sleep.c" diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index fc2a17307c..94ee85d124 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -115,6 +115,14 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ tst-futimes tst-lutimes tests-internal += tst-ofdlocks-compat tst-sigcontext-get_pc +tests-time64 += \ + tst-futimes-time64\ + tst-futimens-time64 \ + tst-lutimes-time64 \ + tst-ppoll-time64 \ + tst-utime-time64 \ + tst-utimes-time64 \ + tst-timerfd-time64 CFLAGS-tst-sigcontext-get_pc.c = -fasynchronous-unwind-tables diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index b53391f613..982b94e625 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -237,7 +237,9 @@ libc { __timegm64; __timespec_get64; __utimensat64; - __utimes64; + __utimes64; + __localtime64; + __localtime64_r; # misc __ntp_gettime64; __ntp_gettimex64; diff --git a/sysdeps/unix/sysv/linux/tst-futimens-time64.c b/sysdeps/unix/sysv/linux/tst-futimens-time64.c new file mode 100644 index 0000000000..88fcb38489 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-futimens-time64.c @@ -0,0 +1,2 @@ +#define struct_stat struct stat +#include "tst-futimens.c" diff --git a/sysdeps/unix/sysv/linux/tst-futimens.c b/sysdeps/unix/sysv/linux/tst-futimens.c index 8f48cfee63..b5b240abf1 100644 --- a/sysdeps/unix/sysv/linux/tst-futimens.c +++ b/sysdeps/unix/sysv/linux/tst-futimens.c @@ -24,10 +24,14 @@ #include #include +#ifndef struct_stat +# define struct_stat struct stat64 +#endif + static int temp_fd = -1; /* struct timespec array with Y2038 threshold minus 2 and 1 seconds. */ -const struct timespec t1[2] = { { 0x7FFFFFFE, 0 }, { 0x7FFFFFFF, 0 } }; +const static struct timespec t1[2] = { { 0x7FFFFFFE, 0 }, { 0x7FFFFFFF, 0 } }; /* struct timespec array with Y2038 threshold plus 1 and 2 seconds. */ const struct timespec t2[2] = { { 0x80000001ULL, 0 }, { 0x80000002ULL, 0 } }; @@ -46,7 +50,7 @@ do_prepare (int argc, char *argv[]) static int test_futimens_helper (const struct timespec *ts) { - struct stat64 st; + struct_stat st; int result; time_t t; diff --git a/sysdeps/unix/sysv/linux/tst-futimes-time64.c b/sysdeps/unix/sysv/linux/tst-futimes-time64.c new file mode 100644 index 0000000000..d489c265d1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-futimes-time64.c @@ -0,0 +1,2 @@ +#define struct_stat struct stat +#include "tst-futimes.c" diff --git a/sysdeps/unix/sysv/linux/tst-lutimes-time64.c b/sysdeps/unix/sysv/linux/tst-lutimes-time64.c new file mode 100644 index 0000000000..06caec0a91 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-lutimes-time64.c @@ -0,0 +1,2 @@ +#define struct_stat struct stat +#include "tst-lutimes.c" diff --git a/sysdeps/unix/sysv/linux/tst-ppoll-time64.c b/sysdeps/unix/sysv/linux/tst-ppoll-time64.c new file mode 100644 index 0000000000..96ee2faee3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-ppoll-time64.c @@ -0,0 +1 @@ +#include "tst-ppoll.c" diff --git a/sysdeps/unix/sysv/linux/tst-timerfd-time64.c b/sysdeps/unix/sysv/linux/tst-timerfd-time64.c new file mode 100644 index 0000000000..bb17f48139 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-timerfd-time64.c @@ -0,0 +1 @@ +#include "tst-timerfd.c" diff --git a/sysdeps/unix/sysv/linux/tst-utime-time64.c b/sysdeps/unix/sysv/linux/tst-utime-time64.c new file mode 100644 index 0000000000..eb62f59126 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-utime-time64.c @@ -0,0 +1,2 @@ +#define struct_stat struct stat +#include "tst-utime.c" diff --git a/sysdeps/unix/sysv/linux/tst-utime.c b/sysdeps/unix/sysv/linux/tst-utime.c index 6735421657..d413f130e8 100644 --- a/sysdeps/unix/sysv/linux/tst-utime.c +++ b/sysdeps/unix/sysv/linux/tst-utime.c @@ -26,6 +26,10 @@ #include #include +#ifndef struct_stat +# define struct_stat struct stat64 +#endif + static int temp_fd = -1; char *testfile; @@ -49,7 +53,7 @@ do_prepare (int argc, char *argv[]) static int test_utime_helper (const struct utimbuf *ut) { - struct stat64 st; + struct_stat st; int result; time_t t; diff --git a/sysdeps/unix/sysv/linux/tst-utimes-time64.c b/sysdeps/unix/sysv/linux/tst-utimes-time64.c new file mode 100644 index 0000000000..234ec02541 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-utimes-time64.c @@ -0,0 +1,2 @@ +#define struct_stat struct stat +#include "tst-utimes.c" diff --git a/sysdeps/unix/sysv/linux/tst-utimes.c b/sysdeps/unix/sysv/linux/tst-utimes.c index 8c7b006a22..c521c89dfa 100644 --- a/sysdeps/unix/sysv/linux/tst-utimes.c +++ b/sysdeps/unix/sysv/linux/tst-utimes.c @@ -25,6 +25,10 @@ #include #include +#ifndef struct_stat +# define struct_stat struct stat64 +#endif + static int temp_fd = -1; char *testfile; @@ -50,7 +54,7 @@ do_prepare (int argc, char *argv[]) static int test_utime_helper (const struct timeval *tv) { - struct stat64 st; + struct_stat st; int result; time_t t; diff --git a/sysvipc/Makefile b/sysvipc/Makefile index a534791928..86911803b5 100644 --- a/sysvipc/Makefile +++ b/sysvipc/Makefile @@ -32,6 +32,8 @@ routines := ftok \ tests := test-sysvmsg test-sysvsem test-sysvshm +tests-time64 := test-sysvmsg-time64 test-sysvsem-time64 test-sysvshm-time64 + include ../Rules CFLAGS-msgrcv.c += -fexceptions -fasynchronous-unwind-tables diff --git a/sysvipc/test-sysvmsg-time64.c b/sysvipc/test-sysvmsg-time64.c new file mode 100644 index 0000000000..c23e0c337e --- /dev/null +++ b/sysvipc/test-sysvmsg-time64.c @@ -0,0 +1 @@ +#include "test-sysvmsg.c" diff --git a/sysvipc/test-sysvsem-time64.c b/sysvipc/test-sysvsem-time64.c new file mode 100644 index 0000000000..05c95068cd --- /dev/null +++ b/sysvipc/test-sysvsem-time64.c @@ -0,0 +1 @@ +#include "test-sysvsem.c" diff --git a/sysvipc/test-sysvshm-time64.c b/sysvipc/test-sysvshm-time64.c new file mode 100644 index 0000000000..8e2963f563 --- /dev/null +++ b/sysvipc/test-sysvshm-time64.c @@ -0,0 +1 @@ +#include "test-sysvshm.c" diff --git a/time/Makefile b/time/Makefile index f14022b334..fee206d3c7 100644 --- a/time/Makefile +++ b/time/Makefile @@ -51,6 +51,21 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-itimer \ tst-gmtime tst-timegm tst-timespec_get +tests-time64 := \ + tst-adjtime-time64 \ + tst-clock-time64 \ + tst-clock2-time64 \ + tst-clock_nanosleep-time64 \ + tst-cpuclock1-time64 \ + tst-ctime-time64 \ + tst-difftime-time64 \ + tst-gmtime-time64 \ + tst-itimer-time64 \ + tst-mktime4-time64 \ + tst-timegm-time64 \ + tst-timespec_get-time64 \ + tst-y2039-time64 + include ../Rules ifeq ($(run-built-tests),yes) diff --git a/time/tst-adjtime-time64.c b/time/tst-adjtime-time64.c new file mode 100644 index 0000000000..097d6efc4b --- /dev/null +++ b/time/tst-adjtime-time64.c @@ -0,0 +1 @@ +#include diff --git a/time/tst-clock-time64.c b/time/tst-clock-time64.c new file mode 100644 index 0000000000..a1349678c8 --- /dev/null +++ b/time/tst-clock-time64.c @@ -0,0 +1 @@ +#include "tst-clock.c" diff --git a/time/tst-clock2-time64.c b/time/tst-clock2-time64.c new file mode 100644 index 0000000000..897f47b287 --- /dev/null +++ b/time/tst-clock2-time64.c @@ -0,0 +1 @@ +#include "tst-clock2.c" diff --git a/time/tst-clock_nanosleep-time64.c b/time/tst-clock_nanosleep-time64.c new file mode 100644 index 0000000000..c8638aa3d2 --- /dev/null +++ b/time/tst-clock_nanosleep-time64.c @@ -0,0 +1 @@ +#include "tst-clock_nanosleep.c" diff --git a/time/tst-cpuclock1-time64.c b/time/tst-cpuclock1-time64.c new file mode 100644 index 0000000000..5a7ffa27ac --- /dev/null +++ b/time/tst-cpuclock1-time64.c @@ -0,0 +1 @@ +#include "tst-cpuclock1.c" diff --git a/time/tst-ctime-time64.c b/time/tst-ctime-time64.c new file mode 100644 index 0000000000..24a5ae98ed --- /dev/null +++ b/time/tst-ctime-time64.c @@ -0,0 +1 @@ +#include "tst-ctime.c" diff --git a/time/tst-ctime.c b/time/tst-ctime.c index e89a906bf8..884d69bfa0 100644 --- a/time/tst-ctime.c +++ b/time/tst-ctime.c @@ -24,6 +24,7 @@ static int do_test (void) { char *str; + char strb[32]; time_t t; /* Use glibc time zone extension "TZ=:" to to guarantee that UTC @@ -36,11 +37,21 @@ do_test (void) str = ctime (&t); TEST_COMPARE_STRING (str, "Thu Jan 1 00:00:00 1970\n"); + /* Same as before but with ctime_r. */ + str = ctime_r (&t, strb); + TEST_VERIFY (str == strb); + TEST_COMPARE_STRING (str, "Thu Jan 1 00:00:00 1970\n"); + /* Check if the max time value for 32 bit time_t can be converted. */ t = 0x7fffffff; str = ctime (&t); TEST_COMPARE_STRING (str, "Tue Jan 19 03:14:07 2038\n"); + /* Same as before but with ctime_r. */ + str = ctime_r (&t, strb); + TEST_VERIFY (str == strb); + TEST_COMPARE_STRING (str, "Tue Jan 19 03:14:07 2038\n"); + /* Check if we run on port with 32 bit time_t size */ time_t tov; if (__builtin_add_overflow (t, 1, &tov)) @@ -50,6 +61,11 @@ do_test (void) str = ctime (&tov); TEST_COMPARE_STRING (str, "Tue Jan 19 03:14:08 2038\n"); + /* Same as before but with ctime_r. */ + str = ctime_r (&tov, strb); + TEST_VERIFY (str == strb); + TEST_COMPARE_STRING (str, "Tue Jan 19 03:14:08 2038\n"); + return 0; } diff --git a/time/tst-difftime-time64.c b/time/tst-difftime-time64.c new file mode 100644 index 0000000000..751ce6c483 --- /dev/null +++ b/time/tst-difftime-time64.c @@ -0,0 +1 @@ +#include "tst-difftime.c" diff --git a/time/tst-gmtime-time64.c b/time/tst-gmtime-time64.c new file mode 100644 index 0000000000..0df11c1913 --- /dev/null +++ b/time/tst-gmtime-time64.c @@ -0,0 +1 @@ +#include "tst-gmtime.c" diff --git a/time/tst-itimer-time64.c b/time/tst-itimer-time64.c new file mode 100644 index 0000000000..ddd2efa175 --- /dev/null +++ b/time/tst-itimer-time64.c @@ -0,0 +1 @@ +#include