| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_OS_WINDOWS) | 6 #if defined(TARGET_OS_WINDOWS) |
| 7 | 7 |
| 8 #include "vm/os.h" | 8 #include "vm/os.h" |
| 9 | 9 |
| 10 #include <malloc.h> // NOLINT | 10 #include <malloc.h> // NOLINT |
| 11 #include <process.h> // NOLINT | 11 #include <process.h> // NOLINT |
| 12 #include <psapi.h> // NOLINT | 12 #include <psapi.h> // NOLINT |
| 13 #include <time.h> // NOLINT | 13 #include <time.h> // NOLINT |
| 14 | 14 |
| 15 #include "platform/utils.h" | 15 #include "platform/utils.h" |
| 16 #include "platform/assert.h" | 16 #include "platform/assert.h" |
| 17 #include "vm/os_thread.h" | 17 #include "vm/os_thread.h" |
| 18 #include "vm/zone.h" | 18 #include "vm/zone.h" |
| 19 | 19 |
| 20 namespace dart { | 20 namespace dart { |
| 21 | 21 |
| 22 // Defined in vm/os_thread_win.cc | 22 // Defined in vm/os_thread_win.cc |
| 23 extern bool private_flag_windows_run_tls_destructors; | 23 extern bool private_flag_windows_run_tls_destructors; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // Figure out whether we're in standard or daylight. | 72 // Figure out whether we're in standard or daylight. |
| 73 bool daylight_savings = (status == TIME_ZONE_ID_DAYLIGHT); | 73 bool daylight_savings = (status == TIME_ZONE_ID_DAYLIGHT); |
| 74 if (status == TIME_ZONE_ID_UNKNOWN) { | 74 if (status == TIME_ZONE_ID_UNKNOWN) { |
| 75 tm local_time; | 75 tm local_time; |
| 76 if (LocalTime(seconds_since_epoch, &local_time)) { | 76 if (LocalTime(seconds_since_epoch, &local_time)) { |
| 77 daylight_savings = (local_time.tm_isdst == 1); | 77 daylight_savings = (local_time.tm_isdst == 1); |
| 78 } | 78 } |
| 79 } | 79 } |
| 80 | 80 |
| 81 // Convert the wchar string to a null-terminated utf8 string. | 81 // Convert the wchar string to a null-terminated utf8 string. |
| 82 wchar_t* wchar_name = daylight_savings | 82 wchar_t* wchar_name = daylight_savings ? zone_information.DaylightName |
| 83 ? zone_information.DaylightName | 83 : zone_information.StandardName; |
| 84 : zone_information.StandardName; | 84 intptr_t utf8_len = |
| 85 intptr_t utf8_len = WideCharToMultiByte( | 85 WideCharToMultiByte(CP_UTF8, 0, wchar_name, -1, NULL, 0, NULL, NULL); |
| 86 CP_UTF8, 0, wchar_name, -1, NULL, 0, NULL, NULL); | |
| 87 char* name = Thread::Current()->zone()->Alloc<char>(utf8_len + 1); | 86 char* name = Thread::Current()->zone()->Alloc<char>(utf8_len + 1); |
| 88 WideCharToMultiByte( | 87 WideCharToMultiByte(CP_UTF8, 0, wchar_name, -1, name, utf8_len, NULL, NULL); |
| 89 CP_UTF8, 0, wchar_name, -1, name, utf8_len, NULL, NULL); | |
| 90 name[utf8_len] = '\0'; | 88 name[utf8_len] = '\0'; |
| 91 return name; | 89 return name; |
| 92 } | 90 } |
| 93 | 91 |
| 94 | 92 |
| 95 int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) { | 93 int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) { |
| 96 tm decomposed; | 94 tm decomposed; |
| 97 // LocalTime will set _timezone. | 95 // LocalTime will set _timezone. |
| 98 bool succeeded = LocalTime(seconds_since_epoch, &decomposed); | 96 bool succeeded = LocalTime(seconds_since_epoch, &decomposed); |
| 99 if (succeeded) { | 97 if (succeeded) { |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 | 368 |
| 371 | 369 |
| 372 bool OS::StringToInt64(const char* str, int64_t* value) { | 370 bool OS::StringToInt64(const char* str, int64_t* value) { |
| 373 ASSERT(str != NULL && strlen(str) > 0 && value != NULL); | 371 ASSERT(str != NULL && strlen(str) > 0 && value != NULL); |
| 374 int32_t base = 10; | 372 int32_t base = 10; |
| 375 char* endptr; | 373 char* endptr; |
| 376 int i = 0; | 374 int i = 0; |
| 377 if (str[0] == '-') { | 375 if (str[0] == '-') { |
| 378 i = 1; | 376 i = 1; |
| 379 } | 377 } |
| 380 if ((str[i] == '0') && | 378 if ((str[i] == '0') && (str[i + 1] == 'x' || str[i + 1] == 'X') && |
| 381 (str[i + 1] == 'x' || str[i + 1] == 'X') && | |
| 382 (str[i + 2] != '\0')) { | 379 (str[i + 2] != '\0')) { |
| 383 base = 16; | 380 base = 16; |
| 384 } | 381 } |
| 385 errno = 0; | 382 errno = 0; |
| 386 *value = _strtoi64(str, &endptr, base); | 383 *value = _strtoi64(str, &endptr, base); |
| 387 return ((errno == 0) && (endptr != str) && (*endptr == 0)); | 384 return ((errno == 0) && (endptr != str) && (*endptr == 0)); |
| 388 } | 385 } |
| 389 | 386 |
| 390 | 387 |
| 391 void OS::RegisterCodeObservers() { | 388 void OS::RegisterCodeObservers() {} |
| 392 } | |
| 393 | 389 |
| 394 | 390 |
| 395 void OS::PrintErr(const char* format, ...) { | 391 void OS::PrintErr(const char* format, ...) { |
| 396 va_list args; | 392 va_list args; |
| 397 va_start(args, format); | 393 va_start(args, format); |
| 398 VFPrint(stderr, format, args); | 394 VFPrint(stderr, format, args); |
| 399 va_end(args); | 395 va_end(args); |
| 400 } | 396 } |
| 401 | 397 |
| 402 | 398 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 // TODO(zra): Remove once VM shuts down cleanly. | 434 // TODO(zra): Remove once VM shuts down cleanly. |
| 439 private_flag_windows_run_tls_destructors = false; | 435 private_flag_windows_run_tls_destructors = false; |
| 440 // On Windows we use ExitProcess so that threads can't clobber the exit_code. | 436 // On Windows we use ExitProcess so that threads can't clobber the exit_code. |
| 441 // See: https://code.google.com/p/nativeclient/issues/detail?id=2870 | 437 // See: https://code.google.com/p/nativeclient/issues/detail?id=2870 |
| 442 ::ExitProcess(code); | 438 ::ExitProcess(code); |
| 443 } | 439 } |
| 444 | 440 |
| 445 } // namespace dart | 441 } // namespace dart |
| 446 | 442 |
| 447 #endif // defined(TARGET_OS_WINDOWS) | 443 #endif // defined(TARGET_OS_WINDOWS) |
| OLD | NEW |