1 /*
2 * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2015-2023 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9 #include "tests.h"
10 #include "scno.h"
11 #include "kernel_timeval.h"
12
13 #ifdef __NR_gettimeofday
14
15 # include <assert.h>
16 # include <stdio.h>
17 # include <stdint.h>
18 # include <unistd.h>
19 # include <sys/time.h>
20 # include "scno.h"
21
22 int
23 main(void)
24 {
25 TAIL_ALLOC_OBJECT_CONST_PTR(kernel_old_timeval_t, tv);
26 TAIL_ALLOC_OBJECT_CONST_PTR(struct timezone, tz);
27
28 if (syscall(__NR_gettimeofday, tv, NULL))
29 perror_msg_and_skip("gettimeofday");
30 printf("gettimeofday({tv_sec=%lld, tv_usec=%llu}, NULL) = 0\n",
31 (long long) tv->tv_sec,
32 zero_extend_signed_to_ull(tv->tv_usec));
33
34 if (syscall(__NR_gettimeofday, tv, tz))
35 perror_msg_and_skip("gettimeofday");
36 printf("gettimeofday({tv_sec=%lld, tv_usec=%llu}"
37 ", {tz_minuteswest=%d, tz_dsttime=%d}) = 0\n",
38 (long long) tv->tv_sec,
39 zero_extend_signed_to_ull(tv->tv_usec),
40 tz->tz_minuteswest, tz->tz_dsttime);
41
42 tv->tv_sec = -1;
43 tv->tv_usec = 1000000;
44 assert(syscall(__NR_settimeofday, tv, tz) == -1);
45 printf("settimeofday({tv_sec=%lld, tv_usec=%llu}"
46 ", {tz_minuteswest=%d, tz_dsttime=%d}) = %s\n",
47 (long long) tv->tv_sec,
48 zero_extend_signed_to_ull(tv->tv_usec),
49 tz->tz_minuteswest, tz->tz_dsttime, sprintrc(-1));
50
51 tv->tv_sec = 0xdeadbeefU;
52 tv->tv_usec = 0xfacefeedU;
53 assert(syscall(__NR_settimeofday, tv, tz) == -1);
54 printf("settimeofday({tv_sec=%lld, tv_usec=%llu}"
55 ", {tz_minuteswest=%d, tz_dsttime=%d}) = %s\n",
56 (long long) tv->tv_sec,
57 zero_extend_signed_to_ull(tv->tv_usec),
58 tz->tz_minuteswest, tz->tz_dsttime, sprintrc(-1));
59
60 tv->tv_sec = (typeof(tv->tv_sec)) 0xcafef00ddeadbeefLL;
61 tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
62 assert(syscall(__NR_settimeofday, tv, tz) == -1);
63 printf("settimeofday({tv_sec=%lld, tv_usec=%llu}"
64 ", {tz_minuteswest=%d, tz_dsttime=%d}) = %s\n",
65 (long long) tv->tv_sec,
66 zero_extend_signed_to_ull(tv->tv_usec),
67 tz->tz_minuteswest, tz->tz_dsttime, sprintrc(-1));
68
69 puts("+++ exited with 0 +++");
70 return 0;
71 }
72
73 #else
74
75 SKIP_MAIN_UNDEFINED("__NR_gettimeofday")
76
77 #endif /* __NR_gettimeofday */