/src/mozilla-central/security/pkix/lib/pkixtime.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | | /* This code is made available to you under your choice of the following sets |
4 | | * of licensing terms: |
5 | | */ |
6 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
7 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
8 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
9 | | */ |
10 | | /* Copyright 2014 Mozilla Contributors |
11 | | * |
12 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
13 | | * you may not use this file except in compliance with the License. |
14 | | * You may obtain a copy of the License at |
15 | | * |
16 | | * http://www.apache.org/licenses/LICENSE-2.0 |
17 | | * |
18 | | * Unless required by applicable law or agreed to in writing, software |
19 | | * distributed under the License is distributed on an "AS IS" BASIS, |
20 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
21 | | * See the License for the specific language governing permissions and |
22 | | * limitations under the License. |
23 | | */ |
24 | | |
25 | | #include "pkix/Time.h" |
26 | | #include "pkixutil.h" |
27 | | |
28 | | #ifdef WIN32 |
29 | | #ifdef _MSC_VER |
30 | | #pragma warning(push, 3) |
31 | | #endif |
32 | | #include "windows.h" |
33 | | #ifdef _MSC_VER |
34 | | #pragma warning(pop) |
35 | | #endif |
36 | | #else |
37 | | #include "sys/time.h" |
38 | | #endif |
39 | | |
40 | | namespace mozilla { namespace pkix { |
41 | | |
42 | | Time |
43 | | Now() |
44 | 0 | { |
45 | 0 | uint64_t seconds; |
46 | 0 |
|
47 | | #ifdef WIN32 |
48 | | // "Contains a 64-bit value representing the number of 100-nanosecond |
49 | | // intervals since January 1, 1601 (UTC)." |
50 | | // - http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx |
51 | | FILETIME ft; |
52 | | GetSystemTimeAsFileTime(&ft); |
53 | | uint64_t ft64 = (static_cast<uint64_t>(ft.dwHighDateTime) << 32) | |
54 | | ft.dwLowDateTime; |
55 | | seconds = (DaysBeforeYear(1601) * Time::ONE_DAY_IN_SECONDS) + |
56 | | ft64 / (1000u * 1000u * 1000u / 100u); |
57 | | #else |
58 | | // "The gettimeofday() function shall obtain the current time, expressed as |
59 | 0 | // seconds and microseconds since the Epoch." |
60 | 0 | // - http://pubs.opengroup.org/onlinepubs/009695399/functions/gettimeofday.html |
61 | 0 | timeval tv; |
62 | 0 | (void) gettimeofday(&tv, nullptr); |
63 | 0 | seconds = (DaysBeforeYear(1970) * Time::ONE_DAY_IN_SECONDS) + |
64 | 0 | static_cast<uint64_t>(tv.tv_sec); |
65 | 0 | #endif |
66 | 0 |
|
67 | 0 | return TimeFromElapsedSecondsAD(seconds); |
68 | 0 | } |
69 | | |
70 | | Time |
71 | | TimeFromEpochInSeconds(uint64_t secondsSinceEpoch) |
72 | 0 | { |
73 | 0 | uint64_t seconds = (DaysBeforeYear(1970) * Time::ONE_DAY_IN_SECONDS) + |
74 | 0 | secondsSinceEpoch; |
75 | 0 | return TimeFromElapsedSecondsAD(seconds); |
76 | 0 | } |
77 | | |
78 | | } } // namespace mozilla::pkix |