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

Side by Side Diff: src/common/linux/memory_mapped_file.cc

Issue 2065493006: linux-syscall-support: pull in latest version (Closed) Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: Created 4 years, 6 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 | « DEPS ('k') | src/common/memory.h » ('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) 2011, Google Inc. 1 // Copyright (c) 2011, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 // Strangely file size can be negative, but we check above that it is not. 80 // Strangely file size can be negative, but we check above that it is not.
81 size_t file_len = static_cast<size_t>(st.st_size); 81 size_t file_len = static_cast<size_t>(st.st_size);
82 // If the file does not extend beyond the offset, simply use an empty 82 // If the file does not extend beyond the offset, simply use an empty
83 // MemoryRange and return true. Don't bother to call mmap() 83 // MemoryRange and return true. Don't bother to call mmap()
84 // even though mmap() can handle an empty file on some platforms. 84 // even though mmap() can handle an empty file on some platforms.
85 if (offset >= file_len) { 85 if (offset >= file_len) {
86 sys_close(fd); 86 sys_close(fd);
87 return true; 87 return true;
88 } 88 }
89 89
90 #if defined(__x86_64__) || defined(__aarch64__) || \
91 (defined(__mips__) && _MIPS_SIM == _ABI64)
92 void* data = sys_mmap(NULL, file_len, PROT_READ, MAP_PRIVATE, fd, offset); 90 void* data = sys_mmap(NULL, file_len, PROT_READ, MAP_PRIVATE, fd, offset);
93 #else
94 if ((offset & 4095) != 0) {
95 // Not page aligned.
96 sys_close(fd);
97 return false;
98 }
99 void* data = sys_mmap2(
100 NULL, file_len, PROT_READ, MAP_PRIVATE, fd, offset >> 12);
101 #endif
102 sys_close(fd); 91 sys_close(fd);
103 if (data == MAP_FAILED) { 92 if (data == MAP_FAILED) {
104 return false; 93 return false;
105 } 94 }
106 95
107 content_.Set(data, file_len - offset); 96 content_.Set(data, file_len - offset);
108 return true; 97 return true;
109 } 98 }
110 99
111 void MemoryMappedFile::Unmap() { 100 void MemoryMappedFile::Unmap() {
112 if (content_.data()) { 101 if (content_.data()) {
113 sys_munmap(const_cast<uint8_t*>(content_.data()), content_.length()); 102 sys_munmap(const_cast<uint8_t*>(content_.data()), content_.length());
114 content_.Set(NULL, 0); 103 content_.Set(NULL, 0);
115 } 104 }
116 } 105 }
117 106
118 } // namespace google_breakpad 107 } // namespace google_breakpad
OLDNEW
« no previous file with comments | « DEPS ('k') | src/common/memory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698