cmTarget: Use strtol for numeric parsing.
On Windows apparently sscanf can not handle hex numbers. Test that numeric comparison works with hex numbers.
This commit is contained in:
parent
b225dbbd02
commit
2d6638008c
|
@ -24,6 +24,7 @@
|
|||
#include <set>
|
||||
#include <stdlib.h> // required for atof
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
const char* cmTarget::GetTargetTypeName(TargetType targetType)
|
||||
{
|
||||
|
@ -4274,6 +4275,7 @@ std::pair<bool, const char*> consistentNumberProperty(const char *lhs,
|
|||
const char *rhs,
|
||||
CompatibleType t)
|
||||
{
|
||||
char *pEnd;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
static const char* const null_ptr = 0;
|
||||
|
@ -4281,10 +4283,14 @@ std::pair<bool, const char*> consistentNumberProperty(const char *lhs,
|
|||
# define null_ptr 0
|
||||
#endif
|
||||
|
||||
double lnum;
|
||||
double rnum;
|
||||
if(sscanf(lhs, "%lg", &lnum) != 1 ||
|
||||
sscanf(rhs, "%lg", &rnum) != 1)
|
||||
long lnum = strtol(lhs, &pEnd, 0);
|
||||
if (pEnd == lhs || *pEnd != '\0' || errno == ERANGE)
|
||||
{
|
||||
return std::pair<bool, const char*>(false, null_ptr);
|
||||
}
|
||||
|
||||
long rnum = strtol(rhs, &pEnd, 0);
|
||||
if (pEnd == rhs || *pEnd != '\0' || errno == ERANGE)
|
||||
{
|
||||
return std::pair<bool, const char*>(false, null_ptr);
|
||||
}
|
||||
|
|
|
@ -24,6 +24,8 @@ set_property(TARGET iface1 APPEND PROPERTY
|
|||
COMPATIBLE_INTERFACE_NUMBER_MIN
|
||||
NUMBER_MIN_PROP1
|
||||
NUMBER_MIN_PROP2
|
||||
NUMBER_MIN_PROP3
|
||||
NUMBER_MIN_PROP4
|
||||
)
|
||||
set_property(TARGET iface1 APPEND PROPERTY
|
||||
COMPATIBLE_INTERFACE_NUMBER_MAX
|
||||
|
@ -34,7 +36,7 @@ set_property(TARGET iface1 APPEND PROPERTY
|
|||
set(CMAKE_DEBUG_TARGET_PROPERTIES
|
||||
BOOL_PROP1 BOOL_PROP2 BOOL_PROP3 BOOL_PROP4
|
||||
STRING_PROP1 STRING_PROP2 STRING_PROP3
|
||||
NUMBER_MIN_PROP1 NUMBER_MIN_PROP2
|
||||
NUMBER_MIN_PROP1 NUMBER_MIN_PROP2 NUMBER_MIN_PROP3 NUMBER_MIN_PROP4
|
||||
NUMBER_MAX_PROP1 NUMBER_MAX_PROP2
|
||||
)
|
||||
|
||||
|
@ -44,6 +46,8 @@ set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP1 prop1)
|
|||
set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP2 prop2)
|
||||
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP1 100)
|
||||
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP2 200)
|
||||
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP3 0x10)
|
||||
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP4 0x10)
|
||||
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MAX_PROP1 100)
|
||||
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MAX_PROP2 200)
|
||||
|
||||
|
@ -56,6 +60,8 @@ set_property(TARGET CompatibleInterface PROPERTY STRING_PROP2 prop2)
|
|||
set_property(TARGET CompatibleInterface PROPERTY STRING_PROP3 prop3)
|
||||
set_property(TARGET CompatibleInterface PROPERTY NUMBER_MIN_PROP1 50)
|
||||
set_property(TARGET CompatibleInterface PROPERTY NUMBER_MIN_PROP2 250)
|
||||
set_property(TARGET CompatibleInterface PROPERTY NUMBER_MIN_PROP3 0xA)
|
||||
set_property(TARGET CompatibleInterface PROPERTY NUMBER_MIN_PROP4 0x1A)
|
||||
set_property(TARGET CompatibleInterface PROPERTY NUMBER_MAX_PROP1 50)
|
||||
set_property(TARGET CompatibleInterface PROPERTY NUMBER_MAX_PROP2 250)
|
||||
|
||||
|
@ -69,6 +75,8 @@ target_compile_definitions(CompatibleInterface
|
|||
$<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP3>,prop3>:STRING_PROP3>
|
||||
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MIN_PROP1>,50>:NUMBER_MIN_PROP1=50>
|
||||
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MIN_PROP2>,200>:NUMBER_MIN_PROP2=200>
|
||||
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MIN_PROP3>,0xA>:NUMBER_MIN_PROP3=0xA>
|
||||
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MIN_PROP4>,0x10>:NUMBER_MIN_PROP4=0x10>
|
||||
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MAX_PROP1>,100>:NUMBER_MAX_PROP1=100>
|
||||
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MAX_PROP2>,250>:NUMBER_MAX_PROP2=250>
|
||||
)
|
||||
|
|
|
@ -33,7 +33,9 @@ enum {
|
|||
NumericMaxTest1 = sizeof(CMakeStaticAssert<NUMBER_MAX_PROP1 == 100>),
|
||||
NumericMaxTest2 = sizeof(CMakeStaticAssert<NUMBER_MAX_PROP2 == 250>),
|
||||
NumericMinTest1 = sizeof(CMakeStaticAssert<NUMBER_MIN_PROP1 == 50>),
|
||||
NumericMinTest2 = sizeof(CMakeStaticAssert<NUMBER_MIN_PROP2 == 200>)
|
||||
NumericMinTest2 = sizeof(CMakeStaticAssert<NUMBER_MIN_PROP2 == 200>),
|
||||
NumericMinTest3 = sizeof(CMakeStaticAssert<NUMBER_MIN_PROP3 == 0xA>),
|
||||
NumericMinTest4 = sizeof(CMakeStaticAssert<NUMBER_MIN_PROP4 == 0x10>)
|
||||
};
|
||||
|
||||
#include "iface2.h"
|
||||
|
|
Loading…
Reference in New Issue