Skip to content

Commit 4fcec36

Browse files
Chen LihuiChen Lihui
authored andcommitted
Add a helper function that make rcl_init_options_copy not to call rmw_init_options_fini
remove unnecessary test Signed-off-by: Chen Lihui <[email protected]>
1 parent 9f7f8b2 commit 4fcec36

File tree

2 files changed

+23
-25
lines changed

2 files changed

+23
-25
lines changed

rcl/src/rcl/init_options.c

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ rcl_get_zero_initialized_init_options(void)
3434
}; // NOLINT(readability/braces): false positive
3535
}
3636

37+
/// Initialize given init_options with the default values and zero-initialize implementation.
38+
RCL_LOCAL
39+
rcl_ret_t
40+
_rcl_init_options_init(rcl_init_options_t * init_options, rcl_allocator_t allocator)
41+
{
42+
init_options->impl = allocator.allocate(sizeof(rcl_init_options_impl_t), allocator.state);
43+
RCL_CHECK_FOR_NULL_WITH_MSG(
44+
init_options->impl,
45+
"failed to allocate memory for init options impl",
46+
return RCL_RET_BAD_ALLOC);
47+
init_options->impl->allocator = allocator;
48+
init_options->impl->rmw_init_options = rmw_get_zero_initialized_init_options();
49+
50+
return RCL_RET_OK;
51+
}
52+
3753
rcl_ret_t
3854
rcl_init_options_init(rcl_init_options_t * init_options, rcl_allocator_t allocator)
3955
{
@@ -48,13 +64,11 @@ rcl_init_options_init(rcl_init_options_t * init_options, rcl_allocator_t allocat
4864
return RCL_RET_ALREADY_INIT;
4965
}
5066
RCL_CHECK_ALLOCATOR(&allocator, return RCL_RET_INVALID_ARGUMENT);
51-
init_options->impl = allocator.allocate(sizeof(rcl_init_options_impl_t), allocator.state);
52-
RCL_CHECK_FOR_NULL_WITH_MSG(
53-
init_options->impl,
54-
"failed to allocate memory for init options impl",
55-
return RCL_RET_BAD_ALLOC);
56-
init_options->impl->allocator = allocator;
57-
init_options->impl->rmw_init_options = rmw_get_zero_initialized_init_options();
67+
68+
rcl_ret_t ret = _rcl_init_options_init(init_options, allocator);
69+
if (RCL_RET_OK != ret) {
70+
return ret;
71+
}
5872
rmw_ret_t rmw_ret = rmw_init_options_init(&(init_options->impl->rmw_init_options), allocator);
5973
if (RMW_RET_OK != rmw_ret) {
6074
allocator.deallocate(init_options->impl, allocator.state);
@@ -74,14 +88,15 @@ rcl_init_options_copy(const rcl_init_options_t * src, rcl_init_options_t * dst)
7488

7589
RCL_CHECK_ARGUMENT_FOR_NULL(src, RCL_RET_INVALID_ARGUMENT);
7690
RCL_CHECK_ARGUMENT_FOR_NULL(src->impl, RCL_RET_INVALID_ARGUMENT);
91+
RCL_CHECK_ALLOCATOR(&src->impl->allocator, return RCL_RET_INVALID_ARGUMENT);
7792
RCL_CHECK_ARGUMENT_FOR_NULL(dst, RCL_RET_INVALID_ARGUMENT);
7893
if (NULL != dst->impl) {
7994
RCL_SET_ERROR_MSG("given dst (rcl_init_options_t) is already initialized");
8095
return RCL_RET_ALREADY_INIT;
8196
}
8297

8398
// initialize dst (since we know it's in a zero initialized state)
84-
rcl_ret_t ret = rcl_init_options_init(dst, src->impl->allocator);
99+
rcl_ret_t ret = _rcl_init_options_init(dst, src->impl->allocator);
85100
if (RCL_RET_OK != ret) {
86101
return ret; // error already set
87102
}

rcl/test/rcl/test_init.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -548,23 +548,6 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_mocked_rcl_init_optio
548548
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options));
549549
}
550550

551-
// Mock rcl_init_options_copy to fail
552-
TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_copy_mocked_fail_fini) {
553-
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
554-
rcl_ret_t ret = rcl_init_options_init(&init_options, rcl_get_default_allocator());
555-
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
556-
OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
557-
{
558-
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options)) << rcl_get_error_string().str;
559-
});
560-
rcl_init_options_t init_options_dst = rcl_get_zero_initialized_init_options();
561-
auto mock = mocking_utils::inject_on_return("lib:rcl", rmw_init_options_fini, RMW_RET_ERROR);
562-
EXPECT_EQ(RCL_RET_ERROR, rcl_init_options_copy(&init_options, &init_options_dst));
563-
rcl_reset_error();
564-
auto mock_ok = mocking_utils::inject_on_return("lib:rcl", rmw_init_options_fini, RMW_RET_OK);
565-
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst));
566-
}
567-
568551
// Mock rcl_init_options_copy to fail
569552
TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_options_copy_fail_rmw_copy) {
570553
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();

0 commit comments

Comments
 (0)