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

Unified Diff: util/numeric/checked_address_range.h

Issue 1052813002: win: make CrashpadInfo retrievable (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: more fixes Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « util/mac/checked_mach_address_range.cc ('k') | util/numeric/checked_address_range.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/numeric/checked_address_range.h
diff --git a/util/mac/checked_mach_address_range.h b/util/numeric/checked_address_range.h
similarity index 69%
copy from util/mac/checked_mach_address_range.h
copy to util/numeric/checked_address_range.h
index 717bb8d915c52378debab671b114f394026a1cee..e9514bbdec6e256082a6ccdad822c75d33692148 100644
--- a/util/mac/checked_mach_address_range.h
+++ b/util/numeric/checked_address_range.h
@@ -1,4 +1,4 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
+// Copyright 2015 The Crashpad Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,38 +12,40 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#ifndef CRASHPAD_UTIL_MAC_CHECKED_MACH_ADDRESS_RANGE_H_
-#define CRASHPAD_UTIL_MAC_CHECKED_MACH_ADDRESS_RANGE_H_
+#ifndef CRASHPAD_UTIL_NUMERIC_CHECKED_ADDRESS_RANGE_H_
+#define CRASHPAD_UTIL_NUMERIC_CHECKED_ADDRESS_RANGE_H_
-#include <mach/mach.h>
+#include <stdint.h>
+#include "build/build_config.h"
#include "util/numeric/checked_range.h"
namespace crashpad {
+namespace internal {
//! \brief Ensures that a range, composed of a base and a size, does not
//! overflow the pointer type of the process it describes a range in.
//!
-//! This class checks bases of type `mach_vm_address_t` and sizes of type
-//! `mach_vm_address_t` against a process whose pointer type is either 32 or 64
-//! bits wide.
+//! This class checks bases of type `ValueType` and sizes of type `SizeType`
+//! against a process whose pointer type is either 32 or 64 bits wide.
//!
//! Aside from varying the overall range on the basis of a process’ pointer type
//! width, this class functions very similarly to CheckedRange.
-class CheckedMachAddressRange {
+//!
+//! \sa CheckedMachAddressRange
+template <class ValueType, class SizeType>
+class CheckedAddressRangeGeneric {
public:
//! \brief Initializes a default range.
//!
//! The default range has base 0, size 0, and appears to be from a 32-bit
//! process.
- CheckedMachAddressRange();
+ CheckedAddressRangeGeneric();
//! \brief Initializes a range.
//!
//! See SetRange().
- CheckedMachAddressRange(bool is_64_bit,
- mach_vm_address_t base,
- mach_vm_size_t size);
+ CheckedAddressRangeGeneric(bool is_64_bit, ValueType base, SizeType size);
//! \brief Sets a range’s fields.
//!
@@ -52,16 +54,16 @@ class CheckedMachAddressRange {
//! process.
//! \param[in] base The range’s base address.
//! \param[in] size The range’s size.
- void SetRange(bool is_64_bit, mach_vm_address_t base, mach_vm_size_t size);
+ void SetRange(bool is_64_bit, ValueType base, SizeType size);
//! \brief The range’s base address.
- mach_vm_address_t Base() const;
+ ValueType Base() const;
//! \brief The range’s size.
- mach_vm_size_t Size() const;
+ SizeType Size() const;
//! \brief The range’s end address (its base address plus its size).
- mach_vm_address_t End() const;
+ ValueType End() const;
//! \brief Returns the validity of the address range.
//!
@@ -72,6 +74,9 @@ class CheckedMachAddressRange {
//! be computed without overflowing its data type.
bool IsValid() const;
+ //! \brief Returns whether this range refers to a 64-bit process.
+ bool Is64Bit() const { return is_64_bit_; }
+
//! \brief Returns whether the address range contains another address.
//!
//! \param[in] value The (possibly) contained address.
@@ -82,7 +87,7 @@ class CheckedMachAddressRange {
//! its base address, and less than its end address (base address plus size).
//!
//! This method must only be called if IsValid() would return `true`.
- bool ContainsValue(const mach_vm_address_t value) const;
+ bool ContainsValue(const ValueType value) const;
//! \brief Returns whether the address range contains another address range.
//!
@@ -96,19 +101,26 @@ class CheckedMachAddressRange {
//! base, and the contained address range’s end is less than or equal to the
//! containing address range’s end.
//!
- //! This method should only be called on two CheckedMachAddressRange objects
- //! representing address ranges in the same process.
+ //! This method should only be called on two CheckedAddressRangeGeneric
+ //! objects representing address ranges in the same process.
//!
//! This method must only be called if IsValid() would return `true` for both
- //! CheckedMachAddressRange objects involved.
- bool ContainsRange(const CheckedMachAddressRange& that) const;
+ //! CheckedAddressRangeGeneric objects involved.
+ bool ContainsRange(const CheckedAddressRangeGeneric& that) const;
private:
+#if defined(COMPILER_MSVC)
+ // MSVC cannot handle a union containing CheckedRange (with constructor, etc.)
+ // currently.
+ CheckedRange<uint32_t> range_32_;
+ CheckedRange<uint64_t> range_64_;
+#else
// The field of the union that is expressed is determined by is_64_bit_.
union {
CheckedRange<uint32_t> range_32_;
CheckedRange<uint64_t> range_64_;
};
+#endif
// Determines which field of the union is expressed.
bool is_64_bit_;
@@ -118,14 +130,15 @@ class CheckedMachAddressRange {
// 64 bits wide and there is no possibility for range and size to overflow.
// When is_64_bit_ is false, range_ok_ will be false if SetRange() was passed
// a base or size that overflowed the underlying 32-bit data type. This field
- // is necessary because the interface exposes mach_vm_address_t and
- // mach_vm_size_t uniformly, but these types are too wide for the underlying
- // pointer and size types in 32-bit processes.
+ // is necessary because the interface exposes the address and size types
+ // uniformly, but these types are too wide for the underlying pointer and size
+ // types in 32-bit processes.
bool range_ok_;
- DISALLOW_COPY_AND_ASSIGN(CheckedMachAddressRange);
+ DISALLOW_COPY_AND_ASSIGN(CheckedAddressRangeGeneric);
};
+} // namespace internal
} // namespace crashpad
-#endif // CRASHPAD_UTIL_MAC_CHECKED_MACH_ADDRESS_RANGE_H_
+#endif // CRASHPAD_UTIL_NUMERIC_CHECKED_ADDRESS_RANGE_H_
« no previous file with comments | « util/mac/checked_mach_address_range.cc ('k') | util/numeric/checked_address_range.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698