Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/base/build_time.h" | |
| 6 | |
| 7 #include <stdlib.h> | |
| 8 #include <string.h> | |
| 9 | |
| 10 #include "base/logging.h" | |
| 11 #include "base/time.h" | |
| 12 | |
| 13 namespace net { | |
| 14 | |
| 15 int GetDaysSinceBuild() { | |
| 16 // The format of __DATE__ is specified by the ANSI C Standard, section 6.8.8. | |
| 17 // It is exactly "Mth DD YYYY". | |
|
wtc
2011/11/08 19:43:40
Nit: Mth => Mmm ?
Mth seems to suggest that we sh
| |
| 18 char build_date[] = __DATE__; | |
| 19 | |
| 20 // We can't use strptime because strptime will use the current locale, while | |
| 21 // the format of __DATE__ is locale independent. | |
| 22 static const char kMonths[12][4] = { | |
| 23 "Jan", "Feb", "Mar", "Apr", "May", "Jun", | |
| 24 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | |
| 25 }; | |
| 26 | |
| 27 build_date[3] = 0; | |
| 28 build_date[6] = 0; | |
|
wtc
2011/11/08 19:43:40
Nit: use '\0' instead of 0 in these two assignment
| |
| 29 int year = atoi(&build_date[7]); | |
| 30 DCHECK_GE(year, 2011); | |
| 31 DCHECK_LT(year, 3000); | |
| 32 | |
| 33 int day = atoi(&build_date[4]); | |
| 34 DCHECK_GE(day, 1); | |
| 35 DCHECK_LT(day, 32); | |
| 36 int month; | |
| 37 | |
| 38 for (month = 1; month <= 12; month++) { | |
| 39 if (memcmp(build_date, kMonths[month - 1], 3) == 0) { | |
| 40 break; | |
| 41 } | |
| 42 } | |
| 43 DCHECK_GE(month, 1); | |
| 44 DCHECK_LT(month, 13); | |
| 45 | |
| 46 base::Time::Exploded build_time_exploded; | |
| 47 build_time_exploded.year = year; | |
| 48 build_time_exploded.month = month; | |
| 49 build_time_exploded.day_of_week = 0; | |
| 50 build_time_exploded.day_of_month = day; | |
| 51 build_time_exploded.hour = 22; // 2PM PST | |
| 52 build_time_exploded.minute = 0; | |
| 53 build_time_exploded.second = 0; | |
| 54 build_time_exploded.millisecond = 0; | |
| 55 | |
| 56 const base::Time build_time = | |
| 57 base::Time::FromUTCExploded(build_time_exploded); | |
| 58 const base::Time now = base::Time::Now(); | |
| 59 if (now < build_time) { | |
| 60 // System clock is wrong or we built today. | |
| 61 return 0; | |
| 62 } | |
| 63 const base::TimeDelta delta = now - build_time; | |
| 64 return delta.InDays(); | |
| 65 } | |
| 66 | |
| 67 } // namespace net | |
| 68 | |
| OLD | NEW |