| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include "webrtc/base/win32.h" | 11 #include "webrtc/base/win32.h" |
| 12 | 12 |
| 13 #include <winsock2.h> | 13 #include <winsock2.h> |
| 14 #include <ws2tcpip.h> | 14 #include <ws2tcpip.h> |
| 15 #include <algorithm> | 15 #include <algorithm> |
| 16 | 16 |
| 17 #include "webrtc/base/arraysize.h" | 17 #include "webrtc/base/arraysize.h" |
| 18 #include "webrtc/base/basictypes.h" | 18 #include "webrtc/base/basictypes.h" |
| 19 #include "webrtc/base/byteorder.h" | 19 #include "webrtc/base/byteorder.h" |
| 20 #include "webrtc/base/checks.h" |
| 20 #include "webrtc/base/common.h" | 21 #include "webrtc/base/common.h" |
| 21 #include "webrtc/base/logging.h" | 22 #include "webrtc/base/logging.h" |
| 22 | 23 |
| 23 namespace rtc { | 24 namespace rtc { |
| 24 | 25 |
| 25 // Helper function declarations for inet_ntop/inet_pton. | 26 // Helper function declarations for inet_ntop/inet_pton. |
| 26 static const char* inet_ntop_v4(const void* src, char* dst, socklen_t size); | 27 static const char* inet_ntop_v4(const void* src, char* dst, socklen_t size); |
| 27 static const char* inet_ntop_v6(const void* src, char* dst, socklen_t size); | 28 static const char* inet_ntop_v6(const void* src, char* dst, socklen_t size); |
| 28 static int inet_pton_v4(const char* src, void* dst); | 29 static int inet_pton_v4(const char* src, void* dst); |
| 29 static int inet_pton_v6(const char* src, void* dst); | 30 static int inet_pton_v6(const char* src, void* dst); |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 // FILETIME of that time/date, then we add/subtract in appropriate units to | 312 // FILETIME of that time/date, then we add/subtract in appropriate units to |
| 312 // convert to/from unix time. | 313 // convert to/from unix time. |
| 313 // The units of FILETIME are 100ns intervals, so by multiplying by or dividing | 314 // The units of FILETIME are 100ns intervals, so by multiplying by or dividing |
| 314 // by 10000000, we can convert to/from seconds. | 315 // by 10000000, we can convert to/from seconds. |
| 315 // | 316 // |
| 316 // FileTime = UnixTime*10000000 + FileTime(1970) | 317 // FileTime = UnixTime*10000000 + FileTime(1970) |
| 317 // UnixTime = (FileTime-FileTime(1970))/10000000 | 318 // UnixTime = (FileTime-FileTime(1970))/10000000 |
| 318 // | 319 // |
| 319 | 320 |
| 320 void FileTimeToUnixTime(const FILETIME& ft, time_t* ut) { | 321 void FileTimeToUnixTime(const FILETIME& ft, time_t* ut) { |
| 321 ASSERT(NULL != ut); | 322 RTC_DCHECK(NULL != ut); |
| 322 | 323 |
| 323 // FILETIME has an earlier date base than time_t (1/1/1970), so subtract off | 324 // FILETIME has an earlier date base than time_t (1/1/1970), so subtract off |
| 324 // the difference. | 325 // the difference. |
| 325 SYSTEMTIME base_st; | 326 SYSTEMTIME base_st; |
| 326 memset(&base_st, 0, sizeof(base_st)); | 327 memset(&base_st, 0, sizeof(base_st)); |
| 327 base_st.wDay = 1; | 328 base_st.wDay = 1; |
| 328 base_st.wMonth = 1; | 329 base_st.wMonth = 1; |
| 329 base_st.wYear = 1970; | 330 base_st.wYear = 1970; |
| 330 | 331 |
| 331 FILETIME base_ft; | 332 FILETIME base_ft; |
| 332 SystemTimeToFileTime(&base_st, &base_ft); | 333 SystemTimeToFileTime(&base_st, &base_ft); |
| 333 | 334 |
| 334 ULARGE_INTEGER base_ul, current_ul; | 335 ULARGE_INTEGER base_ul, current_ul; |
| 335 memcpy(&base_ul, &base_ft, sizeof(FILETIME)); | 336 memcpy(&base_ul, &base_ft, sizeof(FILETIME)); |
| 336 memcpy(¤t_ul, &ft, sizeof(FILETIME)); | 337 memcpy(¤t_ul, &ft, sizeof(FILETIME)); |
| 337 | 338 |
| 338 // Divide by big number to convert to seconds, then subtract out the 1970 | 339 // Divide by big number to convert to seconds, then subtract out the 1970 |
| 339 // base date value. | 340 // base date value. |
| 340 const ULONGLONG RATIO = 10000000; | 341 const ULONGLONG RATIO = 10000000; |
| 341 *ut = static_cast<time_t>((current_ul.QuadPart - base_ul.QuadPart) / RATIO); | 342 *ut = static_cast<time_t>((current_ul.QuadPart - base_ul.QuadPart) / RATIO); |
| 342 } | 343 } |
| 343 | 344 |
| 344 void UnixTimeToFileTime(const time_t& ut, FILETIME* ft) { | 345 void UnixTimeToFileTime(const time_t& ut, FILETIME* ft) { |
| 345 ASSERT(NULL != ft); | 346 RTC_DCHECK(NULL != ft); |
| 346 | 347 |
| 347 // FILETIME has an earlier date base than time_t (1/1/1970), so add in | 348 // FILETIME has an earlier date base than time_t (1/1/1970), so add in |
| 348 // the difference. | 349 // the difference. |
| 349 SYSTEMTIME base_st; | 350 SYSTEMTIME base_st; |
| 350 memset(&base_st, 0, sizeof(base_st)); | 351 memset(&base_st, 0, sizeof(base_st)); |
| 351 base_st.wDay = 1; | 352 base_st.wDay = 1; |
| 352 base_st.wMonth = 1; | 353 base_st.wMonth = 1; |
| 353 base_st.wYear = 1970; | 354 base_st.wYear = 1970; |
| 354 | 355 |
| 355 FILETIME base_ft; | 356 FILETIME base_ft; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 wchar_t* start = full_filename + 6; | 398 wchar_t* start = full_filename + 6; |
| 398 if (0 == ::GetFullPathName(wfilename, full_len, start, &filepart)) { | 399 if (0 == ::GetFullPathName(wfilename, full_len, start, &filepart)) { |
| 399 return false; | 400 return false; |
| 400 } | 401 } |
| 401 // Add long-path prefix | 402 // Add long-path prefix |
| 402 const wchar_t kLongPathPrefix[] = L"\\\\?\\UNC"; | 403 const wchar_t kLongPathPrefix[] = L"\\\\?\\UNC"; |
| 403 if ((start[0] != L'\\') || (start[1] != L'\\')) { | 404 if ((start[0] != L'\\') || (start[1] != L'\\')) { |
| 404 // Non-unc path: <pathname> | 405 // Non-unc path: <pathname> |
| 405 // Becomes: \\?\<pathname> | 406 // Becomes: \\?\<pathname> |
| 406 start -= 4; | 407 start -= 4; |
| 407 ASSERT(start >= full_filename); | 408 RTC_DCHECK(start >= full_filename); |
| 408 memcpy(start, kLongPathPrefix, 4 * sizeof(wchar_t)); | 409 memcpy(start, kLongPathPrefix, 4 * sizeof(wchar_t)); |
| 409 } else if (start[2] != L'?') { | 410 } else if (start[2] != L'?') { |
| 410 // Unc path: \\<server>\<pathname> | 411 // Unc path: \\<server>\<pathname> |
| 411 // Becomes: \\?\UNC\<server>\<pathname> | 412 // Becomes: \\?\UNC\<server>\<pathname> |
| 412 start -= 6; | 413 start -= 6; |
| 413 ASSERT(start >= full_filename); | 414 RTC_DCHECK(start >= full_filename); |
| 414 memcpy(start, kLongPathPrefix, 7 * sizeof(wchar_t)); | 415 memcpy(start, kLongPathPrefix, 7 * sizeof(wchar_t)); |
| 415 } else { | 416 } else { |
| 416 // Already in long-path form. | 417 // Already in long-path form. |
| 417 } | 418 } |
| 418 filename->assign(start); | 419 filename->assign(start); |
| 419 return true; | 420 return true; |
| 420 } | 421 } |
| 421 | 422 |
| 422 bool GetOsVersion(int* major, int* minor, int* build) { | 423 bool GetOsVersion(int* major, int* minor, int* build) { |
| 423 OSVERSIONINFO info = {0}; | 424 OSVERSIONINFO info = {0}; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 448 *level = *GetSidSubAuthority(til->Label.Sid, count - 1); | 449 *level = *GetSidSubAuthority(til->Label.Sid, count - 1); |
| 449 ret = true; | 450 ret = true; |
| 450 } | 451 } |
| 451 } | 452 } |
| 452 CloseHandle(token); | 453 CloseHandle(token); |
| 453 } | 454 } |
| 454 return ret; | 455 return ret; |
| 455 } | 456 } |
| 456 | 457 |
| 457 } // namespace rtc | 458 } // namespace rtc |
| OLD | NEW |