Accept quoted int or float values as strings (#464)
Signed-off-by: ivanpauno <ivanpauno@ekumenlabs.com>
This commit is contained in:
parent
b6f4bc97fa
commit
d6ab086b02
3 changed files with 57 additions and 25 deletions
|
@ -772,40 +772,48 @@ static void * get_value(
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check for int
|
/// Check for int
|
||||||
errno = 0;
|
if (style != YAML_SINGLE_QUOTED_SCALAR_STYLE &&
|
||||||
ival = strtol(value, &endptr, 0);
|
style != YAML_DOUBLE_QUOTED_SCALAR_STYLE)
|
||||||
if ((0 == errno) && (NULL != endptr)) {
|
{
|
||||||
if ((NULL != endptr) && (endptr != value)) {
|
errno = 0;
|
||||||
if (('\0' != *value) && ('\0' == *endptr)) {
|
ival = strtol(value, &endptr, 0);
|
||||||
*val_type = DATA_TYPE_INT64;
|
if ((0 == errno) && (NULL != endptr)) {
|
||||||
ret_val = allocator.zero_allocate(1U, sizeof(int64_t), allocator.state);
|
if ((NULL != endptr) && (endptr != value)) {
|
||||||
if (NULL == ret_val) {
|
if (('\0' != *value) && ('\0' == *endptr)) {
|
||||||
return NULL;
|
*val_type = DATA_TYPE_INT64;
|
||||||
|
ret_val = allocator.zero_allocate(1U, sizeof(int64_t), allocator.state);
|
||||||
|
if (NULL == ret_val) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*((int64_t *)ret_val) = ival;
|
||||||
|
return ret_val;
|
||||||
}
|
}
|
||||||
*((int64_t *)ret_val) = ival;
|
|
||||||
return ret_val;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check for float
|
/// Check for float
|
||||||
errno = 0;
|
if (style != YAML_SINGLE_QUOTED_SCALAR_STYLE &&
|
||||||
endptr = NULL;
|
style != YAML_DOUBLE_QUOTED_SCALAR_STYLE)
|
||||||
dval = strtod(value, &endptr);
|
{
|
||||||
if ((0 == errno) && (NULL != endptr)) {
|
errno = 0;
|
||||||
if ((NULL != endptr) && (endptr != value)) {
|
endptr = NULL;
|
||||||
if (('\0' != *value) && ('\0' == *endptr)) {
|
dval = strtod(value, &endptr);
|
||||||
*val_type = DATA_TYPE_DOUBLE;
|
if ((0 == errno) && (NULL != endptr)) {
|
||||||
ret_val = allocator.zero_allocate(1U, sizeof(double), allocator.state);
|
if ((NULL != endptr) && (endptr != value)) {
|
||||||
if (NULL == ret_val) {
|
if (('\0' != *value) && ('\0' == *endptr)) {
|
||||||
return NULL;
|
*val_type = DATA_TYPE_DOUBLE;
|
||||||
|
ret_val = allocator.zero_allocate(1U, sizeof(double), allocator.state);
|
||||||
|
if (NULL == ret_val) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*((double *)ret_val) = dval;
|
||||||
|
return ret_val;
|
||||||
}
|
}
|
||||||
*((double *)ret_val) = dval;
|
|
||||||
return ret_val;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
errno = 0;
|
||||||
}
|
}
|
||||||
errno = 0;
|
|
||||||
|
|
||||||
/// It is a string
|
/// It is a string
|
||||||
*val_type = DATA_TYPE_STRING;
|
*val_type = DATA_TYPE_STRING;
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
initial_params_node:
|
||||||
|
ros__parameters:
|
||||||
|
sa1: ["Four", "score"]
|
||||||
|
sa2: ["and", "7"]
|
|
@ -22,7 +22,6 @@
|
||||||
#include "rcutils/filesystem.h"
|
#include "rcutils/filesystem.h"
|
||||||
|
|
||||||
static char cur_dir[1024];
|
static char cur_dir[1024];
|
||||||
rcutils_allocator_t allocator = rcutils_get_default_allocator();
|
|
||||||
|
|
||||||
TEST(test_file_parser, correct_syntax) {
|
TEST(test_file_parser, correct_syntax) {
|
||||||
rcutils_reset_error();
|
rcutils_reset_error();
|
||||||
|
@ -43,6 +42,27 @@ TEST(test_file_parser, correct_syntax) {
|
||||||
allocator.deallocate(path, allocator.state);
|
allocator.deallocate(path, allocator.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(test_file_parser, string_array_with_quoted_number) {
|
||||||
|
rcutils_reset_error();
|
||||||
|
EXPECT_TRUE(rcutils_get_cwd(cur_dir, 1024));
|
||||||
|
rcutils_allocator_t allocator = rcutils_get_default_allocator();
|
||||||
|
char * test_path = rcutils_join_path(cur_dir, "test", allocator);
|
||||||
|
char * path = rcutils_join_path(test_path, "string_array_with_quoted_number.yaml", allocator);
|
||||||
|
fprintf(stderr, "cur_path: %s\n", path);
|
||||||
|
EXPECT_TRUE(rcutils_exists(path));
|
||||||
|
rcl_params_t * params_hdl = rcl_yaml_node_struct_init(allocator);
|
||||||
|
EXPECT_TRUE(params_hdl);
|
||||||
|
if (params_hdl) {
|
||||||
|
bool res = rcl_parse_yaml_file(path, params_hdl);
|
||||||
|
fprintf(stderr, "%s\n", rcutils_get_error_string().str);
|
||||||
|
EXPECT_TRUE(res);
|
||||||
|
rcl_yaml_node_struct_print(params_hdl);
|
||||||
|
rcl_yaml_node_struct_fini(params_hdl);
|
||||||
|
}
|
||||||
|
allocator.deallocate(test_path, allocator.state);
|
||||||
|
allocator.deallocate(path, allocator.state);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(test_file_parser, multi_ns_correct_syntax) {
|
TEST(test_file_parser, multi_ns_correct_syntax) {
|
||||||
rcutils_reset_error();
|
rcutils_reset_error();
|
||||||
EXPECT_TRUE(rcutils_get_cwd(cur_dir, 1024));
|
EXPECT_TRUE(rcutils_get_cwd(cur_dir, 1024));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue