Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(982)

Side by Side Diff: base/third_party/nspr/prtime.cc

Issue 1494083005: Replaces deprecated CFGregorianDate with CFCalendar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moved mac include file Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/time/time_mac.cc » ('j') | base/time/time_mac.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Portions are Copyright (C) 2011 Google Inc */ 1 /* Portions are Copyright (C) 2011 Google Inc */
2 /* ***** BEGIN LICENSE BLOCK ***** 2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * 4 *
5 * The contents of this file are subject to the Mozilla Public License Version 5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with 6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at 7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/ 8 * http://www.mozilla.org/MPL/
9 * 9 *
10 * Software distributed under the License is distributed on an "AS IS" basis, 10 * Software distributed under the License is distributed on an "AS IS" basis,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 */ 66 */
67 67
68 #include "base/logging.h" 68 #include "base/logging.h"
69 #include "base/third_party/nspr/prtime.h" 69 #include "base/third_party/nspr/prtime.h"
70 #include "build/build_config.h" 70 #include "build/build_config.h"
71 71
72 #if defined(OS_WIN) 72 #if defined(OS_WIN)
73 #include <windows.h> 73 #include <windows.h>
74 #elif defined(OS_MACOSX) 74 #elif defined(OS_MACOSX)
75 #include <CoreFoundation/CoreFoundation.h> 75 #include <CoreFoundation/CoreFoundation.h>
76 #include "base/mac/scoped_cftyperef.h"
76 #elif defined(OS_ANDROID) 77 #elif defined(OS_ANDROID)
77 #include <ctype.h> 78 #include <ctype.h>
78 #include "base/os_compat_android.h" // For timegm() 79 #include "base/os_compat_android.h" // For timegm()
79 #elif defined(OS_NACL) 80 #elif defined(OS_NACL)
80 #include "base/os_compat_nacl.h" // For timegm() 81 #include "base/os_compat_nacl.h" // For timegm()
81 #endif 82 #endif
82 #include <errno.h> /* for EINVAL */ 83 #include <errno.h> /* for EINVAL */
83 #include <time.h> 84 #include <time.h>
84 85
85 /* Implements the Unix localtime_r() function for windows */ 86 /* Implements the Unix localtime_r() function for windows */
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 // to microsecond units. 132 // to microsecond units.
132 PRTime result = 133 PRTime result =
133 static_cast<PRTime>((uli.QuadPart / 10) - 11644473600000000i64); 134 static_cast<PRTime>((uli.QuadPart / 10) - 11644473600000000i64);
134 // Adjust for time zone and dst. Convert from seconds to microseconds. 135 // Adjust for time zone and dst. Convert from seconds to microseconds.
135 result -= (exploded->tm_params.tp_gmt_offset + 136 result -= (exploded->tm_params.tp_gmt_offset +
136 exploded->tm_params.tp_dst_offset) * kSecondsToMicroseconds; 137 exploded->tm_params.tp_dst_offset) * kSecondsToMicroseconds;
137 // Add microseconds that cannot be represented in |st|. 138 // Add microseconds that cannot be represented in |st|.
138 result += exploded->tm_usec % 1000; 139 result += exploded->tm_usec % 1000;
139 return result; 140 return result;
140 #elif defined(OS_MACOSX) 141 #elif defined(OS_MACOSX)
141 // Create the system struct representing our exploded time.
142 CFGregorianDate gregorian_date;
143 gregorian_date.year = exploded->tm_year;
144 gregorian_date.month = exploded->tm_month + 1;
145 gregorian_date.day = exploded->tm_mday;
146 gregorian_date.hour = exploded->tm_hour;
147 gregorian_date.minute = exploded->tm_min;
148 gregorian_date.second = exploded->tm_sec;
149
150 // Compute |absolute_time| in seconds, correct for gmt and dst 142 // Compute |absolute_time| in seconds, correct for gmt and dst
151 // (note the combined offset will be negative when we need to add it), then 143 // (note the combined offset will be negative when we need to add it), then
152 // convert to microseconds which is what PRTime expects. 144 // convert to microseconds which is what PRTime expects.
153 CFAbsoluteTime absolute_time = 145 base::ScopedCFTypeRef<CFCalendarRef> gregorian(
154 CFGregorianDateGetAbsoluteTime(gregorian_date, NULL); 146 CFCalendarCreateWithIdentifier(kCFAllocatorDefault,
147 kCFGregorianCalendar));
148 base::ScopedCFTypeRef<CFTimeZoneRef> time_zone(
149 CFTimeZoneCreateWithTimeIntervalFromGMT(kCFAllocatorDefault, 0));
150 CFCalendarSetTimeZone(gregorian, time_zone);
151 CFAbsoluteTime absolute_time;
152 CFCalendarComposeAbsoluteTime(gregorian, &absolute_time, "yMdHms",
153 static_cast<int>(exploded->tm_year),
154 static_cast<int>(exploded->tm_month + 1),
155 static_cast<int>(exploded->tm_mday),
156 static_cast<int>(exploded->tm_hour),
157 static_cast<int>(exploded->tm_min),
Nico 2015/12/04 20:18:59 I looked at upstream NSPR to see if they have this
pkl (ping after 24h if needed) 2016/02/03 06:42:31 This change has been moved to https://codereview.c
158 static_cast<int>(exploded->tm_sec));
155 PRTime result = static_cast<PRTime>(absolute_time); 159 PRTime result = static_cast<PRTime>(absolute_time);
156 result -= exploded->tm_params.tp_gmt_offset + 160 result -= exploded->tm_params.tp_gmt_offset +
157 exploded->tm_params.tp_dst_offset; 161 exploded->tm_params.tp_dst_offset;
158 result += kCFAbsoluteTimeIntervalSince1970; // PRTime epoch is 1970 162 result += kCFAbsoluteTimeIntervalSince1970; // PRTime epoch is 1970
159 result *= kSecondsToMicroseconds; 163 result *= kSecondsToMicroseconds;
160 result += exploded->tm_usec; 164 result += exploded->tm_usec;
161 return result; 165 return result;
162 #elif defined(OS_POSIX) 166 #elif defined(OS_POSIX)
163 struct tm exp_tm = {0}; 167 struct tm exp_tm = {0};
164 exp_tm.tm_sec = exploded->tm_sec; 168 exp_tm.tm_sec = exploded->tm_sec;
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 + 60 * localTime.tm_hour 1247 + 60 * localTime.tm_hour
1244 + 1440 * (localTime.tm_mday - 2); 1248 + 1440 * (localTime.tm_mday - 2);
1245 } 1249 }
1246 1250
1247 result->tm_params.tp_gmt_offset = zone_offset * 60; 1251 result->tm_params.tp_gmt_offset = zone_offset * 60;
1248 result->tm_params.tp_dst_offset = dst_offset * 60; 1252 result->tm_params.tp_dst_offset = dst_offset * 60;
1249 1253
1250 *result_imploded = PR_ImplodeTime(result); 1254 *result_imploded = PR_ImplodeTime(result);
1251 return PR_SUCCESS; 1255 return PR_SUCCESS;
1252 } 1256 }
OLDNEW
« no previous file with comments | « no previous file | base/time/time_mac.cc » ('j') | base/time/time_mac.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698