diff options
author | lledey <lledey@gmail.com> | 2013-02-23 21:47:10 +0100 |
---|---|---|
committer | lledey <lledey@gmail.com> | 2013-02-23 21:47:10 +0100 |
commit | bbab6b2fdcfeafef192f99080d2e44bb3398e942 (patch) | |
tree | b2d332632f9ec269c17d90313334ab21b994234b /common.cpp | |
parent | a8e92639af37ff1e289eb0c3db9589740a630f4a (diff) |
Fix compilation by using std::ptrdiff_t instead of ptrdiff_t
Signed-off-by: lledey <lledey@gmail.com>
Diffstat (limited to 'common.cpp')
-rw-r--r-- | common.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
@@ -2176,16 +2176,16 @@ template <typename CharType_t> static CharType_t **make_null_terminated_array_helper(const std::vector<std::basic_string<CharType_t> > &argv) { size_t count = argv.size(); - + /* We allocate everything in one giant block. First compute how much space we need. */ /* N + 1 pointers */ size_t pointers_allocation_len = (count + 1) * sizeof(CharType_t *); - + /* In the very unlikely event that CharType_t has stricter alignment requirements than does a pointer, round us up to the size of a CharType_t */ pointers_allocation_len += sizeof(CharType_t) - 1; pointers_allocation_len -= pointers_allocation_len % sizeof(CharType_t); - + /* N null terminated strings */ size_t strings_allocation_len = 0; for (size_t i=0; i < count; i++) @@ -2193,22 +2193,22 @@ static CharType_t **make_null_terminated_array_helper(const std::vector<std::bas /* The size of the string, plus a null terminator */ strings_allocation_len += (argv.at(i).size() + 1) * sizeof(CharType_t); } - + /* Now allocate their sum */ unsigned char *base = static_cast<unsigned char *>(malloc(pointers_allocation_len + strings_allocation_len)); if (! base) return NULL; - + /* Divvy it up into the pointers and strings */ CharType_t **pointers = reinterpret_cast<CharType_t **>(base); CharType_t *strings = reinterpret_cast<CharType_t *>(base + pointers_allocation_len); - + /* Start copying */ for (size_t i=0; i < count; i++) { const std::basic_string<CharType_t> &str = argv.at(i); // store the current string pointer into self *pointers++ = strings; - + // copy the string into strings strings = std::copy(str.begin(), str.end(), strings); // each string needs a null terminator @@ -2216,12 +2216,12 @@ static CharType_t **make_null_terminated_array_helper(const std::vector<std::bas } // array of pointers needs a null terminator *pointers++ = NULL; - + // Make sure we know what we're doing - assert((unsigned char *)pointers - base == (ptrdiff_t)pointers_allocation_len); - assert((unsigned char *)strings - (unsigned char *)pointers == (ptrdiff_t)strings_allocation_len); - assert((unsigned char *)strings - base == (ptrdiff_t)(pointers_allocation_len + strings_allocation_len)); - + assert((unsigned char *)pointers - base == (std::ptrdiff_t)pointers_allocation_len); + assert((unsigned char *)strings - (unsigned char *)pointers == (std::ptrdiff_t)strings_allocation_len); + assert((unsigned char *)strings - base == (std::ptrdiff_t)(pointers_allocation_len + strings_allocation_len)); + // Return what we did return reinterpret_cast<CharType_t**>(base); } @@ -2235,4 +2235,3 @@ char **make_null_terminated_array(const std::vector<std::string> &lst) { return make_null_terminated_array_helper(lst); } - |