From 73319b1fefe213e56bdf2c3dd13a1b9bbea643af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Fri, 12 Sep 2025 20:47:05 +0800 Subject: [PATCH 1/4] initial fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- .../codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp | 8 ++++++-- test/native/idl_sa_test/idl_sa_client_test.cpp | 6 +++++- test/native/idl_sa_test/listen_ability/IListenAbility.idl | 2 +- .../idl_sa_test/listen_ability/include/listen_ability.h | 1 + .../idl_sa_test/listen_ability/src/listen_ability.cpp | 1 + test/sa_test/overloadfun_test/target_cpp/foo_stub.cpp.txt | 4 ++-- .../type_single_unsigned_fd/target_cpp/foo_stub.cpp.txt | 2 +- 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp b/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp index d6f8f26..3f64dac 100644 --- a/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp +++ b/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp @@ -365,10 +365,14 @@ void SaCppServiceStubCodeEmitter::EmitLocalVariable(const AutoPtr AutoPtr type = param->GetType(); const std::string name = param->GetName(); AutoPtr typeEmitter = GetTypeEmitter(type); - if (typeEmitter == nullptr) { + if (typeEmitter == nullptr || type == nullptr) { return; } - sb.Append(prefix).AppendFormat("%s %s;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); + if (type->getTypekind() == TypeKind::TYPE_FILEDESCRIPTOR) { + sb.Append(prefix).AppendFormat("%s %s = -1;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); + } else { + sb.Append(prefix).AppendFormat("%s %s;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); + } } void SaCppServiceStubCodeEmitter::EmitSaReturnParameter(const std::string &name, const TypeKind kind, diff --git a/test/native/idl_sa_test/idl_sa_client_test.cpp b/test/native/idl_sa_test/idl_sa_client_test.cpp index 3ae86d9..ce93da1 100644 --- a/test/native/idl_sa_test/idl_sa_client_test.cpp +++ b/test/native/idl_sa_test/idl_sa_client_test.cpp @@ -272,13 +272,17 @@ HWTEST_F(IdlSaUnitTest, IdlRawDataTest001, TestSize.Level1) MyRawdata in, out, inout, result; const char sampleData[] = "Hello!"; + int fd = -1; in.size = sizeof(sampleData); in.RawDataCpy(sampleData); out.size = sizeof(sampleData); out.RawDataCpy(sampleData); inout.size = sizeof(sampleData); inout.RawDataCpy(sampleData); - int32_t ret = client_->rawdata_test_func(in, out, inout, result); + int32_t ret = client_->rawdata_test_func(in, out, fd, inout, result); + if (fd >= 0) { + close(fd); + } std::cout << "TestRawData" << std::endl; EXPECT_STREQ(static_cast(out.data), "Hello, world!"); diff --git a/test/native/idl_sa_test/listen_ability/IListenAbility.idl b/test/native/idl_sa_test/listen_ability/IListenAbility.idl index 2064976..c19014b 100644 --- a/test/native/idl_sa_test/listen_ability/IListenAbility.idl +++ b/test/native/idl_sa_test/listen_ability/IListenAbility.idl @@ -27,5 +27,5 @@ interface OHOS.IListenAbility { FooUnion union_test_func([in] FooUnion inParam, [out] FooUnion outParam, [inout] FooUnion inoutParam); void ApplyQuickFix([in] String[] quickFixFiles, [in] boolean isDebug); void GetAllAppSuspendState([in] Map inApp, [out] Map outApp); - MyRawdata rawdata_test_func([in] MyRawdata inParam, [out] MyRawdata outParam, [inout] MyRawdata inoutParam); + MyRawdata rawdata_test_func([in] MyRawdata inParam, [out] MyRawdata outParam,[out] FileDescriptor fd [inout] MyRawdata inoutParam); } \ No newline at end of file diff --git a/test/native/idl_sa_test/listen_ability/include/listen_ability.h b/test/native/idl_sa_test/listen_ability/include/listen_ability.h index 8e2d993..3da94fb 100644 --- a/test/native/idl_sa_test/listen_ability/include/listen_ability.h +++ b/test/native/idl_sa_test/listen_ability/include/listen_ability.h @@ -65,6 +65,7 @@ public: ErrCode rawdata_test_func( const MyRawdata& inParam, MyRawdata& outParam, + int& fd, MyRawdata& inoutParam, MyRawdata& funcResult) override; diff --git a/test/native/idl_sa_test/listen_ability/src/listen_ability.cpp b/test/native/idl_sa_test/listen_ability/src/listen_ability.cpp index 147451b..d2a8247 100644 --- a/test/native/idl_sa_test/listen_ability/src/listen_ability.cpp +++ b/test/native/idl_sa_test/listen_ability/src/listen_ability.cpp @@ -131,6 +131,7 @@ ErrCode ListenAbility::GetAllAppSuspendState( ErrCode ListenAbility::rawdata_test_func( const MyRawdata& inParam, MyRawdata& outParam, + int& fd, MyRawdata& inoutParam, MyRawdata& funcResult) { diff --git a/test/sa_test/overloadfun_test/target_cpp/foo_stub.cpp.txt b/test/sa_test/overloadfun_test/target_cpp/foo_stub.cpp.txt index 8f4148d..4fea9a5 100644 --- a/test/sa_test/overloadfun_test/target_cpp/foo_stub.cpp.txt +++ b/test/sa_test/overloadfun_test/target_cpp/foo_stub.cpp.txt @@ -153,7 +153,7 @@ int32_t FooStub::OnRemoteRequest( return ERR_NONE; } case IFooIpcCode::COMMAND_OVERLOADFUN_OUT_FILEDESCRIPTOR_OUT_STRING: { - int outParam; + int outParam = -1; std::string result; ErrCode errCode = overloadfun(outParam, result); if (!reply.WriteInt32(errCode)) { @@ -205,7 +205,7 @@ int32_t FooStub::OnRemoteRequest( return ERR_NONE; } case IFooIpcCode::COMMAND_OVERLOADFUN_OUT_FILEDESCRIPTOR_OUT_U16STRING: { - int outParam; + int outParam = -1; std::u16string result; ErrCode errCode = overloadfun(outParam, result); if (!reply.WriteInt32(errCode)) { diff --git a/test/sa_test/type_single_unsigned_fd/target_cpp/foo_stub.cpp.txt b/test/sa_test/type_single_unsigned_fd/target_cpp/foo_stub.cpp.txt index 10ab776..2d44c5f 100644 --- a/test/sa_test/type_single_unsigned_fd/target_cpp/foo_stub.cpp.txt +++ b/test/sa_test/type_single_unsigned_fd/target_cpp/foo_stub.cpp.txt @@ -119,7 +119,7 @@ int32_t FooStub::OnRemoteRequest( } case IFooIpcCode::COMMAND_FD_TEST_FUNC: { int inParam = data.ReadFileDescriptor(); - int outParam; + int outParam = -1; int inoutParam = data.ReadFileDescriptor(); int result; ErrCode errCode = fd_test_func(inParam, outParam, inoutParam, result); -- Gitee From f9916a9003c58477dfcaae458f36ce4f9a1e9857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Fri, 12 Sep 2025 20:56:35 +0800 Subject: [PATCH 2/4] initial fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- .../keyword_ipccapacity_test_001/target_cpp/foo_stub.cpp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sa_test/keyword_ipccapacity_test_001/target_cpp/foo_stub.cpp.txt b/test/sa_test/keyword_ipccapacity_test_001/target_cpp/foo_stub.cpp.txt index 24a551a..8975492 100644 --- a/test/sa_test/keyword_ipccapacity_test_001/target_cpp/foo_stub.cpp.txt +++ b/test/sa_test/keyword_ipccapacity_test_001/target_cpp/foo_stub.cpp.txt @@ -183,7 +183,7 @@ int32_t FooStub::OnRemoteRequest( } case IFooIpcCode::COMMAND_FD_TEST_FUNC: { int inParam = data.ReadFileDescriptor(); - int outParam; + int outParam = -1; int inoutParam = data.ReadFileDescriptor(); int result; ErrCode errCode = fd_test_func(inParam, outParam, inoutParam, result); -- Gitee From bbc5dad70e275c9dd63e834a3ce73ddc00d805ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Sat, 13 Sep 2025 09:54:16 +0800 Subject: [PATCH 3/4] initial fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp b/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp index 3f64dac..16bfc63 100644 --- a/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp +++ b/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp @@ -368,7 +368,7 @@ void SaCppServiceStubCodeEmitter::EmitLocalVariable(const AutoPtr if (typeEmitter == nullptr || type == nullptr) { return; } - if (type->getTypekind() == TypeKind::TYPE_FILEDESCRIPTOR) { + if (type->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) { sb.Append(prefix).AppendFormat("%s %s = -1;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); } else { sb.Append(prefix).AppendFormat("%s %s;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); -- Gitee From a35932ba62a3a43db3d3e14ee851f2e17ad3e60a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Sat, 13 Sep 2025 10:16:48 +0800 Subject: [PATCH 4/4] initial fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp b/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp index 16bfc63..102ee13 100644 --- a/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp +++ b/idl_tool_2/codegen/SA/cpp/sa_cpp_service_stub_code_emitter.cpp @@ -369,7 +369,8 @@ void SaCppServiceStubCodeEmitter::EmitLocalVariable(const AutoPtr return; } if (type->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) { - sb.Append(prefix).AppendFormat("%s %s = -1;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); + sb.Append(prefix).AppendFormat("%s %s = -1;\n", + typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); } else { sb.Append(prefix).AppendFormat("%s %s;\n", typeEmitter->EmitCppType(TypeMode::LOCAL_VAR).c_str(), name.c_str()); } -- Gitee