Compare commits

..

8 Commits
1.7.5 ... 1.7.6

Author SHA1 Message Date
Christopher Dunn
45a560a8c0 1.7.6 <- 1.7.5 2016-09-25 19:05:56 -05:00
Christopher Dunn
4893a8f667 Merge pull request #535 from kavika13/master
Add RPATH to dynamic library build on OSX

fixes #534 

But we will revert if there are any complaints.
2016-09-25 18:58:14 -05:00
Gergely Nagy
f6d785fda8 Fix poss SEGV
for non-null terminated input.
2016-09-25 18:45:04 -05:00
Merlyn Morgan-Graham
8d54e333ff Add RPATH to dynamic library build on OSX 2016-09-22 22:06:25 -07:00
Christopher Dunn
b063cf4ada Merge pull request #529 from chrox802/chrox802-patch-1
fix a bug about Json::Path
2016-09-07 21:57:56 -05:00
Christopher Dunn
c4ab6d733f Merge pull request #528 from DrMetallius/master
Used macros to disable localeconv() calls
2016-09-07 21:52:18 -05:00
chason
2f97c0147b fix a bug about Json::Path 2016-09-07 19:56:19 +08:00
Alexander Gazarov
52cfe5ae88 Replaced the template-based solution for avoiding calls to localeconv() with a macro-based one (fixes #527) 2016-09-06 14:41:13 +03:00
7 changed files with 36 additions and 32 deletions

View File

@@ -22,6 +22,11 @@ IF(NOT WIN32)
ENDIF() ENDIF()
ENDIF() ENDIF()
# Enable runtime search path support for dynamic libraries on OSX
IF(APPLE)
SET(CMAKE_MACOSX_RPATH 1)
ENDIF()
SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build") SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build")
SET(LIB_SUFFIX "" CACHE STRING "Optional arch-dependent suffix for the library installation directory") SET(LIB_SUFFIX "" CACHE STRING "Optional arch-dependent suffix for the library installation directory")
@@ -64,7 +69,7 @@ ENDMACRO()
#SET( JSONCPP_VERSION_MAJOR X ) #SET( JSONCPP_VERSION_MAJOR X )
#SET( JSONCPP_VERSION_MINOR Y ) #SET( JSONCPP_VERSION_MINOR Y )
#SET( JSONCPP_VERSION_PATCH Z ) #SET( JSONCPP_VERSION_PATCH Z )
SET( JSONCPP_VERSION 1.7.5 ) SET( JSONCPP_VERSION 1.7.6 )
jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION ) jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION )
#IF(NOT JSONCPP_VERSION_FOUND) #IF(NOT JSONCPP_VERSION_FOUND)
# MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z") # MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z")

View File

@@ -3,10 +3,10 @@
#ifndef JSON_VERSION_H_INCLUDED #ifndef JSON_VERSION_H_INCLUDED
# define JSON_VERSION_H_INCLUDED # define JSON_VERSION_H_INCLUDED
# define JSONCPP_VERSION_STRING "1.7.5" # define JSONCPP_VERSION_STRING "1.7.6"
# define JSONCPP_VERSION_MAJOR 1 # define JSONCPP_VERSION_MAJOR 1
# define JSONCPP_VERSION_MINOR 7 # define JSONCPP_VERSION_MINOR 7
# define JSONCPP_VERSION_PATCH 5 # define JSONCPP_VERSION_PATCH 6
# define JSONCPP_VERSION_QUALIFIER # define JSONCPP_VERSION_QUALIFIER
# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) # define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))

View File

@@ -46,6 +46,11 @@ IF(BUILD_SHARED_LIBS)
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp
DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} ) DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
# Set library's runtime search path on OSX
IF(APPLE)
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES INSTALL_RPATH "@loader_path/." )
ENDIF()
INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT} INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR} RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}

View File

