bits/syscall.h: add landlock syscalls from linux v5.13
[musl.git] / src / time / __year_to_secs.c
blob2824ec6dcc80dc4e328b8aafb5268867b5b67147
1 long long __year_to_secs(long long year, int *is_leap)
3 if (year-2ULL <= 136) {
4 int y = year;
5 int leaps = (y-68)>>2;
6 if (!((y-68)&3)) {
7 leaps--;
8 if (is_leap) *is_leap = 1;
9 } else if (is_leap) *is_leap = 0;
10 return 31536000*(y-70) + 86400*leaps;
13 int cycles, centuries, leaps, rem;
15 if (!is_leap) is_leap = &(int){0};
16 cycles = (year-100) / 400;
17 rem = (year-100) % 400;
18 if (rem < 0) {
19 cycles--;
20 rem += 400;
22 if (!rem) {
23 *is_leap = 1;
24 centuries = 0;
25 leaps = 0;
26 } else {
27 if (rem >= 200) {
28 if (rem >= 300) centuries = 3, rem -= 300;
29 else centuries = 2, rem -= 200;
30 } else {
31 if (rem >= 100) centuries = 1, rem -= 100;
32 else centuries = 0;
34 if (!rem) {
35 *is_leap = 0;
36 leaps = 0;
37 } else {
38 leaps = rem / 4U;
39 rem %= 4U;
40 *is_leap = !rem;
44 leaps += 97*cycles + 24*centuries - *is_leap;
46 return (year-100) * 31536000LL + leaps * 86400LL + 946684800 + 86400;