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

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

Issue 601593002: Fix MSVC warnings in prtime.cc about potential value truncation by inserting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months 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 | no next file » | no next file with comments »
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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 // This is important, we want to make sure multiplications are 105 // This is important, we want to make sure multiplications are
106 // done with the correct precision. 106 // done with the correct precision.
107 static const PRTime kSecondsToMicroseconds = static_cast<PRTime>(1000000); 107 static const PRTime kSecondsToMicroseconds = static_cast<PRTime>(1000000);
108 #if defined(OS_WIN) 108 #if defined(OS_WIN)
109 // Create the system struct representing our exploded time. 109 // Create the system struct representing our exploded time.
110 SYSTEMTIME st = {0}; 110 SYSTEMTIME st = {0};
111 FILETIME ft = {0}; 111 FILETIME ft = {0};
112 ULARGE_INTEGER uli = {0}; 112 ULARGE_INTEGER uli = {0};
113 113
114 st.wYear = exploded->tm_year; 114 st.wYear = exploded->tm_year;
115 st.wMonth = exploded->tm_month + 1; 115 st.wMonth = static_cast<WORD>(exploded->tm_month + 1);
116 st.wDayOfWeek = exploded->tm_wday; 116 st.wDayOfWeek = exploded->tm_wday;
117 st.wDay = exploded->tm_mday; 117 st.wDay = static_cast<WORD>(exploded->tm_mday);
118 st.wHour = exploded->tm_hour; 118 st.wHour = static_cast<WORD>(exploded->tm_hour);
119 st.wMinute = exploded->tm_min; 119 st.wMinute = static_cast<WORD>(exploded->tm_min);
120 st.wSecond = exploded->tm_sec; 120 st.wSecond = static_cast<WORD>(exploded->tm_sec);
121 st.wMilliseconds = exploded->tm_usec/1000; 121 st.wMilliseconds = static_cast<WORD>(exploded->tm_usec/1000);
122 // Convert to FILETIME. 122 // Convert to FILETIME.
123 if (!SystemTimeToFileTime(&st, &ft)) { 123 if (!SystemTimeToFileTime(&st, &ft)) {
124 NOTREACHED() << "Unable to convert time"; 124 NOTREACHED() << "Unable to convert time";
125 return 0; 125 return 0;
126 } 126 }
127 // Apply offsets. 127 // Apply offsets.
128 uli.LowPart = ft.dwLowDateTime; 128 uli.LowPart = ft.dwLowDateTime;
129 uli.HighPart = ft.dwHighDateTime; 129 uli.HighPart = ft.dwHighDateTime;
130 // Convert from Windows epoch to NSPR epoch, and 100-nanoseconds units 130 // Convert from Windows epoch to NSPR epoch, and 100-nanoseconds units
131 // to microsecond units. 131 // to microsecond units.
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 time->tm_mday += time->tm_hour / 24; 373 time->tm_mday += time->tm_hour / 24;
374 time->tm_hour %= 24; 374 time->tm_hour %= 24;
375 if (time->tm_hour < 0) { 375 if (time->tm_hour < 0) {
376 time->tm_hour += 24; 376 time->tm_hour += 24;
377 time->tm_mday--; 377 time->tm_mday--;
378 } 378 }
379 } 379 }
380 380
381 /* Normalize month and year before mday */ 381 /* Normalize month and year before mday */
382 if (time->tm_month < 0 || time->tm_month >= 12) { 382 if (time->tm_month < 0 || time->tm_month >= 12) {
383 time->tm_year += time->tm_month / 12; 383 time->tm_year += static_cast<PRInt16>(time->tm_month / 12);
384 time->tm_month %= 12; 384 time->tm_month %= 12;
385 if (time->tm_month < 0) { 385 if (time->tm_month < 0) {
386 time->tm_month += 12; 386 time->tm_month += 12;
387 time->tm_year--; 387 time->tm_year--;
388 } 388 }
389 } 389 }
390 390
391 /* Now that month and year are in proper range, normalize mday */ 391 /* Now that month and year are in proper range, normalize mday */
392 392
393 if (time->tm_mday < 1) { 393 if (time->tm_mday < 1) {
(...skipping 15 matching lines...) Expand all
409 time->tm_month++; 409 time->tm_month++;
410 if (time->tm_month > 11) { 410 if (time->tm_month > 11) {
411 time->tm_month = 0; 411 time->tm_month = 0;
412 time->tm_year++; 412 time->tm_year++;
413 } 413 }
414 daysInMonth = nDays[IsLeapYear(time->tm_year)][time->tm_month]; 414 daysInMonth = nDays[IsLeapYear(time->tm_year)][time->tm_month];
415 } 415 }
416 } 416 }
417 417
418 /* Recompute yday and wday */ 418 /* Recompute yday and wday */
419 time->tm_yday = time->tm_mday + 419 time->tm_yday = static_cast<PRInt16>(time->tm_mday +
420 lastDayOfMonth[IsLeapYear(time->tm_year)][time->tm_month]; 420 lastDayOfMonth[IsLeapYear(time->tm_year)][time->tm_month]);
421 » 421
422 numDays = DAYS_BETWEEN_YEARS(1970, time->tm_year) + time->tm_yday; 422 numDays = DAYS_BETWEEN_YEARS(1970, time->tm_year) + time->tm_yday;
423 time->tm_wday = (numDays + 4) % 7; 423 time->tm_wday = (numDays + 4) % 7;
424 if (time->tm_wday < 0) { 424 if (time->tm_wday < 0) {
425 time->tm_wday += 7; 425 time->tm_wday += 7;
426 } 426 }
427 427
428 /* Recompute time parameters */ 428 /* Recompute time parameters */
429 429
430 time->tm_params = params(time); 430 time->tm_params = params(time);
431 431
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
1125 1125
1126 /* If we didn't find a year, month, or day-of-the-month, we can't 1126 /* If we didn't find a year, month, or day-of-the-month, we can't
1127 possibly parse this, and in fact, mktime() will do something random 1127 possibly parse this, and in fact, mktime() will do something random
1128 (I'm seeing it return "Tue Feb 5 06:28:16 2036", which is no doubt 1128 (I'm seeing it return "Tue Feb 5 06:28:16 2036", which is no doubt
1129 a numerologically significant date... */ 1129 a numerologically significant date... */
1130 if (month == TT_UNKNOWN || date == -1 || year == -1 || year > PR_INT16_MAX) 1130 if (month == TT_UNKNOWN || date == -1 || year == -1 || year > PR_INT16_MAX)
1131 return PR_FAILURE; 1131 return PR_FAILURE;
1132 1132
1133 memset(result, 0, sizeof(*result)); 1133 memset(result, 0, sizeof(*result));
1134 if (usec != -1) 1134 if (usec != -1)
1135 result->tm_usec = usec; 1135 result->tm_usec = usec;
1136 if (sec != -1) 1136 if (sec != -1)
1137 result->tm_sec = sec; 1137 result->tm_sec = sec;
1138 if (min != -1) 1138 if (min != -1)
1139 result->tm_min = min; 1139 result->tm_min = min;
1140 if (hour != -1) 1140 if (hour != -1)
1141 result->tm_hour = hour; 1141 result->tm_hour = hour;
1142 if (date != -1) 1142 if (date != -1)
1143 result->tm_mday = date; 1143 result->tm_mday = date;
1144 if (month != TT_UNKNOWN) 1144 if (month != TT_UNKNOWN)
1145 result->tm_month = (((int)month) - ((int)TT_JAN)); 1145 result->tm_month = (((int)month) - ((int)TT_JAN));
1146 if (year != -1) 1146 if (year != -1)
1147 result->tm_year = year; 1147 result->tm_year = static_cast<PRInt16>(year);
1148 if (dotw != TT_UNKNOWN) 1148 if (dotw != TT_UNKNOWN)
1149 result->tm_wday = (((int)dotw) - ((int)TT_SUN)); 1149 result->tm_wday = static_cast<PRInt8>(((int)dotw) - ((int)TT_SUN));
1150 /* 1150 /*
1151 * Mainly to compute wday and yday, but normalized time is also required 1151 * Mainly to compute wday and yday, but normalized time is also required
1152 * by the check below that works around a Visual C++ 2005 mktime problem. 1152 * by the check below that works around a Visual C++ 2005 mktime problem.
1153 */ 1153 */
1154 PR_NormalizeTime(result, PR_GMTParameters); 1154 PR_NormalizeTime(result, PR_GMTParameters);
1155 /* The remaining work is to set the gmt and dst offsets in tm_params. */ 1155 /* The remaining work is to set the gmt and dst offsets in tm_params. */
1156 1156
1157 if (zone == TT_UNKNOWN && default_to_gmt) 1157 if (zone == TT_UNKNOWN && default_to_gmt)
1158 { 1158 {
1159 /* No zone was specified, so pretend the zone was GMT. */ 1159 /* No zone was specified, so pretend the zone was GMT. */
(...skipping 12 matching lines...) Expand all
1172 result->tm_mday > 0 && 1172 result->tm_mday > 0 &&
1173 result->tm_hour > -1 && 1173 result->tm_hour > -1 &&
1174 result->tm_min > -1 && 1174 result->tm_min > -1 &&
1175 result->tm_sec > -1); 1175 result->tm_sec > -1);
1176 1176
1177 /* 1177 /*
1178 * To obtain time_t from a tm structure representing the local 1178 * To obtain time_t from a tm structure representing the local
1179 * time, we call mktime(). However, we need to see if we are 1179 * time, we call mktime(). However, we need to see if we are
1180 * on 1-Jan-1970 or before. If we are, we can't call mktime() 1180 * on 1-Jan-1970 or before. If we are, we can't call mktime()
1181 * because mktime() will crash on win16. In that case, we 1181 * because mktime() will crash on win16. In that case, we
1182 * calculate zone_offset based on the zone offset at 1182 * calculate zone_offset based on the zone offset at
1183 * 00:00:00, 2 Jan 1970 GMT, and subtract zone_offset from the 1183 * 00:00:00, 2 Jan 1970 GMT, and subtract zone_offset from the
1184 * date we are parsing to transform the date to GMT. We also 1184 * date we are parsing to transform the date to GMT. We also
1185 * do so if mktime() returns (time_t) -1 (time out of range). 1185 * do so if mktime() returns (time_t) -1 (time out of range).
1186 */ 1186 */
1187 1187
1188 /* month, day, hours, mins and secs are always non-negative 1188 /* month, day, hours, mins and secs are always non-negative
1189 so we dont need to worry about them. */ 1189 so we dont need to worry about them. */
1190 if (result->tm_year >= 1970) 1190 if (result->tm_year >= 1970)
1191 { 1191 {
1192 localTime.tm_sec = result->tm_sec; 1192 localTime.tm_sec = result->tm_sec;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 + 60 * localTime.tm_hour 1243 + 60 * localTime.tm_hour
1244 + 1440 * (localTime.tm_mday - 2); 1244 + 1440 * (localTime.tm_mday - 2);
1245 } 1245 }
1246 1246
1247 result->tm_params.tp_gmt_offset = zone_offset * 60; 1247 result->tm_params.tp_gmt_offset = zone_offset * 60;
1248 result->tm_params.tp_dst_offset = dst_offset * 60; 1248 result->tm_params.tp_dst_offset = dst_offset * 60;
1249 1249
1250 *result_imploded = PR_ImplodeTime(result); 1250 *result_imploded = PR_ImplodeTime(result);
1251 return PR_SUCCESS; 1251 return PR_SUCCESS;
1252 } 1252 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698