Changeset 38443 for lang/c/NetworkUpdater/trunk/Build/Copy.cpp
- Timestamp:
- 09/09/10 01:18:46 (3 years ago)
- Files:
-
- 1 modified
-
lang/c/NetworkUpdater/trunk/Build/Copy.cpp (modified) (42 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/c/NetworkUpdater/trunk/Build/Copy.cpp
r38442 r38443 85 85 int complete; 86 86 int exit; 87 Data() {88 memset(this, 0, sizeof(*this));89 }90 87 }; 91 88 Handle mutex; … … 96 93 SharedMemory& sharedMemory; 97 94 public: 98 Locker(SharedMemory& sharedMemory_) : sharedMemory(sharedMemory_) {95 Locker(SharedMemory& sharedMemory_) : sharedMemory(sharedMemory_) { 99 96 sharedMemory.lock(); 100 97 } … … 103 100 } 104 101 }; 102 105 103 void lock() { 106 104 WaitForSingleObject(mutex, WAIT_LIMIT); … … 109 107 ReleaseMutex(mutex); 110 108 } 111 SharedMemory() { 112 size_t i = 0; 113 size_t len = 0; 114 115 len = GetCurrentDirectory(0, NULL); 109 SharedMemory() : mutex(NULL), map(NULL) { 110 size_t len = GetCurrentDirectory(0, NULL); 116 111 String<> name(len); 117 112 if (!name) { … … 121 116 GetCurrentDirectory(len, name); 122 117 Log(_T("cd=%s"), (TCHAR*)name); 123 for ( i = 0; i + 1 < len; ++i) {118 for (size_t i = 0; i + 1 < len; ++i) { 124 119 if (!IsCharAlphaNumeric(name[i])) { 125 120 name[i] = _T('.'); … … 128 123 name[0] = _T('M'); 129 124 Log(_T("mapping name=%s"), static_cast<TCHAR*>(name)); 130 125 131 126 map = CreateFileMapping( 132 INVALID_HANDLE_VALUE,133 NULL,134 PAGE_READWRITE,135 0,136 1024,137 name);127 INVALID_HANDLE_VALUE, 128 NULL, 129 PAGE_READWRITE, 130 0, 131 1024, 132 name); 138 133 139 134 name[0] = _T('X'); … … 146 141 147 142 Data read() { 148 Data data; 149 memset(&data, 0, sizeof(data)); 143 Data data = {}; 150 144 Data* r = (Data*)MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0); 151 145 if (r) { 152 data = *r;146 data = *r; 153 147 UnmapViewOfFile(r); 154 148 } … … 159 153 Data* w = (Data*)MapViewOfFile(map, FILE_MAP_WRITE, 0, 0, 0); 160 154 if (w) { 161 *w = data;155 *w = data; 162 156 UnmapViewOfFile(w); 163 157 } … … 167 161 TCHAR* PathAppendDup(const TCHAR* base, const TCHAR* append) 168 162 { 169 TCHAR* result = NULL; 170 size_t result_len = 0; 171 172 result_len = lstrlen(base) + 1 + lstrlen(append) + 1; 163 size_t result_len = lstrlen(base) + 1 + lstrlen(append) + 1; 173 164 if (result_len <= MAX_PATH + 1) { 174 165 result_len = MAX_PATH + 1; 175 166 } 176 result = (TCHAR*)calloc(result_len * sizeof(TCHAR), 1); 167 168 TCHAR* result = (TCHAR*)calloc(result_len * sizeof(TCHAR), 1); 177 169 if (!result) { 178 170 return NULL; … … 208 200 } 209 201 } else if (message == WM_TIMER) { 210 SharedMemory::Data m; 202 SharedMemory::Data m; 211 203 { 212 204 SharedMemory::Locker locker(*data->shared); … … 229 221 ++data->rest; 230 222 } 231 223 232 224 if (!data->progress_complete) { 233 225 /* step progress bar */ 234 226 if ((m.complete && data->count >= m.copyed) 235 || data->count >= data->thread.num_files) {227 || data->count >= data->thread.num_files) { 236 228 /* num_files is unreliable but PBM_SETRANGE == (0, num_files) */ 237 229 … … 239 231 InvalidateRect(hWnd, NULL, FALSE); 240 232 241 Log(L"Progress Complete: complete=%d,count=%d,copyed=%d,num_files=%d", 242 m.complete,243 data->count,244 m.copyed,245 data->thread.num_files);233 Log(L"Progress Complete: complete=%d,count=%d,copyed=%d,num_files=%d", 234 m.complete, 235 data->count, 236 m.copyed, 237 data->thread.num_files); 246 238 } 247 239 data->count = m.copyed; … … 277 269 WNDCLASSEX wc; 278 270 HMONITOR monitor = NULL; 279 POINT monitor_point = { 0, 0};271 POINT monitor_point = {}; 280 272 SharedMemory shared; 281 ProgressWindowData data; 282 memset(&data, 0, sizeof(data)); 273 ProgressWindowData data = {}; 283 274 data.shared = &shared; 284 275 data.thread = thread; 285 276 286 277 instance = GetModuleHandle(NULL); 287 278 … … 335 326 336 327 data.progress = CreateWindow(_T("msctls_progress32"), _T("Progress"), 337 /*WS_BORDER |*/ WS_CHILD /*| PBS_MARQUEE*/, 15, 15, 270, 20,338 window, NULL, GetModuleHandle(NULL), NULL);328 /*WS_BORDER |*/ WS_CHILD /*| PBS_MARQUEE*/, 15, 15, 270, 20, 329 window, NULL, GetModuleHandle(NULL), NULL); 339 330 SetProp(window, PROGRESS_WINDOW_DATA_PROP, &data); 340 331 341 SendMessage(data.progress, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, thread.num_files)); 332 SendMessage(data.progress, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, thread.num_files)); 342 333 SendMessage(data.progress, PBM_SETSTEP, (WPARAM)1, 0); 343 334 … … 367 358 ShowWindow(data.progress, SW_SHOW); 368 359 369 {360 { 370 361 OSVERSIONINFO osvi; 371 362 osvi.dwOSVersionInfoSize = sizeof(osvi); 372 363 GetVersionEx(&osvi); 373 364 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 6) { 374 SetTimer(window, 0, 600, NULL);365 SetTimer(window, 0, 600, NULL); 375 366 } else { 376 SetTimer(window, 0, 200, NULL);377 } 378 }367 SetTimer(window, 0, 200, NULL); 368 } 369 } 379 370 380 371 ShowWindow(window, SW_SHOW); 381 372 UpdateWindow(window); 382 373 383 for (;; ) {374 for (;; ) { 384 375 MSG msg; 385 376 BOOL result = GetMessage(&msg, NULL, 0, 0); … … 409 400 } 410 401 411 String<> glob = PathAppendDup(from, _T("*"));402 String<> glob(PathAppendDup(from, _T("*"))); 412 403 if (!glob) { 413 404 Log(_T("CopyDirectory(): (!glob)")); … … 416 407 417 408 HANDLE hFind = FindFirstFile(glob, &find_data); 418 struct CleanUp { HANDLE h; ~CleanUp() { FindClose(h); } } cleanUp = {hFind}; (void)cleanUp; 409 struct CleanUp { 410 HANDLE h; 411 ~CleanUp() { 412 FindClose(h); 413 } 414 } cleanUp = {hFind}; 415 (void)cleanUp; 419 416 420 417 if (!hFind) { … … 422 419 return FALSE; 423 420 } 424 421 425 422 426 423 do { … … 433 430 } 434 431 435 String<> next_from = PathAppendDup(from, find_data.cFileName);436 String<> next_to = PathAppendDup(to, find_data.cFileName);432 String<> next_from(PathAppendDup(from, find_data.cFileName)); 433 String<> next_to(PathAppendDup(to, find_data.cFileName)); 437 434 438 435 /* Log(_T("%s -> %s"), next_from, next_to); */ … … 440 437 if (FILE_ATTRIBUTE_DIRECTORY & find_data.dwFileAttributes) { 441 438 if (CreateDirectory(next_to, NULL) || GetLastError() == ERROR_ALREADY_EXISTS) { 442 439 443 440 result = result && CopyDirectory(next_from, next_to, shared); 444 441 } else { … … 448 445 } else if(!CopyFile(next_from, next_to, FALSE)) { 449 446 Log(_T("file error")); 450 result = FALSE; 447 result = FALSE; 451 448 } 452 449 … … 496 493 CreateProcess(NULL, command, NULL, NULL, FALSE, 0, NULL, cd, &si, &pi); 497 494 e = GetLastError(); 498 Log(_T("CreateProcess(): \r\n command=%s \r\n cd=%s \r\n error=0x%x"), command,cd, e);495 Log(_T("CreateProcess(): \r\n command=%s \r\n cd=%s \r\n error=0x%x"), (TCHAR*)command, (TCHAR*)cd, e); 499 496 CloseHandle(pi.hThread); 500 497 CloseHandle(pi.hProcess); … … 546 543 } 547 544 GetTempPath(len, system_temp_path); 548 Log(_T("system_temp_path=%s"), system_temp_path);545 Log(_T("system_temp_path=%s"), (TCHAR*)system_temp_path); 549 546 } 550 547 … … 557 554 } 558 555 GetCurrentDirectory(len, my_dir); 559 Log(_T("my_dir=%s"), my_dir);556 Log(_T("my_dir=%s"), (TCHAR*)my_dir); 560 557 } 561 558 … … 576 573 577 574 e = GetLastError(); 578 Log(_T("CreateProcess(): \r\n command=%s \r\n cd=%s \r\n error=0x%x"), clean_command,system_temp_path, e);575 Log(_T("CreateProcess(): \r\n command=%s \r\n cd=%s \r\n error=0x%x"), (TCHAR*)clean_command, (TCHAR*)system_temp_path, e); 579 576 } 580 577 … … 587 584 DWORD bytes_got = 0; 588 585 DWORD written = 0; 589 Handle config_file =CreateFile(ADMIN_OUTPUT_FILE_NAME, GENERIC_READ, FILE_SHARE_READ, NULL,590 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;586 Handle config_file(CreateFile(ADMIN_OUTPUT_FILE_NAME, GENERIC_READ, FILE_SHARE_READ, NULL, 587 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)); 591 588 e = GetLastError(); 592 589 if (config_file == INVALID_HANDLE_VALUE) { … … 596 593 597 594 bytes = GetFileSize(config_file, NULL); 598 String<> data; 599 data.reserveBytes(bytes + (/* null terminate */ sizeof(TCHAR))); 595 String<> data((TCHAR*)calloc(bytes + (/* null terminate */ sizeof(TCHAR)), 1)); 600 596 if (!data) { 601 597 return; … … 631 627 CoUninitialize(); 632 628 } 633 } cleanUp; 629 } cleanUp; (void)cleanUp; 634 630 635 631 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); … … 649 645 650 646 Log(_T("ShellExecuteEx(): return=0x%x, GetLastError()=0x%x, hInstApp=0x%x"), 651 se, e, hInstApp);647 se, e, hInstApp); 652 648 653 649 if(!se || hInstApp <= 32) { … … 662 658 Log(_T("WAIT_OBJECT_0")); 663 659 break; 664 case WAIT_ABANDONED: 660 case WAIT_ABANDONED: 665 661 Log(_T("WAIT_ABANDONED")); 666 662 break; … … 683 679 TCHAR name[1024]; 684 680 Sleep(20); 685 wsprintf(name, _T("NetworkUpdater.AccessCheck.%x.%x.txt"), 686 GetCurrentThreadId(), GetTickCount() - retry);687 String<> check_path = PathAppendDup(dir, name);681 wsprintf(name, _T("NetworkUpdater.AccessCheck.%x.%x.txt"), 682 GetCurrentThreadId(), GetTickCount() - retry); 683 String<> check_path(PathAppendDup(dir, name)); 688 684 if (!check_path) { 689 685 return 0; … … 693 689 } 694 690 if (check_path) { 695 Handle check =CreateFile(696 check_path, GENERIC_WRITE | DELETE, 0, NULL, CREATE_NEW,697 FILE_ATTRIBUTE_HIDDEN | FILE_FLAG_DELETE_ON_CLOSE, NULL);691 Handle check(CreateFile( 692 check_path, GENERIC_WRITE | DELETE, 0, NULL, CREATE_NEW, 693 FILE_ATTRIBUTE_HIDDEN | FILE_FLAG_DELETE_ON_CLOSE, NULL)); 698 694 if (check != INVALID_HANDLE_VALUE) { 699 695 TCHAR data[] = _T("write test data"); … … 730 726 731 727 memset(&thread_data, 0, sizeof(thread_data)); 732 728 733 729 { 734 730 int num_args = 0; … … 753 749 Log(_T("***** UpdaterProcess start: pid=0x%x *****"), GetCurrentProcessId()); 754 750 755 { /* read config file */ 756 TCHAR* lines[8]; 757 size_t i = 0; 758 size_t data_count = 0; 759 unsigned line = 0; 760 DWORD bytes = 0; 761 DWORD bytes_got = 0; 751 { /* read config file */ 762 752 config_file = CreateFile(CONFIG_FILE_NAME, GENERIC_READ, FILE_SHARE_READ, NULL, 763 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);764 765 if (!config_file) {753 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 754 755 if (!config_file) { 766 756 Log(_T("config file not found")); 767 757 goto clean_up; 768 758 } 769 759 770 bytes = GetFileSize(config_file, NULL);771 if (bytes == -1) {760 DWORD bytes = GetFileSize(config_file, NULL); 761 if (bytes == (DWORD)-1) { 772 762 DWORD e = GetLastError(); 773 763 Log(_T("!GetFileSize() error=0x%x"), e); … … 775 765 } 776 766 777 data .reserveBytes(bytes + (/* null terminate */ sizeof(TCHAR)));767 data = (TCHAR*)calloc(bytes + (/* null terminate */ sizeof(TCHAR)), 1); 778 768 if (!data) { 779 769 Log(_T("!data")); … … 781 771 } 782 772 773 DWORD bytes_got = 0; 783 774 if (ReadFile(config_file, data, bytes, &bytes_got, NULL) == 0) { 784 775 DWORD e = GetLastError(); … … 787 778 } 788 779 789 data_count = (bytes / sizeof(data[0])); 790 memset(lines, 0, sizeof(lines)); 791 for (i = 0; i < data_count; ++i) { 780 size_t data_count = (bytes / sizeof(data[0])); 781 782 TCHAR* lines[8] = {}; 783 unsigned line = 0; 784 for (size_t i = 0; i < data_count; ++i) { 792 785 if (data[i] == _T('\r')) { 793 786 data[i] = 0; … … 815 808 816 809 Log(_T("read config file: \r\n pid=%s \r\n from=%s \r\n to=%s \r\n new_proc=%s \r\n new_cd=%s \r\n num_files=%s \r\n log=%s \r\n debug=%s"), 817 pid_string, update_from, update_to, new_program, new_program_cd, num_files_string, log_file_name, debug_string);810 pid_string, update_from, update_to, new_program, new_program_cd, num_files_string, log_file_name, debug_string); 818 811 819 812 if (lstrcmp(debug_string, DEBUG_SIGN) == 0) { … … 826 819 CopyFile(DEFAULT_OUTPUT_FILE_NAME, log_file_name, FALSE); 827 820 new_log_file = CreateFile(log_file_name, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, 828 OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);821 OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 829 822 if (new_log_file != INVALID_HANDLE_VALUE) { 830 823 SetFilePointer(new_log_file, 0, 0, FILE_END); 831 824 /* 832 SetStdHandle(STD_OUTPUT_HANDLE, new_log_file);833 */825 SetStdHandle(STD_OUTPUT_HANDLE, new_log_file); 826 */ 834 827 Log(_T("new log setup")); 835 828 CloseHandle(log_file); … … 849 842 } 850 843 } 851 844 852 845 InitCommonControls(); 853 846 854 847 855 848 thread_data.num_files = _ttoi(num_files_string); 856 849 { … … 878 871 GetVersionEx(&osvi); 879 872 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && 880 osvi.dwMajorVersion >= 6) {873 osvi.dwMajorVersion >= 6) { 881 874 LaunchAdminProcess(); 882 875 … … 941 934 #endif 942 935 } 943 944 945
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)