Browse Source

Fix build with Boost < 1.52

coverity_scan
Daniel Scharrer 13 years ago
parent
commit
85da8836e5
  1. 24
      src/setup/version.cpp

24
src/setup/version.cpp

@ -25,6 +25,7 @@
#include <istream>
#include <ostream>
#include <boost/version.hpp>
#include <boost/static_assert.hpp>
#include <boost/lexical_cast.hpp>
@ -164,6 +165,14 @@ std::ostream & operator<<(std::ostream & os, const version & v) {
return os;
}
static unsigned to_unsigned(const char * chars, size_t count) {
#if BOOST_VERSION < 105200
return boost::lexical_cast<unsigned>(std::string(chars, count));
#else
return boost::lexical_cast<unsigned>(chars, count);
#endif
}
void version::load(std::istream & is) {
static const char digits[] = "0123456789";
@ -205,9 +214,9 @@ void version::load(std::istream & is) {
std::string version_str(legacy_version, legacy_version + ARRAY_SIZE(legacy_version));
try {
unsigned a = boost::lexical_cast<unsigned>(version_str.data() + 1, 1);
unsigned b = boost::lexical_cast<unsigned>(version_str.data() + 3, 1);
unsigned c = boost::lexical_cast<unsigned>(version_str.data() + 5, 2);
unsigned a = to_unsigned(version_str.data() + 1, 1);
unsigned b = to_unsigned(version_str.data() + 3, 1);
unsigned c = to_unsigned(version_str.data() + 5, 2);
value = INNO_VERSION(a, b, c);
} catch(boost::bad_lexical_cast) {
throw version_error();
@ -257,7 +266,7 @@ void version::load(std::istream & is) {
if(a_end == std::string::npos || version_str[a_end] != '.') {
continue;
}
unsigned a = boost::lexical_cast<unsigned>(version_str.data() + a_start,
unsigned a = to_unsigned(version_str.data() + a_start,
a_end - a_start);
size_t b_start = a_end + 1;
@ -265,7 +274,7 @@ void version::load(std::istream & is) {
if(b_end == std::string::npos || version_str[b_end] != '.') {
continue;
}
unsigned b = boost::lexical_cast<unsigned>(version_str.data() + b_start,
unsigned b = to_unsigned(version_str.data() + b_start,
b_end - b_start);
size_t c_start = b_end + 1;
@ -273,7 +282,7 @@ void version::load(std::istream & is) {
if(c_end == std::string::npos) {
continue;
}
unsigned c = boost::lexical_cast<unsigned>(version_str.data() + c_start,
unsigned c = to_unsigned(version_str.data() + c_start,
c_end - c_start);
size_t d_start = c_end;
@ -289,8 +298,7 @@ void version::load(std::istream & is) {
d_start++;
size_t d_end = version_str.find_first_not_of(digits, d_start);
if(d_end != std::string::npos && d_end != d_start) {
d = boost::lexical_cast<unsigned>(version_str.data() + d_start,
d_end - d_start);
d = to_unsigned(version_str.data() + d_start, d_end - d_start);
}
}

Loading…
Cancel
Save