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

Side by Side Diff: runtime/bin/file_win.cc

Issue 2430473002: Implement File::Map on Windows. (Closed)
Patch Set: . Created 4 years, 2 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 | runtime/bin/main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "platform/globals.h" 5 #include "platform/globals.h"
6 #if defined(TARGET_OS_WINDOWS) 6 #if defined(TARGET_OS_WINDOWS)
7 7
8 #include "bin/file.h" 8 #include "bin/file.h"
9 9
10 #include <fcntl.h> // NOLINT 10 #include <fcntl.h> // NOLINT
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 intptr_t File::GetFD() { 67 intptr_t File::GetFD() {
68 return handle_->fd(); 68 return handle_->fd();
69 } 69 }
70 70
71 71
72 bool File::IsClosed() { 72 bool File::IsClosed() {
73 return handle_->fd() == kClosedFd; 73 return handle_->fd() == kClosedFd;
74 } 74 }
75 75
76 76
77 void* File::Map(MapType type, int64_t position, int64_t length) { 77 void* File::Map(File::MapType type, int64_t position, int64_t length) {
78 UNIMPLEMENTED(); 78 DWORD prot_alloc;
79 return NULL; 79 DWORD prot_final;
80 switch (type) {
81 case File::kReadOnly:
82 prot_alloc = PAGE_READWRITE;
83 prot_final = PAGE_READONLY;
84 break;
85 case File::kReadExecute:
86 prot_alloc = PAGE_EXECUTE_READWRITE;
87 prot_final = PAGE_EXECUTE_READ;
88 break;
89 default:
90 return NULL;
91 }
92
93 void* addr = VirtualAlloc(NULL, length, MEM_COMMIT | MEM_RESERVE, prot_alloc);
94 if (addr == NULL) {
95 Log::PrintErr("VirtualAlloc failed %d", GetLastError());
zra 2016/10/19 22:39:45 \n
rmacnak 2016/10/19 22:54:13 Done.
96 return NULL;
97 }
98
99 SetPosition(position);
100 if (!ReadFully(addr, length)) {
zra 2016/10/19 22:43:06 VirtualFree(addr, 0, MEM_RELEASE)
rmacnak 2016/10/19 22:54:13 Done.
101 Log::PrintErr("ReadFully failed %d", GetLastError());
zra 2016/10/19 22:39:46 \n
rmacnak 2016/10/19 22:54:13 Done.
102 return NULL;
103 }
104
105 DWORD old_prot;
106 bool result = VirtualProtect(addr, length, prot_final, &old_prot);
107 if (!result) {
zra 2016/10/19 22:43:05 VirtualFree(addr, 0, MEM_RELEASE)
rmacnak 2016/10/19 22:54:13 Done.
108 Log::PrintErr("VirtualProtect failed %d", GetLastError());
zra 2016/10/19 22:39:45 \n
rmacnak 2016/10/19 22:54:13 Done.
109 return NULL;
110 }
111 return addr;
80 } 112 }
81 113
82 114
83 int64_t File::Read(void* buffer, int64_t num_bytes) { 115 int64_t File::Read(void* buffer, int64_t num_bytes) {
84 ASSERT(handle_->fd() >= 0); 116 ASSERT(handle_->fd() >= 0);
85 return read(handle_->fd(), buffer, num_bytes); 117 return read(handle_->fd(), buffer, num_bytes);
86 } 118 }
87 119
88 120
89 int64_t File::Write(const void* buffer, int64_t num_bytes) { 121 int64_t File::Write(const void* buffer, int64_t num_bytes) {
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 return kIdentical; 732 return kIdentical;
701 } else { 733 } else {
702 return kDifferent; 734 return kDifferent;
703 } 735 }
704 } 736 }
705 737
706 } // namespace bin 738 } // namespace bin
707 } // namespace dart 739 } // namespace dart
708 740
709 #endif // defined(TARGET_OS_WINDOWS) 741 #endif // defined(TARGET_OS_WINDOWS)
OLDNEW
« no previous file with comments | « no previous file | runtime/bin/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698