@@ -401,7 +401,7 @@ Reader::addComment(Location begin, Location end, CommentPlacement placement) {
} }
bool Reader::readCStyleComment() { bool Reader::readCStyleComment() {
while (current_ != end_) { while ((current_ + 1) < end_) {
Char c = getNextChar(); Char c = getNextChar();
if (c == '*' && *current_ == '/') if (c == '*' && *current_ == '/')
break; break;
@@ -520,7 +520,7 @@ bool Reader::readArray(Token& tokenStart) {
currentValue().swapPayload(init); currentValue().swapPayload(init);
currentValue().setOffsetStart(tokenStart.start_ - begin_); currentValue().setOffsetStart(tokenStart.start_ - begin_);
skipSpaces(); skipSpaces();
if (*current_ == ']') // empty array if (current_ != end_ && *current_ == ']') // empty array
{ {
Token endArray; Token endArray;
readToken(endArray); readToken(endArray);
@@ -1361,7 +1361,7 @@ OurReader::addComment(Location begin, Location end, CommentPlacement placement)
} }
bool OurReader::readCStyleComment() { bool OurReader::readCStyleComment() {
while (current_ != end_) { while ((current_ + 1) < end_) {
Char c = getNextChar(); Char c = getNextChar();
if (c == '*' && *current_ == '/') if (c == '*' && *current_ == '/')
break; break;
@@ -1503,7 +1503,7 @@ bool OurReader::readArray(Token& tokenStart) {
currentValue().swapPayload(init); currentValue().swapPayload(init);
currentValue().setOffsetStart(tokenStart.start_ - begin_); currentValue().setOffsetStart(tokenStart.start_ - begin_);
skipSpaces(); skipSpaces();
if (*current_ == ']') // empty array if (current_ != end_ && *current_ == ']') // empty array
{ {
Token endArray; Token endArray;
readToken(endArray); readToken(endArray);

View File

@@ -5,7 +5,10 @@
#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED #ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED #define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
#ifndef NO_LOCALE_SUPPORT
#include <clocale> #include <clocale>
#endif
/* This header provides common string manipulation support, such as UTF-8, /* This header provides common string manipulation support, such as UTF-8,
* portable conversion from/to string... * portable conversion from/to string...
@@ -14,26 +17,14 @@
*/ */
namespace Json { namespace Json {
static char getDecimalPoint() {
/// Fallback for decimal_point on android, where the lconv is an empty struct. #ifdef NO_LOCALE_SUPPORT
template<typename Lconv, bool=(sizeof(Lconv) >= sizeof(char*))> return '\0';
struct Locale { #else
static char decimalPoint() { struct lconv* lc = localeconv();
return '\0'; return lc ? *(lc->decimal_point) : '\0';
} #endif
}; }
/// Return decimal_point for the current locale.
template<typename Lconv>
struct Locale<Lconv, true> {
static char decimalPoint() {
Lconv* lc = localeconv();
if (lc == NULL) {
return '\0';
}
return *(lc->decimal_point);
}
};
/// Converts a unicode code-point to UTF-8. /// Converts a unicode code-point to UTF-8.
static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) { static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) {
@@ -104,7 +95,7 @@ static inline void fixNumericLocale(char* begin, char* end) {
} }
static inline void fixNumericLocaleInput(char* begin, char* end) { static inline void fixNumericLocaleInput(char* begin, char* end) {
char decimalPoint = Locale<struct lconv>::decimalPoint(); char decimalPoint = getDecimalPoint();
if (decimalPoint != '\0' && decimalPoint != '.') { if (decimalPoint != '\0' && decimalPoint != '.') {
while (begin < end) { while (begin < end) {
if (*begin == '.') { if (*begin == '.') {

View File

@@ -1504,12 +1504,12 @@ void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) {
index = index * 10 + ArrayIndex(*current - '0'); index = index * 10 + ArrayIndex(*current - '0');
args_.push_back(index); args_.push_back(index);
} }
if (current == end || *current++ != ']') if (current == end || *++current != ']')
invalidPath(path, int(current - path.c_str())); invalidPath(path, int(current - path.c_str()));
} else if (*current == '%') { } else if (*current == '%') {
addPathInArg(path, in, itInArg, PathArgument::kindKey); addPathInArg(path, in, itInArg, PathArgument::kindKey);
++current; ++current;
} else if (*current == '.') { } else if (*current == '.' || *current == ']') {
++current; ++current;
} else { } else {
const char* beginName = current; const char* beginName = current;
@@ -1529,7 +1529,7 @@ void Path::addPathInArg(const JSONCPP_STRING& /*path*/,
} else if ((*itInArg)->kind_ != kind) { } else if ((*itInArg)->kind_ != kind) {
// Error: bad argument type // Error: bad argument type
} else { } else {
args_.push_back(**itInArg); args_.push_back(**itInArg++);
} }
} }
@@ -1544,16 +1544,19 @@ const Value& Path::resolve(const Value& root) const {
if (arg.kind_ == PathArgument::kindIndex) { if (arg.kind_ == PathArgument::kindIndex) {
if (!node->isArray() || !node->isValidIndex(arg.index_)) { if (!node->isArray() || !node->isValidIndex(arg.index_)) {
// Error: unable to resolve path (array value expected at position... // Error: unable to resolve path (array value expected at position...
return Value::null;
} }
node = &((*node)[arg.index_]); node = &((*node)[arg.index_]);
} else if (arg.kind_ == PathArgument::kindKey) { } else if (arg.kind_ == PathArgument::kindKey) {
if (!node->isObject()) { if (!node->isObject()) {
// Error: unable to resolve path (object value expected at position...) // Error: unable to resolve path (object value expected at position...)
return Value::null;
} }
node = &((*node)[arg.key_]); node = &((*node)[arg.key_]);
if (node == &Value::nullSingleton()) { if (node == &Value::nullSingleton()) {
// Error: unable to resolve path (object has no member named '' at // Error: unable to resolve path (object has no member named '' at
// position...) // position...)
return Value::null;
} }
} }
} }

View File

@@ -1 +1 @@
1.7.5 1.7.6