Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
communication_ipc
提交
30ce5d05
C
communication_ipc
项目概览
OpenHarmony
/
communication_ipc
大约 1 年 前同步成功
通知
20
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
communication_ipc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
30ce5d05
编写于
12月 31, 2021
作者:
O
openharmony_ci
提交者:
Gitee
12月 31, 2021
浏览文件
操作
浏览文件
下载
差异文件
!66 RPC支持基础数据类型序列化/反序列化
Merge pull request !66 from 穆天亮/master
上级
25f0f857
1630b8a5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
1283 addition
and
1 deletion
+1283
-1
interfaces/innerkits/c/ipc/include/serializer.h
interfaces/innerkits/c/ipc/include/serializer.h
+70
-0
ipc/native/c/manager/src/serializer.c
ipc/native/c/manager/src/serializer.c
+1213
-1
未找到文件。
interfaces/innerkits/c/ipc/include/serializer.h
浏览文件 @
30ce5d05
...
...
@@ -54,6 +54,76 @@ bool WriteFileDescriptor(IpcIo *io, uint32_t fd);
bool
ReadRemoteObject
(
IpcIo
*
io
,
SvcIdentity
*
svc
);
int32_t
ReadFileDescriptor
(
IpcIo
*
io
);
bool
WriteBool
(
IpcIo
*
io
,
bool
value
);
bool
WriteInt8
(
IpcIo
*
io
,
int8_t
value
);
bool
WriteInt16
(
IpcIo
*
io
,
int16_t
value
);
bool
WriteInt32
(
IpcIo
*
io
,
int32_t
value
);
bool
WriteInt64
(
IpcIo
*
io
,
int64_t
value
);
bool
WriteUint8
(
IpcIo
*
io
,
uint8_t
value
);
bool
WriteUint16
(
IpcIo
*
io
,
uint16_t
value
);
bool
WriteUint32
(
IpcIo
*
io
,
uint32_t
value
);
bool
WriteUint64
(
IpcIo
*
io
,
uint64_t
value
);
bool
WriteBoolUnaligned
(
IpcIo
*
io
,
bool
value
);
bool
WriteInt8Unaligned
(
IpcIo
*
io
,
int8_t
value
);
bool
WriteInt16Unaligned
(
IpcIo
*
io
,
int16_t
value
);
bool
WriteUint8Unaligned
(
IpcIo
*
io
,
uint8_t
value
);
bool
WriteUint16Unaligned
(
IpcIo
*
io
,
uint16_t
value
);
bool
WriteFloat
(
IpcIo
*
io
,
float
value
);
bool
WriteDouble
(
IpcIo
*
io
,
double
value
);
bool
WritePointer
(
IpcIo
*
io
,
uintptr_t
value
);
bool
WriteString
(
IpcIo
*
io
,
const
char
*
value
);
bool
ReadBool
(
IpcIo
*
io
,
bool
*
value
);
bool
ReadInt8
(
IpcIo
*
io
,
int8_t
*
value
);
bool
ReadInt16
(
IpcIo
*
io
,
int16_t
*
value
);
bool
ReadInt32
(
IpcIo
*
io
,
int32_t
*
value
);
bool
ReadInt64
(
IpcIo
*
io
,
int64_t
*
value
);
bool
ReadUint8
(
IpcIo
*
io
,
uint8_t
*
value
);
bool
ReadUint16
(
IpcIo
*
io
,
uint16_t
*
value
);
bool
ReadUint32
(
IpcIo
*
io
,
uint32_t
*
value
);
bool
ReadUint64
(
IpcIo
*
io
,
uint64_t
*
value
);
bool
ReadFloat
(
IpcIo
*
io
,
float
*
value
);
bool
ReadDouble
(
IpcIo
*
io
,
double
*
value
);
uintptr_t
ReadPointer
(
IpcIo
*
io
);
bool
ReadBoolUnaligned
(
IpcIo
*
io
,
bool
*
value
);
bool
ReadInt8Unaligned
(
IpcIo
*
io
,
int8_t
*
value
);
bool
ReadInt16Unaligned
(
IpcIo
*
io
,
int16_t
*
value
);
bool
ReadUInt8Unaligned
(
IpcIo
*
io
,
uint8_t
*
value
);
bool
ReadUInt16Unaligned
(
IpcIo
*
io
,
uint16_t
*
value
);
uint8_t
*
ReadString
(
IpcIo
*
io
,
size_t
*
len
);
bool
WriteString16
(
IpcIo
*
io
,
const
uint16_t
*
value
,
size_t
len
);
bool
WriteBuffer
(
IpcIo
*
io
,
const
void
*
data
,
size_t
size
);
bool
WriteInterfaceToken
(
IpcIo
*
io
,
const
uint16_t
*
name
,
size_t
len
);
bool
WriteRawData
(
IpcIo
*
io
,
const
void
*
data
,
size_t
size
);
bool
WriteBoolVector
(
IpcIo
*
io
,
const
bool
*
val
,
size_t
size
);
bool
WriteInt8Vector
(
IpcIo
*
io
,
const
int8_t
*
val
,
size_t
size
);
bool
WriteInt16Vector
(
IpcIo
*
io
,
const
int16_t
*
val
,
size_t
size
);
bool
WriteInt32Vector
(
IpcIo
*
io
,
const
int32_t
*
val
,
size_t
size
);
bool
WriteInt64Vector
(
IpcIo
*
io
,
const
int64_t
*
val
,
size_t
size
);
bool
WriteUInt8Vector
(
IpcIo
*
io
,
const
uint8_t
*
val
,
size_t
size
);
bool
WriteUInt16Vector
(
IpcIo
*
io
,
const
uint16_t
*
val
,
size_t
size
);
bool
WriteUInt32Vector
(
IpcIo
*
io
,
const
uint32_t
*
val
,
size_t
size
);
bool
WriteUInt64Vector
(
IpcIo
*
io
,
const
uint64_t
*
val
,
size_t
size
);
bool
WriteFloatVector
(
IpcIo
*
io
,
const
float
*
val
,
size_t
size
);
bool
WriteDoubleVector
(
IpcIo
*
io
,
const
double
*
val
,
size_t
size
);
uint16_t
*
ReadString16
(
IpcIo
*
io
,
size_t
*
size
);
uint16_t
*
ReadInterfaceToken
(
IpcIo
*
io
,
size_t
*
size
);
const
uint8_t
*
ReadBuffer
(
IpcIo
*
io
,
size_t
size
);
void
*
ReadRawData
(
IpcIo
*
io
,
size_t
size
);
bool
*
ReadBoolVector
(
IpcIo
*
io
,
size_t
*
size
);
int8_t
*
ReadInt8Vector
(
IpcIo
*
io
,
size_t
*
size
);
int16_t
*
ReadInt16Vector
(
IpcIo
*
io
,
size_t
*
size
);
int32_t
*
ReadInt32Vector
(
IpcIo
*
io
,
size_t
*
size
);
int64_t
*
ReadInt64Vector
(
IpcIo
*
io
,
size_t
*
size
);
uint8_t
*
ReadUInt8Vector
(
IpcIo
*
io
,
size_t
*
size
);
uint16_t
*
ReadUInt16Vector
(
IpcIo
*
io
,
size_t
*
size
);
uint32_t
*
ReadUInt32Vector
(
IpcIo
*
io
,
size_t
*
size
);
uint64_t
*
ReadUInt64Vector
(
IpcIo
*
io
,
size_t
*
size
);
float
*
ReadFloatVector
(
IpcIo
*
io
,
size_t
*
size
);
double
*
ReadDoubleVector
(
IpcIo
*
io
,
size_t
*
size
);
#ifdef __cplusplus
#if __cplusplus
}
...
...
ipc/native/c/manager/src/serializer.c
浏览文件 @
30ce5d05
...
...
@@ -271,4 +271,1216 @@ int32_t ReadFileDescriptor(IpcIo *io)
(
void
)
io
;
return
-
1
;
}
#endif
\ No newline at end of file
#endif
static
void
*
IoPushUnaligned
(
IpcIo
*
io
,
size_t
size
)
{
IPC_IO_RETURN_IF_FAIL
(
io
!=
NULL
);
IPC_IO_RETURN_IF_FAIL
(
IpcIoAvailable
(
io
));
if
(
size
>
io
->
bufferLeft
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
NULL
;
}
else
{
void
*
ptr
=
io
->
bufferCur
;
io
->
bufferCur
+=
size
;
io
->
bufferLeft
-=
size
;
return
ptr
;
}
}
bool
WriteInt32
(
IpcIo
*
io
,
int32_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int32_t
*
ptr
=
(
int32_t
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteUint32
(
IpcIo
*
io
,
uint32_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint32_t
*
ptr
=
(
uint32_t
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteBool
(
IpcIo
*
io
,
bool
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
return
WriteInt32
(
io
,
(
int32_t
)
value
);
}
bool
WriteBoolUnaligned
(
IpcIo
*
io
,
bool
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
*
ptr
=
(
bool
*
)
IoPushUnaligned
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WritePointer
(
IpcIo
*
io
,
uintptr_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uintptr_t
*
ptr
=
(
uintptr_t
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteInt8
(
IpcIo
*
io
,
int8_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
return
WriteInt32
(
io
,
(
int32_t
)
value
);
}
bool
WriteInt8Unaligned
(
IpcIo
*
io
,
int8_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int8_t
*
ptr
=
(
int8_t
*
)
IoPushUnaligned
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteUint8
(
IpcIo
*
io
,
uint8_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
return
WriteUint32
(
io
,
(
uint32_t
)
value
);
}
bool
WriteUint8Unaligned
(
IpcIo
*
io
,
uint8_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPushUnaligned
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteInt16
(
IpcIo
*
io
,
int16_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
return
WriteInt32
(
io
,
(
int32_t
)
value
);
}
bool
WriteInt16Unaligned
(
IpcIo
*
io
,
int16_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int16_t
*
ptr
=
(
int16_t
*
)
IoPushUnaligned
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteUint16
(
IpcIo
*
io
,
uint16_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
return
WriteUint32
(
io
,
(
uint32_t
)
value
);
}
bool
WriteUint16Unaligned
(
IpcIo
*
io
,
uint16_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPushUnaligned
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteInt64
(
IpcIo
*
io
,
int64_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int64_t
*
ptr
=
(
int64_t
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteUint64
(
IpcIo
*
io
,
uint64_t
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint64_t
*
ptr
=
(
uint64_t
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteFloat
(
IpcIo
*
io
,
float
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
float
*
ptr
=
(
float
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteDouble
(
IpcIo
*
io
,
double
value
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
double
*
ptr
=
(
double
*
)
IoPush
(
io
,
sizeof
(
value
));
if
(
ptr
!=
NULL
)
{
*
ptr
=
value
;
return
true
;
}
return
false
;
}
bool
WriteString
(
IpcIo
*
io
,
const
char
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
unsigned
char
*
str
=
(
unsigned
char
*
)
value
;
size_t
len
;
uint8_t
*
ptr
=
NULL
;
len
=
strnlen
(
value
,
MAX_IO_SIZE
);
if
(
len
==
MAX_IO_SIZE
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
/* Note: The payload will carry 32bit size instead of size_t */
if
(
!
WriteUint32
(
io
,
(
uint32_t
)
len
))
{
return
false
;
}
ptr
=
(
uint8_t
*
)
IoPush
(
io
,
len
+
1
);
if
(
ptr
!=
NULL
)
{
if
(
memset_s
(
ptr
,
IPC_IO_ALIGN
(
len
+
1
),
0
,
IPC_IO_ALIGN
(
len
+
1
))
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
if
(
memcpy_s
(
ptr
,
IPC_IO_ALIGN
(
len
+
1
),
str
,
len
+
1
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
static
void
*
IoPopUnaligned
(
IpcIo
*
io
,
size_t
size
)
{
IPC_IO_RETURN_IF_FAIL
(
io
!=
NULL
);
IPC_IO_RETURN_IF_FAIL
(
IpcIoAvailable
(
io
));
if
(
io
->
bufferLeft
<
size
)
{
io
->
bufferLeft
=
0
;
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
NULL
;
}
else
{
void
*
ptr
=
io
->
bufferCur
;
io
->
bufferCur
+=
size
;
io
->
bufferLeft
-=
size
;
return
ptr
;
}
}
bool
ReadBool
(
IpcIo
*
io
,
bool
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
*
ptr
=
(
bool
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadBoolUnaligned
(
IpcIo
*
io
,
bool
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
*
ptr
=
(
bool
*
)
IoPopUnaligned
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
uintptr_t
ReadPointer
(
IpcIo
*
io
)
{
if
(
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uintptr_t
*
ptr
=
(
uintptr_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
return
ptr
?
*
ptr
:
0
;
}
bool
ReadInt8
(
IpcIo
*
io
,
int8_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int8_t
*
ptr
=
(
int8_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadInt8Unaligned
(
IpcIo
*
io
,
int8_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int8_t
*
ptr
=
(
int8_t
*
)
IoPopUnaligned
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadUint8
(
IpcIo
*
io
,
uint8_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadUInt8Unaligned
(
IpcIo
*
io
,
uint8_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPopUnaligned
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadInt16
(
IpcIo
*
io
,
int16_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int16_t
*
ptr
=
(
int16_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadInt16Unaligned
(
IpcIo
*
io
,
int16_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int16_t
*
ptr
=
(
int16_t
*
)
IoPopUnaligned
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadUint16
(
IpcIo
*
io
,
uint16_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadUInt16Unaligned
(
IpcIo
*
io
,
uint16_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPopUnaligned
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadInt32
(
IpcIo
*
io
,
int32_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int32_t
*
ptr
=
(
int32_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadUint32
(
IpcIo
*
io
,
uint32_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint32_t
*
ptr
=
(
uint32_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadInt64
(
IpcIo
*
io
,
int64_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
int64_t
*
ptr
=
(
int64_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadUint64
(
IpcIo
*
io
,
uint64_t
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint64_t
*
ptr
=
(
uint64_t
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadFloat
(
IpcIo
*
io
,
float
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
float
*
ptr
=
(
float
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
bool
ReadDouble
(
IpcIo
*
io
,
double
*
value
)
{
if
(
io
==
NULL
||
value
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
double
*
ptr
=
(
double
*
)
IoPop
(
io
,
sizeof
(
*
ptr
));
if
(
ptr
!=
NULL
)
{
*
value
=
*
ptr
;
return
true
;
}
return
false
;
}
uint8_t
*
ReadString
(
IpcIo
*
io
,
size_t
*
len
)
{
if
(
io
==
NULL
||
len
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || len == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
uint32_t
value
;
bool
ret
=
ReadUint32
(
io
,
&
value
);
if
(
ret
)
{
*
len
=
value
;
}
if
(
value
>
MAX_IO_SIZE
)
{
return
NULL
;
}
return
(
uint8_t
*
)
IoPop
(
io
,
value
+
1
);
}
static
bool
WriteBufferAddTerminator
(
IpcIo
*
io
,
const
void
*
value
,
size_t
size
,
size_t
sizeType
)
{
if
(
value
==
NULL
||
size
<
sizeType
||
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC value == NULL || size < sizeType || io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
if
(
size
>
MAX_IO_SIZE
)
{
RPC_LOG_ERROR
(
"IPC size > MAX_IO_SIZE failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
size_t
desireCapacity
=
IPC_IO_ALIGN
(
size
);
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPush
(
io
,
desireCapacity
);
if
(
ptr
!=
NULL
)
{
if
(
memcpy_s
(
ptr
,
desireCapacity
,
value
,
size
-
sizeType
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
if
(
memset_s
(
ptr
+
(
size
-
sizeType
),
desireCapacity
-
size
+
sizeType
,
0
,
desireCapacity
-
size
+
sizeType
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteString16
(
IpcIo
*
io
,
const
uint16_t
*
value
,
size_t
len
)
{
if
(
io
==
NULL
||
value
==
NULL
||
len
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || value == NULL || len <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
size_t
typeSize
=
sizeof
(
uint16_t
);
size_t
desireCapacity
=
(
len
+
1
)
*
typeSize
;
if
(
desireCapacity
>
MAX_IO_SIZE
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
RPC_LOG_ERROR
(
"IPC desireCapacity > MAX_IO_SIZE failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
/* Note: The payload will carry 32bit size instead of size_t */
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
len
);
if
(
ret
)
{
ret
=
WriteBufferAddTerminator
(
io
,
value
,
desireCapacity
,
typeSize
);
}
return
ret
;
}
bool
WriteBuffer
(
IpcIo
*
io
,
const
void
*
data
,
size_t
size
)
{
if
(
data
==
NULL
||
size
<=
0
||
io
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC data == NULL || size <= 0 || io == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
if
(
size
>
MAX_IO_SIZE
)
{
RPC_LOG_ERROR
(
"IPC size > MAX_IO_SIZE failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
size_t
desireCapacity
=
IPC_IO_ALIGN
(
size
);
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPush
(
io
,
desireCapacity
);
if
(
ptr
!=
NULL
)
{
if
(
memcpy_s
(
ptr
,
desireCapacity
,
data
,
size
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
if
(
memset_s
(
ptr
+
size
,
desireCapacity
-
size
,
0
,
desireCapacity
-
size
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteInterfaceToken
(
IpcIo
*
io
,
const
uint16_t
*
name
,
size_t
len
)
{
if
(
io
==
NULL
||
name
==
NULL
||
len
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || name == NULL || len <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
size_t
typeSize
=
sizeof
(
uint16_t
);
size_t
desireCapacity
=
(
len
+
1
)
*
typeSize
;
if
(
desireCapacity
>
MAX_IO_SIZE
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
RPC_LOG_ERROR
(
"IPC desireCapacity > MAX_IO_SIZE failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
return
WriteString16
(
io
,
name
,
len
);
}
bool
WriteRawData
(
IpcIo
*
io
,
const
void
*
data
,
size_t
size
)
{
if
(
io
==
NULL
||
data
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || data == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
if
(
size
>
MAX_IO_SIZE
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
RPC_LOG_ERROR
(
"IPC size > MAX_IO_SIZE failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
ret
=
WriteBuffer
(
io
,
data
,
size
);
}
return
ret
;
}
bool
WriteBoolVector
(
IpcIo
*
io
,
const
bool
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
for
(
int32_t
i
=
0
;
i
!=
size
;
i
++
)
{
ret
=
WriteBool
(
io
,
val
[
i
]);
if
(
!
ret
)
{
return
false
;
}
}
return
true
;
}
return
false
;
}
bool
WriteInt8Vector
(
IpcIo
*
io
,
const
int8_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
int8_t
);
int8_t
*
ptr
=
(
int8_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteInt16Vector
(
IpcIo
*
io
,
const
int16_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
for
(
int32_t
i
=
0
;
i
!=
size
;
i
++
)
{
ret
=
WriteInt16
(
io
,
val
[
i
]);
if
(
!
ret
)
{
return
false
;
}
}
return
true
;
}
return
false
;
}
bool
WriteInt32Vector
(
IpcIo
*
io
,
const
int32_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
int32_t
);
int32_t
*
ptr
=
(
int32_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteInt64Vector
(
IpcIo
*
io
,
const
int64_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
int64_t
);
int64_t
*
ptr
=
(
int64_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteUInt8Vector
(
IpcIo
*
io
,
const
uint8_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
uint8_t
);
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteUInt16Vector
(
IpcIo
*
io
,
const
uint16_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
uint16_t
);
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteUInt32Vector
(
IpcIo
*
io
,
const
uint32_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
uint32_t
);
uint32_t
*
ptr
=
(
uint32_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteUInt64Vector
(
IpcIo
*
io
,
const
uint64_t
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
uint64_t
);
uint64_t
*
ptr
=
(
uint64_t
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteFloatVector
(
IpcIo
*
io
,
const
float
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
float
);
float
*
ptr
=
(
float
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
bool
WriteDoubleVector
(
IpcIo
*
io
,
const
double
*
val
,
size_t
size
)
{
if
(
io
==
NULL
||
val
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || val == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
false
;
}
bool
ret
=
WriteUint32
(
io
,
(
uint32_t
)
size
);
if
(
ret
)
{
size_t
desireCapacity
=
size
*
sizeof
(
double
);
double
*
ptr
=
(
double
*
)
IoPushUnaligned
(
io
,
desireCapacity
);
if
(
ptr
==
NULL
)
{
return
false
;
}
if
(
memcpy_s
(
ptr
,
desireCapacity
,
val
,
desireCapacity
)
!=
EOK
)
{
io
->
flag
|=
IPC_IO_OVERFLOW
;
return
false
;
}
return
true
;
}
return
false
;
}
uint16_t
*
ReadString16
(
IpcIo
*
io
,
size_t
*
len
)
{
if
(
io
==
NULL
||
len
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || len == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
len
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
(
*
len
+
1
)
*
sizeof
(
uint16_t
);
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPop
(
io
,
readCapacity
);
if
(
ptr
[
*
len
]
==
0
)
{
return
ptr
;
}
else
{
return
NULL
;
}
}
uint16_t
*
ReadInterfaceToken
(
IpcIo
*
io
,
size_t
*
len
)
{
if
(
io
==
NULL
||
len
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || len == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
len
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
(
*
len
+
1
)
*
sizeof
(
uint16_t
);
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPop
(
io
,
readCapacity
);
if
(
ptr
!=
NULL
&&
ptr
[
*
len
]
==
0
)
{
return
ptr
;
}
else
{
return
NULL
;
}
}
const
uint8_t
*
ReadBuffer
(
IpcIo
*
io
,
size_t
size
)
{
if
(
io
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
return
(
uint8_t
*
)
IoPop
(
io
,
size
);
}
void
*
ReadRawData
(
IpcIo
*
io
,
size_t
size
)
{
if
(
io
==
NULL
||
size
<=
0
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size <= 0 failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
uint32_t
len
=
0
;
ReadUint32
(
io
,
&
len
);
if
(
len
!=
(
uint32_t
)
size
)
{
return
NULL
;
}
return
(
void
*
)
ReadBuffer
(
io
,
(
size_t
)
len
);
}
bool
*
ReadBoolVector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
bool
*
val
=
(
bool
*
)
malloc
((
*
size
)
*
sizeof
(
bool
));
if
(
val
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC malloc failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
int32_t
*
ptr
=
NULL
;
for
(
int32_t
i
=
0
;
i
!=
*
size
;
i
++
)
{
ptr
=
(
int32_t
*
)
IoPop
(
io
,
sizeof
(
int32_t
));
if
(
ptr
==
NULL
)
{
free
(
val
);
return
NULL
;
}
val
[
i
]
=
(
bool
)(
*
ptr
);
}
return
val
;
}
int8_t
*
ReadInt8Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
int8_t
);
int8_t
*
ptr
=
(
int8_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
int16_t
*
ReadInt16Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
int16_t
*
val
=
(
int16_t
*
)
malloc
((
*
size
)
*
sizeof
(
int16_t
));
if
(
val
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC malloc failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
int32_t
*
ptr
=
NULL
;
for
(
int32_t
i
=
0
;
i
!=
*
size
;
i
++
)
{
ptr
=
(
int32_t
*
)
IoPop
(
io
,
sizeof
(
int32_t
));
if
(
ptr
==
NULL
)
{
free
(
val
);
return
NULL
;
}
val
[
i
]
=
(
int16_t
)(
*
ptr
);
}
return
val
;
}
int32_t
*
ReadInt32Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
int32_t
);
int32_t
*
ptr
=
(
int32_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
int64_t
*
ReadInt64Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
int64_t
);
int64_t
*
ptr
=
(
int64_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
uint8_t
*
ReadUInt8Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
uint8_t
);
uint8_t
*
ptr
=
(
uint8_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
uint16_t
*
ReadUInt16Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
uint16_t
);
uint16_t
*
ptr
=
(
uint16_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
uint32_t
*
ReadUInt32Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
uint32_t
);
uint32_t
*
ptr
=
(
uint32_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
uint64_t
*
ReadUInt64Vector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
uint64_t
);
uint64_t
*
ptr
=
(
uint64_t
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
float
*
ReadFloatVector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
float
);
float
*
ptr
=
(
float
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
double
*
ReadDoubleVector
(
IpcIo
*
io
,
size_t
*
size
)
{
if
(
io
==
NULL
||
size
==
NULL
)
{
RPC_LOG_ERROR
(
"IPC io == NULL || size == NULL failed: %s:%d
\n
"
,
__FUNCTION__
,
__LINE__
);
return
NULL
;
}
bool
ret
=
ReadUint32
(
io
,
(
uint32_t
*
)
size
);
if
(
!
ret
)
{
return
NULL
;
}
size_t
readCapacity
=
*
size
*
sizeof
(
double
);
double
*
ptr
=
(
double
*
)
IoPopUnaligned
(
io
,
readCapacity
);
if
(
ptr
==
NULL
)
{
return
NULL
;
}
return
ptr
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录