1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
This file is part of MXE. See LICENSE.md for licensing information.
Contains ad hoc patches for cross building.
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tony Theodore <tonyt@logyst.com>
Date: Sat, 24 Feb 2018 15:54:48 +1100
Subject: [PATCH 1/2] fixes
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1111111..2222222 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,6 +32,10 @@ endif (WIN32)
# BUILD_SHARED_LIBS is cmake variable. Need to change default value.
option(BUILD_SHARED_LIBS "Build shared library" ON)
+if(NOT BUILD_SHARED_LIBS)
+ set(PC_CFLAGS "-DQJSON_STATIC")
+endif()
+
OPTION(OSX_FRAMEWORK "Build a Mac OS X Framework")
SET(FRAMEWORK_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/Library/Frameworks"
CACHE PATH "Where to place qjson.framework if OSX_FRAMEWORK is selected")
@@ -96,13 +100,13 @@ set(QJSON_LIB_VERSION_STRING "${QJSON_LIB_MAJOR_VERSION}.${QJSON_LIB_MINOR_VERSI
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" )
# pkg-config
-IF (NOT WIN32)
+IF (MINGW OR NOT WIN32)
CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/QJson.pc.in
${CMAKE_CURRENT_BINARY_DIR}/QJson${QJSON_SUFFIX}.pc
@ONLY)
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/QJson${QJSON_SUFFIX}.pc
DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
-ENDIF (NOT WIN32)
+ENDIF (MINGW OR NOT WIN32)
# Subdirs
ADD_SUBDIRECTORY(src)
diff --git a/QJson.pc.in b/QJson.pc.in
index 1111111..2222222 100644
--- a/QJson.pc.in
+++ b/QJson.pc.in
@@ -7,5 +7,5 @@ Name: QJson
Description: QJson is a qt-based library that maps JSON data to QVariant objects
Version: @QJSON_LIB_MAJOR_VERSION@.@QJSON_LIB_MINOR_VERSION@.@QJSON_LIB_PATCH_VERSION@
Requires: @PC_Requires@
-Libs: -L${libdir} -lqjson
-Cflags: -I${includedir}
\ No newline at end of file
+Libs: -L${libdir} -lqjson@QJSON_SUFFIX@
+Cflags: -I${includedir} @PC_CFLAGS@
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1111111..2222222 100755
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -59,7 +59,7 @@ INSTALL(TARGETS qjson${QJSON_SUFFIX} EXPORT qjson-export
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
FRAMEWORK DESTINATION ${FRAMEWORK_INSTALL_DIR}
- PUBLIC_HEADER DESTINATION ${INCLUDE_INSTALL_DIR}/qjson${QJSON_SUFFIX}
+ PUBLIC_HEADER DESTINATION ${INCLUDE_INSTALL_DIR}/qjson
)
if(MSVC)
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ivan Romanov <drizt@land.ru>
Date: Fri, 27 Jul 2018 13:32:18 +0500
Subject: [PATCH 2/2] Fix numbers parsing
This patch has been taken from: https://github.com/flavio/qjson/issues/48#ref-pullrequest-345139226
strtoll and strtoull may not reset errno for valid input.
Need to check actual returned value as sayed in strtoll
documentation.
Fix #48
diff --git a/src/json_scanner.cc b/src/json_scanner.cc
index 1111111..2222222 100644
--- a/src/json_scanner.cc
+++ b/src/json_scanner.cc
@@ -3393,8 +3393,9 @@ YY_RULE_SETUP
#line 82 "json_scanner.yy"
{
m_yylloc->columns(yyleng);
- *m_yylval = QVariant(strtoull(yytext, NULL, 10));
- if (errno == ERANGE) {
+ unsigned long long val = strtoull(yytext, NULL, 10);
+ *m_yylval = QVariant(val);
+ if (val == ULLONG_MAX && errno == ERANGE) {
qCritical() << "Number is out of range: " << yytext;
return yy::json_parser::token::INVALID;
}
@@ -3408,8 +3409,9 @@ YY_RULE_SETUP
#line 93 "json_scanner.yy"
{
m_yylloc->columns(yyleng);
- *m_yylval = QVariant(strtoll(yytext, NULL, 10));
- if (errno == ERANGE) {
+ long long val = strtoll(yytext, NULL, 10);
+ *m_yylval = QVariant(val);
+ if ((val == LLONG_MAX || val == LLONG_MIN) && errno == ERANGE) {
qCritical() << "Number is out of range: " << yytext;
return yy::json_parser::token::INVALID;
}
diff --git a/src/json_scanner.yy b/src/json_scanner.yy
index 1111111..2222222 100644
--- a/src/json_scanner.yy
+++ b/src/json_scanner.yy
@@ -81,8 +81,9 @@ null {
[0-9] |
[1-9][0-9]+ {
m_yylloc->columns(yyleng);
- *m_yylval = QVariant(strtoull(yytext, NULL, 10));
- if (errno == ERANGE) {
+ unsigned long long val = strtoull(yytext, NULL, 10);
+ *m_yylval = QVariant(val);
+ if (val == ULLONG_MAX && errno == ERANGE) {
qCritical() << "Number is out of range: " << yytext;
return yy::json_parser::token::INVALID;
}
@@ -92,8 +93,9 @@ null {
-[0-9] |
-[1-9][0-9]+ {
m_yylloc->columns(yyleng);
- *m_yylval = QVariant(strtoll(yytext, NULL, 10));
- if (errno == ERANGE) {
+ long long val = strtoll(yytext, NULL, 10);
+ *m_yylval = QVariant(val);
+ if ((val == LLONG_MAX || val == LLONG_MIN) && errno == ERANGE) {
qCritical() << "Number is out of range: " << yytext;
return yy::json_parser::token::INVALID;
}
|