Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Startup Init Lite
提交
a7141dfc
S
Startup Init Lite
项目概览
OpenHarmony
/
Startup Init Lite
大约 1 年 前同步成功
通知
3
Star
37
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Startup Init Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
a7141dfc
编写于
11月 04, 2022
作者:
O
openharmony_ci
提交者:
Gitee
11月 04, 2022
浏览文件
操作
浏览文件
下载
差异文件
!1453 增加ut分支覆盖率
Merge pull request !1453 from Mupceet/code_add_coverage_rate
上级
14de9ab2
9d196d57
变更
76
隐藏空白更改
内联
并排
Showing
76 changed file
with
440 addition
and
475 deletion
+440
-475
device_info/device_info.cpp
device_info/device_info.cpp
+0
-2
device_info/device_info_kits.cpp
device_info/device_info_kits.cpp
+1
-1
device_info/device_info_kits.h
device_info/device_info_kits.h
+2
-1
device_info/device_info_proxy.cpp
device_info/device_info_proxy.cpp
+20
-2
device_info/device_info_proxy.h
device_info/device_info_proxy.h
+4
-1
device_info/device_info_stub.cpp
device_info/device_info_stub.cpp
+4
-5
device_info/device_info_stub.h
device_info/device_info_stub.h
+0
-2
device_info/idevice_info.h
device_info/idevice_info.h
+0
-1
interfaces/innerkits/control_fd/control_fd.h
interfaces/innerkits/control_fd/control_fd.h
+6
-0
interfaces/innerkits/control_fd/control_fd_client.c
interfaces/innerkits/control_fd/control_fd_client.c
+15
-11
interfaces/innerkits/control_fd/control_fd_service.c
interfaces/innerkits/control_fd/control_fd_service.c
+9
-4
interfaces/innerkits/fd_holder/fd_holder.c
interfaces/innerkits/fd_holder/fd_holder.c
+1
-1
interfaces/innerkits/fd_holder/fd_holder_internal.c
interfaces/innerkits/fd_holder/fd_holder_internal.c
+28
-24
interfaces/innerkits/fs_manager/fstab.c
interfaces/innerkits/fs_manager/fstab.c
+2
-2
interfaces/innerkits/include/beget_ext.h
interfaces/innerkits/include/beget_ext.h
+7
-1
interfaces/innerkits/service_control/service_control.c
interfaces/innerkits/service_control/service_control.c
+1
-2
services/begetctl/begetctl.h
services/begetctl/begetctl.h
+1
-2
services/begetctl/bootchart_cmd.c
services/begetctl/bootchart_cmd.c
+1
-16
services/begetctl/misc_daemon.cpp
services/begetctl/misc_daemon.cpp
+3
-14
services/begetctl/partitionslot.cpp
services/begetctl/partitionslot.cpp
+13
-27
services/begetctl/sandbox.cpp
services/begetctl/sandbox.cpp
+2
-7
services/begetctl/service_control.c
services/begetctl/service_control.c
+3
-2
services/init/adapter/init_adapter.c
services/init/adapter/init_adapter.c
+0
-9
services/init/include/init.h
services/init/include/init.h
+6
-0
services/init/include/init_adapter.h
services/init/include/init_adapter.h
+0
-1
services/init/init_common_cmds.c
services/init/init_common_cmds.c
+6
-6
services/init/init_common_service.c
services/init/init_common_service.c
+4
-8
services/init/init_group_manager.c
services/init/init_group_manager.c
+0
-1
services/init/lite/init_signal_handler.c
services/init/lite/init_signal_handler.c
+13
-1
services/init/standard/fd_holder_service.c
services/init/standard/fd_holder_service.c
+2
-68
services/init/standard/init.c
services/init/standard/init.c
+7
-5
services/init/standard/init_cmds.c
services/init/standard/init_cmds.c
+15
-48
services/init/standard/init_mount.c
services/init/standard/init_mount.c
+1
-3
services/init/standard/init_service.c
services/init/standard/init_service.c
+2
-3
services/init/standard/init_signal_handler.c
services/init/standard/init_signal_handler.c
+11
-12
services/log/init_log.c
services/log/init_log.c
+6
-8
services/loopevent/loop/le_epoll.c
services/loopevent/loop/le_epoll.c
+5
-2
services/loopevent/loop/le_loop.c
services/loopevent/loop/le_loop.c
+5
-2
services/loopevent/socket/le_socket.c
services/loopevent/socket/le_socket.c
+2
-2
services/loopevent/task/le_task.c
services/loopevent/task/le_task.c
+1
-1
services/loopevent/utils/le_utils.c
services/loopevent/utils/le_utils.c
+1
-5
services/modules/bootchart/bootchart.c
services/modules/bootchart/bootchart.c
+12
-12
services/modules/bootchart/bootchart.h
services/modules/bootchart/bootchart.h
+6
-0
services/modules/bootevent/bootevent.c
services/modules/bootevent/bootevent.c
+4
-3
services/modules/init_hook/init_hook.c
services/modules/init_hook/init_hook.c
+3
-3
services/modules/reboot/reboot_static.c
services/modules/reboot/reboot_static.c
+2
-0
services/modules/selinux/selinux_adp.c
services/modules/selinux/selinux_adp.c
+7
-3
services/modules/selinux/selinux_static.c
services/modules/selinux/selinux_static.c
+2
-0
services/param/adapter/param_dac.c
services/param/adapter/param_dac.c
+4
-0
services/param/adapter/param_persistadp.c
services/param/adapter/param_persistadp.c
+6
-9
services/param/adapter/param_selinux.c
services/param/adapter/param_selinux.c
+5
-5
services/param/base/param_base.c
services/param/base/param_base.c
+6
-13
services/param/base/param_comm.c
services/param/base/param_comm.c
+1
-4
services/param/base/param_trie.c
services/param/base/param_trie.c
+23
-19
services/param/include/param_osadp.h
services/param/include/param_osadp.h
+3
-1
services/param/linux/param_message.c
services/param/linux/param_message.c
+6
-5
services/param/linux/param_service.c
services/param/linux/param_service.c
+5
-0
services/param/manager/param_server.c
services/param/manager/param_server.c
+3
-4
services/param/watcher/agent/watcher_manager_kits.cpp
services/param/watcher/agent/watcher_manager_kits.cpp
+1
-9
services/param/watcher/agent/watcher_manager_kits.h
services/param/watcher/agent/watcher_manager_kits.h
+2
-4
services/param/watcher/agent/watcher_manager_proxy.cpp
services/param/watcher/agent/watcher_manager_proxy.cpp
+18
-12
services/param/watcher/agent/watcher_manager_proxy.h
services/param/watcher/agent/watcher_manager_proxy.h
+4
-1
services/param/watcher/agent/watcher_stub.cpp
services/param/watcher/agent/watcher_stub.cpp
+3
-3
services/param/watcher/proxy/watcher_manager.cpp
services/param/watcher/proxy/watcher_manager.cpp
+35
-9
services/param/watcher/proxy/watcher_manager.h
services/param/watcher/proxy/watcher_manager.h
+3
-21
services/param/watcher/proxy/watcher_manager_stub.cpp
services/param/watcher/proxy/watcher_manager_stub.cpp
+1
-3
services/param/watcher/proxy/watcher_proxy.cpp
services/param/watcher/proxy/watcher_proxy.cpp
+10
-4
services/utils/init_hashmap.c
services/utils/init_hashmap.c
+12
-12
services/utils/init_utils.c
services/utils/init_utils.c
+2
-0
test/unittest/BUILD.gn
test/unittest/BUILD.gn
+2
-0
ueventd/include/ueventd.h
ueventd/include/ueventd.h
+10
-0
ueventd/include/ueventd_device_handler.h
ueventd/include/ueventd_device_handler.h
+11
-0
ueventd/include/ueventd_socket.h
ueventd/include/ueventd_socket.h
+12
-0
ueventd/ueventd.c
ueventd/ueventd.c
+1
-1
ueventd/ueventd_device_handler.c
ueventd/ueventd_device_handler.c
+3
-2
ueventd/ueventd_socket.c
ueventd/ueventd_socket.c
+2
-0
未找到文件。
device_info/device_info.cpp
浏览文件 @
a7141dfc
...
@@ -42,7 +42,6 @@ int AclGetDevUdid(char *udid, int size)
...
@@ -42,7 +42,6 @@ int AclGetDevUdid(char *udid, int size)
#else
#else
int
ret
=
GetDevUdid_
(
udid
,
size
);
int
ret
=
GetDevUdid_
(
udid
,
size
);
#endif
#endif
BEGET_LOGI
(
"AclGetDevUdid %s"
,
udid
);
return
ret
;
return
ret
;
}
}
...
@@ -64,7 +63,6 @@ const char *AclGetSerial(void)
...
@@ -64,7 +63,6 @@ const char *AclGetSerial(void)
BEGET_ERROR_CHECK
(
ret
==
0
,
return
nullptr
,
"Failed to copy"
);
BEGET_ERROR_CHECK
(
ret
==
0
,
return
nullptr
,
"Failed to copy"
);
}
}
#endif
#endif
BEGET_LOGI
(
"AclGetSerial %s"
,
serialNumber
);
return
serialNumber
;
return
serialNumber
;
}
}
...
...
device_info/device_info_kits.cpp
浏览文件 @
a7141dfc
...
@@ -77,7 +77,7 @@ void DeviceInfoKits::FinishStartSASuccess(const sptr<IRemoteObject> &remoteObjec
...
@@ -77,7 +77,7 @@ void DeviceInfoKits::FinishStartSASuccess(const sptr<IRemoteObject> &remoteObjec
void
DeviceInfoKits
::
FinishStartSAFailed
()
void
DeviceInfoKits
::
FinishStartSAFailed
()
{
{
DINFO_LOGI
(
"
g
et deviceinfo sa failed."
);
DINFO_LOGI
(
"
G
et deviceinfo sa failed."
);
// get lock which wait_for release and send a notice
// get lock which wait_for release and send a notice
std
::
unique_lock
<
std
::
mutex
>
lock
(
lock_
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
lock_
);
deviceInfoService_
=
nullptr
;
deviceInfoService_
=
nullptr
;
...
...
device_info/device_info_kits.h
浏览文件 @
a7141dfc
...
@@ -18,10 +18,11 @@
...
@@ -18,10 +18,11 @@
#include <mutex>
#include <mutex>
#include "idevice_info.h"
#include "idevice_info.h"
#include "singleton.h"
#include "singleton.h"
#include "beget_ext.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
device_info
{
namespace
device_info
{
class
DeviceInfoKits
final
:
public
DelayedRefSingleton
<
DeviceInfoKits
>
{
class
INIT_LOCAL_API
DeviceInfoKits
final
:
public
DelayedRefSingleton
<
DeviceInfoKits
>
{
DECLARE_DELAYED_REF_SINGLETON
(
DeviceInfoKits
);
DECLARE_DELAYED_REF_SINGLETON
(
DeviceInfoKits
);
public:
public:
DISALLOW_COPY_AND_MOVE
(
DeviceInfoKits
);
DISALLOW_COPY_AND_MOVE
(
DeviceInfoKits
);
...
...
device_info/device_info_proxy.cpp
浏览文件 @
a7141dfc
...
@@ -18,16 +18,33 @@
...
@@ -18,16 +18,33 @@
#include "idevice_info.h"
#include "idevice_info.h"
#include "parcel.h"
#include "parcel.h"
#include "string_ex.h"
#include "string_ex.h"
#include "sysparam_errno.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
device_info
{
namespace
device_info
{
int32_t
DeviceInfoProxy
::
DeviceInfoSendRequest
(
uint32_t
code
,
MessageParcel
&
data
,
MessageParcel
&
reply
,
MessageOption
&
option
)
{
#ifdef STARTUP_INIT_TEST
int
ret
=
0
;
#else
int
ret
=
SYSPARAM_SYSTEM_ERROR
;
#endif
auto
remote
=
Remote
();
if
(
remote
!=
nullptr
)
{
ret
=
remote
->
SendRequest
(
code
,
data
,
reply
,
option
);
}
return
ret
;
}
int32_t
DeviceInfoProxy
::
GetUdid
(
std
::
string
&
result
)
int32_t
DeviceInfoProxy
::
GetUdid
(
std
::
string
&
result
)
{
{
MessageParcel
data
;
MessageParcel
data
;
MessageParcel
reply
;
MessageParcel
reply
;
MessageOption
option
{
MessageOption
::
TF_SYNC
};
MessageOption
option
{
MessageOption
::
TF_SYNC
};
data
.
WriteInterfaceToken
(
DeviceInfoProxy
::
GetDescriptor
());
data
.
WriteInterfaceToken
(
DeviceInfoProxy
::
GetDescriptor
());
int32_t
ret
=
Remote
()
->
SendRequest
(
COMMAND_GET_UDID
,
data
,
reply
,
option
);
int32_t
ret
=
DeviceInfoSendRequest
(
COMMAND_GET_UDID
,
data
,
reply
,
option
);
DINFO_LOGI
(
"DeviceInfoProxy::GetUdid: %d"
,
ret
);
DINFO_CHECK
(
ret
==
ERR_NONE
,
return
ret
,
"getUdid failed, error code is %d"
,
ret
);
DINFO_CHECK
(
ret
==
ERR_NONE
,
return
ret
,
"getUdid failed, error code is %d"
,
ret
);
result
=
Str16ToStr8
(
reply
.
ReadString16
());
result
=
Str16ToStr8
(
reply
.
ReadString16
());
return
ERR_OK
;
return
ERR_OK
;
...
@@ -40,7 +57,8 @@ int32_t DeviceInfoProxy::GetSerialID(std::string& result)
...
@@ -40,7 +57,8 @@ int32_t DeviceInfoProxy::GetSerialID(std::string& result)
MessageOption
option
{
MessageOption
::
TF_SYNC
};
MessageOption
option
{
MessageOption
::
TF_SYNC
};
data
.
WriteInterfaceToken
(
DeviceInfoProxy
::
GetDescriptor
());
data
.
WriteInterfaceToken
(
DeviceInfoProxy
::
GetDescriptor
());
int32_t
ret
=
Remote
()
->
SendRequest
(
COMMAND_GET_SERIAL_ID
,
data
,
reply
,
option
);
int32_t
ret
=
DeviceInfoSendRequest
(
COMMAND_GET_SERIAL_ID
,
data
,
reply
,
option
);
DINFO_LOGI
(
"DeviceInfoProxy::GetSerialID: %d"
,
ret
);
DINFO_CHECK
(
ret
==
ERR_NONE
,
return
ret
,
"GetSerial failed, error code is %d"
,
ret
);
DINFO_CHECK
(
ret
==
ERR_NONE
,
return
ret
,
"GetSerial failed, error code is %d"
,
ret
);
result
=
Str16ToStr8
(
reply
.
ReadString16
());
result
=
Str16ToStr8
(
reply
.
ReadString16
());
return
ERR_OK
;
return
ERR_OK
;
...
...
device_info/device_info_proxy.h
浏览文件 @
a7141dfc
...
@@ -18,10 +18,11 @@
...
@@ -18,10 +18,11 @@
#include "iremote_proxy.h"
#include "iremote_proxy.h"
#include "idevice_info.h"
#include "idevice_info.h"
#include "beget_ext.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
device_info
{
namespace
device_info
{
class
DeviceInfoProxy
:
public
IRemoteProxy
<
IDeviceInfo
>
{
class
INIT_LOCAL_API
DeviceInfoProxy
:
public
IRemoteProxy
<
IDeviceInfo
>
{
public:
public:
explicit
DeviceInfoProxy
(
const
sptr
<
IRemoteObject
>
&
impl
)
:
IRemoteProxy
<
IDeviceInfo
>
(
impl
)
{}
explicit
DeviceInfoProxy
(
const
sptr
<
IRemoteObject
>
&
impl
)
:
IRemoteProxy
<
IDeviceInfo
>
(
impl
)
{}
virtual
~
DeviceInfoProxy
()
{}
virtual
~
DeviceInfoProxy
()
{}
...
@@ -29,6 +30,8 @@ public:
...
@@ -29,6 +30,8 @@ public:
int32_t
GetUdid
(
std
::
string
&
result
)
override
;
int32_t
GetUdid
(
std
::
string
&
result
)
override
;
int32_t
GetSerialID
(
std
::
string
&
result
)
override
;
int32_t
GetSerialID
(
std
::
string
&
result
)
override
;
private:
private:
int32_t
DeviceInfoSendRequest
(
uint32_t
code
,
MessageParcel
&
data
,
MessageParcel
&
reply
,
MessageOption
&
option
);
static
inline
BrokerDelegator
<
DeviceInfoProxy
>
delegator_
;
static
inline
BrokerDelegator
<
DeviceInfoProxy
>
delegator_
;
};
};
}
// namespace system
}
// namespace system
...
...
device_info/device_info_stub.cpp
浏览文件 @
a7141dfc
...
@@ -25,7 +25,6 @@
...
@@ -25,7 +25,6 @@
#include "param_comm.h"
#include "param_comm.h"
#include "sysparam_errno.h"
#include "sysparam_errno.h"
using
std
::
u16string
;
namespace
OHOS
{
namespace
OHOS
{
using
namespace
Security
;
using
namespace
Security
;
using
namespace
Security
::
AccessToken
;
using
namespace
Security
::
AccessToken
;
...
@@ -43,7 +42,7 @@ int32_t DeviceInfoStub::OnRemoteRequest(uint32_t code,
...
@@ -43,7 +42,7 @@ int32_t DeviceInfoStub::OnRemoteRequest(uint32_t code,
int
ret
=
ERR_FAIL
;
int
ret
=
ERR_FAIL
;
switch
(
code
)
{
switch
(
code
)
{
case
COMMAND_GET_UDID
:
{
case
COMMAND_GET_UDID
:
{
if
(
!
CheckPermission
(
data
,
PERMISSION_UDID
))
{
if
(
!
CheckPermission
(
data
,
"ohos.permission.sec.ACCESS_UDID"
))
{
return
SYSPARAM_PERMISSION_DENIED
;
return
SYSPARAM_PERMISSION_DENIED
;
}
}
char
localDeviceInfo
[
UDID_LEN
]
=
{
0
};
char
localDeviceInfo
[
UDID_LEN
]
=
{
0
};
...
@@ -53,7 +52,7 @@ int32_t DeviceInfoStub::OnRemoteRequest(uint32_t code,
...
@@ -53,7 +52,7 @@ int32_t DeviceInfoStub::OnRemoteRequest(uint32_t code,
break
;
break
;
}
}
case
COMMAND_GET_SERIAL_ID
:
{
case
COMMAND_GET_SERIAL_ID
:
{
if
(
!
CheckPermission
(
data
,
PERMISSION_UDID
))
{
if
(
!
CheckPermission
(
data
,
"ohos.permission.sec.ACCESS_UDID"
))
{
return
SYSPARAM_PERMISSION_DENIED
;
return
SYSPARAM_PERMISSION_DENIED
;
}
}
const
char
*
serialNumber
=
GetSerial_
();
const
char
*
serialNumber
=
GetSerial_
();
...
@@ -98,10 +97,10 @@ int32_t DeviceInfoService::GetSerialID(std::string& result)
...
@@ -98,10 +97,10 @@ int32_t DeviceInfoService::GetSerialID(std::string& result)
void
DeviceInfoService
::
OnStart
(
void
)
void
DeviceInfoService
::
OnStart
(
void
)
{
{
DINFO_LOGI
(
"
WatcherManager
OnStart"
);
DINFO_LOGI
(
"
DeviceInfoService
OnStart"
);
bool
res
=
Publish
(
this
);
bool
res
=
Publish
(
this
);
if
(
!
res
)
{
if
(
!
res
)
{
DINFO_LOGE
(
"
WatcherManager
Publish failed"
);
DINFO_LOGE
(
"
DeviceInfoService
Publish failed"
);
}
}
return
;
return
;
}
}
...
...
device_info/device_info_stub.h
浏览文件 @
a7141dfc
...
@@ -41,9 +41,7 @@ public:
...
@@ -41,9 +41,7 @@ public:
~
DeviceInfoService
()
override
{}
~
DeviceInfoService
()
override
{}
int32_t
GetUdid
(
std
::
string
&
result
)
override
;
int32_t
GetUdid
(
std
::
string
&
result
)
override
;
int32_t
GetSerialID
(
std
::
string
&
result
)
override
;
int32_t
GetSerialID
(
std
::
string
&
result
)
override
;
#ifndef STARTUP_INIT_TEST
protected:
protected:
#endif
void
OnStart
(
void
)
override
;
void
OnStart
(
void
)
override
;
void
OnStop
(
void
)
override
;
void
OnStop
(
void
)
override
;
int
Dump
(
int
fd
,
const
std
::
vector
<
std
::
u16string
>&
args
)
override
;
int
Dump
(
int
fd
,
const
std
::
vector
<
std
::
u16string
>&
args
)
override
;
...
...
device_info/idevice_info.h
浏览文件 @
a7141dfc
...
@@ -33,7 +33,6 @@ public:
...
@@ -33,7 +33,6 @@ public:
static
constexpr
int
COMMAND_GET_UDID
=
MIN_TRANSACTION_ID
+
0
;
static
constexpr
int
COMMAND_GET_UDID
=
MIN_TRANSACTION_ID
+
0
;
static
constexpr
int
COMMAND_GET_SERIAL_ID
=
MIN_TRANSACTION_ID
+
1
;
static
constexpr
int
COMMAND_GET_SERIAL_ID
=
MIN_TRANSACTION_ID
+
1
;
static
constexpr
int
ERR_FAIL
=
-
1
;
static
constexpr
int
ERR_FAIL
=
-
1
;
const
std
::
string
PERMISSION_UDID
=
"ohos.permission.sec.ACCESS_UDID"
;
};
};
}
// namespace device_info
}
// namespace device_info
}
// namespace OHOS
}
// namespace OHOS
...
...
interfaces/innerkits/control_fd/control_fd.h
浏览文件 @
a7141dfc
...
@@ -35,6 +35,12 @@ extern "C" {
...
@@ -35,6 +35,12 @@ extern "C" {
#define PTY_BUF_SIZE 4096
#define PTY_BUF_SIZE 4096
#define PTY_PATH_SIZE 128
#define PTY_PATH_SIZE 128
#ifdef STARTUP_INIT_TEST
#define CONTROL_FD_STATIC
#else
#define CONTROL_FD_STATIC static
#endif
typedef
struct
CmdService_
{
typedef
struct
CmdService_
{
TaskHandle
serverTask
;
TaskHandle
serverTask
;
struct
ListNode
head
;
struct
ListNode
head
;
...
...
interfaces/innerkits/control_fd/control_fd_client.c
浏览文件 @
a7141dfc
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
#include "control_fd.h"
#include "control_fd.h"
#include "securec.h"
#include "securec.h"
static
void
ProcessPtyWrite
(
const
WatcherHandle
taskHandle
,
int
fd
,
uint32_t
*
events
,
const
void
*
context
)
CONTROL_FD_STATIC
void
ProcessPtyWrite
(
const
WatcherHandle
taskHandle
,
int
fd
,
uint32_t
*
events
,
const
void
*
context
)
{
{
if
((
fd
<
0
)
||
(
events
==
NULL
)
||
(
context
==
NULL
))
{
if
((
fd
<
0
)
||
(
events
==
NULL
)
||
(
context
==
NULL
))
{
BEGET_LOGE
(
"[control_fd] Invalid fifo write parameter"
);
BEGET_LOGE
(
"[control_fd] Invalid fifo write parameter"
);
...
@@ -43,7 +43,7 @@ static void ProcessPtyWrite(const WatcherHandle taskHandle, int fd, uint32_t *ev
...
@@ -43,7 +43,7 @@ static void ProcessPtyWrite(const WatcherHandle taskHandle, int fd, uint32_t *ev
*
events
=
Event_Read
;
*
events
=
Event_Read
;
}
}
static
void
ProcessPtyRead
(
const
WatcherHandle
taskHandle
,
int
fd
,
uint32_t
*
events
,
const
void
*
context
)
CONTROL_FD_STATIC
void
ProcessPtyRead
(
const
WatcherHandle
taskHandle
,
int
fd
,
uint32_t
*
events
,
const
void
*
context
)
{
{
if
((
fd
<
0
)
||
(
events
==
NULL
)
||
(
context
==
NULL
))
{
if
((
fd
<
0
)
||
(
events
==
NULL
)
||
(
context
==
NULL
))
{
BEGET_LOGE
(
"[control_fd] Invalid fifo read parameter"
);
BEGET_LOGE
(
"[control_fd] Invalid fifo read parameter"
);
...
@@ -63,17 +63,17 @@ static void ProcessPtyRead(const WatcherHandle taskHandle, int fd, uint32_t *eve
...
@@ -63,17 +63,17 @@ static void ProcessPtyRead(const WatcherHandle taskHandle, int fd, uint32_t *eve
*
events
=
Event_Read
;
*
events
=
Event_Read
;
}
}
static
void
Cmd
OnRecvMessage
(
const
TaskHandle
task
,
const
uint8_t
*
buffer
,
uint32_t
buffLen
)
CONTROL_FD_STATIC
void
CmdClient
OnRecvMessage
(
const
TaskHandle
task
,
const
uint8_t
*
buffer
,
uint32_t
buffLen
)
{
{
BEGET_LOGI
(
"[control_fd] CmdOnRecvMessage %s len %d."
,
(
char
*
)
buffer
,
buffLen
);
BEGET_LOGI
(
"[control_fd] CmdOnRecvMessage %s len %d."
,
(
char
*
)
buffer
,
buffLen
);
}
}
static
void
CmdOnConnectComplete
(
const
TaskHandle
client
)
CONTROL_FD_STATIC
void
CmdOnConnectComplete
(
const
TaskHandle
client
)
{
{
BEGET_LOGI
(
"[control_fd] CmdOnConnectComplete"
);
BEGET_LOGI
(
"[control_fd] CmdOnConnectComplete"
);
}
}
static
void
CmdOnClose
(
const
TaskHandle
task
)
CONTROL_FD_STATIC
void
CmdOnClose
(
const
TaskHandle
task
)
{
{
BEGET_LOGI
(
"[control_fd] CmdOnClose"
);
BEGET_LOGI
(
"[control_fd] CmdOnClose"
);
CmdAgent
*
agent
=
(
CmdAgent
*
)
LE_GetUserData
(
task
);
CmdAgent
*
agent
=
(
CmdAgent
*
)
LE_GetUserData
(
task
);
...
@@ -83,17 +83,17 @@ static void CmdOnClose(const TaskHandle task)
...
@@ -83,17 +83,17 @@ static void CmdOnClose(const TaskHandle task)
LE_StopLoop
(
LE_GetDefaultLoop
());
LE_StopLoop
(
LE_GetDefaultLoop
());
}
}
static
void
CmdDisConnectComplete
(
const
TaskHandle
client
)
CONTROL_FD_STATIC
void
CmdDisConnectComplete
(
const
TaskHandle
client
)
{
{
BEGET_LOGI
(
"[control_fd] CmdDisConnectComplete"
);
BEGET_LOGI
(
"[control_fd] CmdDisConnectComplete"
);
}
}
static
void
CmdOnSendMessageComplete
(
const
TaskHandle
task
,
const
BufferHandle
handle
)
CONTROL_FD_STATIC
void
CmdOnSendMessageComplete
(
const
TaskHandle
task
,
const
BufferHandle
handle
)
{
{
BEGET_LOGI
(
"[control_fd] CmdOnSendMessageComplete"
);
BEGET_LOGI
(
"[control_fd] CmdOnSendMessageComplete"
);
}
}
static
CmdAgent
*
CmdAgentCreate
(
const
char
*
server
)
CONTROL_FD_STATIC
CmdAgent
*
CmdAgentCreate
(
const
char
*
server
)
{
{
if
(
server
==
NULL
)
{
if
(
server
==
NULL
)
{
BEGET_LOGE
(
"[control_fd] Invalid parameter"
);
BEGET_LOGE
(
"[control_fd] Invalid parameter"
);
...
@@ -108,7 +108,7 @@ static CmdAgent *CmdAgentCreate(const char *server)
...
@@ -108,7 +108,7 @@ static CmdAgent *CmdAgentCreate(const char *server)
info
.
disConnectComplete
=
CmdDisConnectComplete
;
info
.
disConnectComplete
=
CmdDisConnectComplete
;
info
.
connectComplete
=
CmdOnConnectComplete
;
info
.
connectComplete
=
CmdOnConnectComplete
;
info
.
sendMessageComplete
=
CmdOnSendMessageComplete
;
info
.
sendMessageComplete
=
CmdOnSendMessageComplete
;
info
.
recvMessage
=
CmdOnRecvMessage
;
info
.
recvMessage
=
Cmd
Client
OnRecvMessage
;
LE_STATUS
status
=
LE_CreateStreamClient
(
LE_GetDefaultLoop
(),
&
task
,
&
info
);
LE_STATUS
status
=
LE_CreateStreamClient
(
LE_GetDefaultLoop
(),
&
task
,
&
info
);
BEGET_ERROR_CHECK
(
status
==
0
,
return
NULL
,
"[control_fd] Failed create client"
);
BEGET_ERROR_CHECK
(
status
==
0
,
return
NULL
,
"[control_fd] Failed create client"
);
CmdAgent
*
agent
=
(
CmdAgent
*
)
LE_GetUserData
(
task
);
CmdAgent
*
agent
=
(
CmdAgent
*
)
LE_GetUserData
(
task
);
...
@@ -117,7 +117,7 @@ static CmdAgent *CmdAgentCreate(const char *server)
...
@@ -117,7 +117,7 @@ static CmdAgent *CmdAgentCreate(const char *server)
return
agent
;
return
agent
;
}
}
static
int
SendCmdMessage
(
const
CmdAgent
*
agent
,
uint16_t
type
,
const
char
*
cmd
,
const
char
*
ptyName
)
CONTROL_FD_STATIC
int
SendCmdMessage
(
const
CmdAgent
*
agent
,
uint16_t
type
,
const
char
*
cmd
,
const
char
*
ptyName
)
{
{
if
((
agent
==
NULL
)
||
(
cmd
==
NULL
)
||
(
ptyName
==
NULL
))
{
if
((
agent
==
NULL
)
||
(
cmd
==
NULL
)
||
(
ptyName
==
NULL
))
{
BEGET_LOGE
(
"[control_fd] Invalid parameter"
);
BEGET_LOGE
(
"[control_fd] Invalid parameter"
);
...
@@ -143,11 +143,12 @@ static int SendCmdMessage(const CmdAgent *agent, uint16_t type, const char *cmd,
...
@@ -143,11 +143,12 @@ static int SendCmdMessage(const CmdAgent *agent, uint16_t type, const char *cmd,
return
0
;
return
0
;
}
}
static
int
InitPtyInterface
(
CmdAgent
*
agent
,
uint16_t
type
,
const
char
*
cmd
)
CONTROL_FD_STATIC
int
InitPtyInterface
(
CmdAgent
*
agent
,
uint16_t
type
,
const
char
*
cmd
)
{
{
if
((
cmd
==
NULL
)
||
(
agent
==
NULL
))
{
if
((
cmd
==
NULL
)
||
(
agent
==
NULL
))
{
return
-
1
;
return
-
1
;
}
}
#ifndef STARTUP_INIT_TEST
// initialize terminal
// initialize terminal
struct
termios
term
;
struct
termios
term
;
int
ret
=
tcgetattr
(
STDIN_FILENO
,
&
term
);
int
ret
=
tcgetattr
(
STDIN_FILENO
,
&
term
);
...
@@ -181,6 +182,7 @@ static int InitPtyInterface(CmdAgent *agent, uint16_t type, const char *cmd)
...
@@ -181,6 +182,7 @@ static int InitPtyInterface(CmdAgent *agent, uint16_t type, const char *cmd)
close
(
pfd
);
return
-
1
,
"[control_fd] Failed le_loop start watcher stdin read and write ptmx"
);
close
(
pfd
);
return
-
1
,
"[control_fd] Failed le_loop start watcher stdin read and write ptmx"
);
ret
=
SendCmdMessage
(
agent
,
type
,
cmd
,
ptsbuffer
);
ret
=
SendCmdMessage
(
agent
,
type
,
cmd
,
ptsbuffer
);
BEGET_ERROR_CHECK
(
ret
==
0
,
close
(
pfd
);
return
-
1
,
"[control_fd] Failed send message"
);
BEGET_ERROR_CHECK
(
ret
==
0
,
close
(
pfd
);
return
-
1
,
"[control_fd] Failed send message"
);
#endif
return
0
;
return
0
;
}
}
...
@@ -192,11 +194,13 @@ void CmdClientInit(const char *socketPath, uint16_t type, const char *cmd)
...
@@ -192,11 +194,13 @@ void CmdClientInit(const char *socketPath, uint16_t type, const char *cmd)
BEGET_LOGI
(
"[control_fd] CmdAgentInit"
);
BEGET_LOGI
(
"[control_fd] CmdAgentInit"
);
CmdAgent
*
agent
=
CmdAgentCreate
(
socketPath
);
CmdAgent
*
agent
=
CmdAgentCreate
(
socketPath
);
BEGET_ERROR_CHECK
(
agent
!=
NULL
,
return
,
"[control_fd] Failed to create agent"
);
BEGET_ERROR_CHECK
(
agent
!=
NULL
,
return
,
"[control_fd] Failed to create agent"
);
#ifndef STARTUP_INIT_TEST
int
ret
=
InitPtyInterface
(
agent
,
type
,
cmd
);
int
ret
=
InitPtyInterface
(
agent
,
type
,
cmd
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
return
;
return
;
}
}
LE_RunLoop
(
LE_GetDefaultLoop
());
LE_RunLoop
(
LE_GetDefaultLoop
());
LE_CloseLoop
(
LE_GetDefaultLoop
());
LE_CloseLoop
(
LE_GetDefaultLoop
());
#endif
BEGET_LOGI
(
"Cmd Client exit "
);
BEGET_LOGI
(
"Cmd Client exit "
);
}
}
interfaces/innerkits/control_fd/control_fd_service.c
浏览文件 @
a7141dfc
...
@@ -32,7 +32,7 @@ static void OnClose(const TaskHandle task)
...
@@ -32,7 +32,7 @@ static void OnClose(const TaskHandle task)
OH_ListInit
(
&
agent
->
item
);
OH_ListInit
(
&
agent
->
item
);
}
}
static
void
CmdOnRecvMessage
(
const
TaskHandle
task
,
const
uint8_t
*
buffer
,
uint32_t
buffLen
)
CONTROL_FD_STATIC
void
CmdOnRecvMessage
(
const
TaskHandle
task
,
const
uint8_t
*
buffer
,
uint32_t
buffLen
)
{
{
if
(
buffer
==
NULL
)
{
if
(
buffer
==
NULL
)
{
return
;
return
;
...
@@ -46,7 +46,7 @@ static void CmdOnRecvMessage(const TaskHandle task, const uint8_t *buffer, uint3
...
@@ -46,7 +46,7 @@ static void CmdOnRecvMessage(const TaskHandle task, const uint8_t *buffer, uint3
BEGET_LOGE
(
"[control_fd] Received msg is invaild"
);
BEGET_LOGE
(
"[control_fd] Received msg is invaild"
);
return
;
return
;
}
}
#ifndef STARTUP_INIT_TEST
agent
->
pid
=
fork
();
agent
->
pid
=
fork
();
if
(
agent
->
pid
==
0
)
{
if
(
agent
->
pid
==
0
)
{
OpenConsole
();
OpenConsole
();
...
@@ -68,10 +68,11 @@ static void CmdOnRecvMessage(const TaskHandle task, const uint8_t *buffer, uint3
...
@@ -68,10 +68,11 @@ static void CmdOnRecvMessage(const TaskHandle task, const uint8_t *buffer, uint3
}
else
if
(
agent
->
pid
<
0
)
{
}
else
if
(
agent
->
pid
<
0
)
{
BEGET_LOGE
(
"[control_fd] Failed fork service"
);
BEGET_LOGE
(
"[control_fd] Failed fork service"
);
}
}
#endif
return
;
return
;
}
}
static
int
SendMessage
(
LoopHandle
loop
,
TaskHandle
task
,
const
char
*
message
)
CONTROL_FD_STATIC
int
SendMessage
(
LoopHandle
loop
,
TaskHandle
task
,
const
char
*
message
)
{
{
if
(
message
==
NULL
)
{
if
(
message
==
NULL
)
{
BEGET_LOGE
(
"[control_fd] Invalid parameter"
);
BEGET_LOGE
(
"[control_fd] Invalid parameter"
);
...
@@ -90,11 +91,15 @@ static int SendMessage(LoopHandle loop, TaskHandle task, const char *message)
...
@@ -90,11 +91,15 @@ static int SendMessage(LoopHandle loop, TaskHandle task, const char *message)
return
0
;
return
0
;
}
}
static
int
CmdOnIncommingConnect
(
const
LoopHandle
loop
,
const
TaskHandle
server
)
CONTROL_FD_STATIC
int
CmdOnIncommingConnect
(
const
LoopHandle
loop
,
const
TaskHandle
server
)
{
{
TaskHandle
client
=
NULL
;
TaskHandle
client
=
NULL
;
LE_StreamInfo
info
=
{};
LE_StreamInfo
info
=
{};
#ifndef STARTUP_INIT_TEST
info
.
baseInfo
.
flags
=
TASK_STREAM
|
TASK_PIPE
|
TASK_CONNECT
;
info
.
baseInfo
.
flags
=
TASK_STREAM
|
TASK_PIPE
|
TASK_CONNECT
;
#else
info
.
baseInfo
.
flags
=
TASK_STREAM
|
TASK_PIPE
|
TASK_CONNECT
|
TASK_TEST
;
#endif
info
.
baseInfo
.
close
=
OnClose
;
info
.
baseInfo
.
close
=
OnClose
;
info
.
baseInfo
.
userDataSize
=
sizeof
(
CmdTask
);
info
.
baseInfo
.
userDataSize
=
sizeof
(
CmdTask
);
info
.
disConnectComplete
=
NULL
;
info
.
disConnectComplete
=
NULL
;
...
...
interfaces/innerkits/fd_holder/fd_holder.c
浏览文件 @
a7141dfc
...
@@ -49,7 +49,7 @@ static int BuildClientSocket(void)
...
@@ -49,7 +49,7 @@ static int BuildClientSocket(void)
return
sockFd
;
return
sockFd
;
}
}
static
int
BuildSendData
(
char
*
buffer
,
size_t
size
,
const
char
*
serviceName
,
bool
hold
,
bool
poll
)
STATIC
int
BuildSendData
(
char
*
buffer
,
size_t
size
,
const
char
*
serviceName
,
bool
hold
,
bool
poll
)
{
{
if
(
buffer
==
NULL
||
size
==
0
||
serviceName
==
0
)
{
if
(
buffer
==
NULL
||
size
==
0
||
serviceName
==
0
)
{
return
-
1
;
return
-
1
;
...
...
interfaces/innerkits/fd_holder/fd_holder_internal.c
浏览文件 @
a7141dfc
...
@@ -81,30 +81,8 @@ int BuildControlMessage(struct msghdr *msghdr, int *fds, int fdCount, bool send
...
@@ -81,30 +81,8 @@ int BuildControlMessage(struct msghdr *msghdr, int *fds, int fdCount, bool send
return
0
;
return
0
;
}
}
// This function will allocate memory to store FDs
STATIC
int
*
GetFdsFromMsg
(
size_t
*
outFdCount
,
pid_t
*
requestPid
,
struct
msghdr
msghdr
)
// Remember to delete when not used anymore.
int
*
ReceiveFds
(
int
sock
,
struct
iovec
iovec
,
size_t
*
outFdCount
,
bool
nonblock
,
pid_t
*
requestPid
)
{
{
CMSG_BUFFER_TYPE
(
CMSG_SPACE
(
sizeof
(
struct
ucred
))
+
CMSG_SPACE
(
sizeof
(
int
)
*
MAX_HOLD_FDS
))
control
;
BEGET_ERROR_CHECK
(
sizeof
(
control
)
<=
PAGE_SIZE
,
return
NULL
,
"Too many fds, out of memory"
);
struct
msghdr
msghdr
=
{
.
msg_iov
=
&
iovec
,
.
msg_iovlen
=
1
,
.
msg_control
=
&
control
,
.
msg_controllen
=
sizeof
(
control
),
.
msg_flags
=
0
,
};
int
flags
=
MSG_CMSG_CLOEXEC
|
MSG_TRUNC
;
if
(
nonblock
)
{
flags
|=
MSG_DONTWAIT
;
}
ssize_t
rc
=
TEMP_FAILURE_RETRY
(
recvmsg
(
sock
,
&
msghdr
,
flags
));
BEGET_ERROR_CHECK
(
rc
>=
0
,
return
NULL
,
"Failed to get fds from remote, err = %d"
,
errno
);
if
((
msghdr
.
msg_flags
)
&
MSG_TRUNC
)
{
if
((
msghdr
.
msg_flags
)
&
MSG_TRUNC
)
{
BEGET_LOGE
(
"Message was truncated when receiving fds"
);
BEGET_LOGE
(
"Message was truncated when receiving fds"
);
return
NULL
;
return
NULL
;
...
@@ -115,7 +93,7 @@ int *ReceiveFds(int sock, struct iovec iovec, size_t *outFdCount, bool nonblock,
...
@@ -115,7 +93,7 @@ int *ReceiveFds(int sock, struct iovec iovec, size_t *outFdCount, bool nonblock,
size_t
fdCount
=
0
;
size_t
fdCount
=
0
;
for
(
cmsg
=
CMSG_FIRSTHDR
(
&
msghdr
);
cmsg
!=
NULL
;
cmsg
=
CMSG_NXTHDR
(
&
msghdr
,
cmsg
))
{
for
(
cmsg
=
CMSG_FIRSTHDR
(
&
msghdr
);
cmsg
!=
NULL
;
cmsg
=
CMSG_NXTHDR
(
&
msghdr
,
cmsg
))
{
if
(
cmsg
->
cmsg_level
==
SOL_SOCKET
&&
cmsg
->
cmsg_type
==
SCM_RIGHTS
)
{
if
(
cmsg
->
cmsg_level
==
SOL_SOCKET
&&
cmsg
->
cmsg_type
==
SCM_RIGHTS
)
{
fds
=
(
int
*
)
CMSG_DATA
(
cmsg
);
fds
=
(
int
*
)
CMSG_DATA
(
cmsg
);
fdCount
=
(
cmsg
->
cmsg_len
-
CMSG_LEN
(
0
))
/
sizeof
(
int
);
fdCount
=
(
cmsg
->
cmsg_len
-
CMSG_LEN
(
0
))
/
sizeof
(
int
);
BEGET_ERROR_CHECK
(
fdCount
<=
MAX_HOLD_FDS
,
return
NULL
,
"Too many fds returned."
);
BEGET_ERROR_CHECK
(
fdCount
<=
MAX_HOLD_FDS
,
return
NULL
,
"Too many fds returned."
);
}
}
...
@@ -139,3 +117,29 @@ int *ReceiveFds(int sock, struct iovec iovec, size_t *outFdCount, bool nonblock,
...
@@ -139,3 +117,29 @@ int *ReceiveFds(int sock, struct iovec iovec, size_t *outFdCount, bool nonblock,
*
outFdCount
=
fdCount
;
*
outFdCount
=
fdCount
;
return
outFds
;
return
outFds
;
}
}
// This function will allocate memory to store FDs
// Remember to delete when not used anymore.
int
*
ReceiveFds
(
int
sock
,
struct
iovec
iovec
,
size_t
*
outFdCount
,
bool
nonblock
,
pid_t
*
requestPid
)
{
CMSG_BUFFER_TYPE
(
CMSG_SPACE
(
sizeof
(
struct
ucred
))
+
CMSG_SPACE
(
sizeof
(
int
)
*
MAX_HOLD_FDS
))
control
;
BEGET_ERROR_CHECK
(
sizeof
(
control
)
<=
PAGE_SIZE
,
return
NULL
,
"Too many fds, out of memory"
);
struct
msghdr
msghdr
=
{
.
msg_iov
=
&
iovec
,
.
msg_iovlen
=
1
,
.
msg_control
=
&
control
,
.
msg_controllen
=
sizeof
(
control
),
.
msg_flags
=
0
,
};
int
flags
=
MSG_CMSG_CLOEXEC
|
MSG_TRUNC
;
if
(
nonblock
)
{
flags
|=
MSG_DONTWAIT
;
}
ssize_t
rc
=
TEMP_FAILURE_RETRY
(
recvmsg
(
sock
,
&
msghdr
,
flags
));
BEGET_ERROR_CHECK
(
rc
>=
0
,
return
NULL
,
"Failed to get fds from remote, err = %d"
,
errno
);
return
GetFdsFromMsg
(
outFdCount
,
requestPid
,
msghdr
);
}
\ No newline at end of file
interfaces/innerkits/fs_manager/fstab.c
浏览文件 @
a7141dfc
...
@@ -542,7 +542,7 @@ static int ParseRequiredMountInfo(const char *item, Fstab *fstab)
...
@@ -542,7 +542,7 @@ static int ParseRequiredMountInfo(const char *item, Fstab *fstab)
BEGET_ERROR_CHECK
(
strncpy_s
(
mountOptions
,
MAX_BUFFER_LEN
-
1
,
p
,
strlen
(
p
))
==
EOK
,
BEGET_ERROR_CHECK
(
strncpy_s
(
mountOptions
,
MAX_BUFFER_LEN
-
1
,
p
,
strlen
(
p
))
==
EOK
,
return
-
1
,
"Failed to copy required mount info: %s"
,
item
);
return
-
1
,
"Failed to copy required mount info: %s"
,
item
);
}
}
BEGET_LOGV
(
"
M
ount option of partition %s is [%s]"
,
partName
,
mountOptions
);
BEGET_LOGV
(
"
Config m
ount option of partition %s is [%s]"
,
partName
,
mountOptions
);
if
(
ParseFstabPerLine
(
mountOptions
,
fstab
,
false
,
"@"
)
<
0
)
{
if
(
ParseFstabPerLine
(
mountOptions
,
fstab
,
false
,
"@"
)
<
0
)
{
BEGET_LOGE
(
"Failed to parse mount options of partition
\'
%s
\'
, options: %s"
,
partName
,
mountOptions
);
BEGET_LOGE
(
"Failed to parse mount options of partition
\'
%s
\'
, options: %s"
,
partName
,
mountOptions
);
return
-
1
;
return
-
1
;
...
@@ -556,7 +556,7 @@ Fstab* LoadFstabFromCommandLine(void)
...
@@ -556,7 +556,7 @@ Fstab* LoadFstabFromCommandLine(void)
char
*
cmdline
=
ReadFileData
(
BOOT_CMD_LINE
);
char
*
cmdline
=
ReadFileData
(
BOOT_CMD_LINE
);
bool
isDone
=
false
;
bool
isDone
=
false
;
BEGET_ERROR_CHECK
(
cmdline
!=
NULL
,
return
NULL
,
"Read from
\'
/proc/cmdline
\'
failed, err = %d"
,
errno
);
BEGET_ERROR_CHECK
(
cmdline
!=
NULL
,
return
NULL
,
"Read from
\'
%s
\'
failed, err = %d"
,
BOOT_CMD_LINE
,
errno
);
TrimTail
(
cmdline
,
'\n'
);
TrimTail
(
cmdline
,
'\n'
);
BEGET_ERROR_CHECK
((
fstab
=
(
Fstab
*
)
calloc
(
1
,
sizeof
(
Fstab
)))
!=
NULL
,
return
NULL
,
BEGET_ERROR_CHECK
((
fstab
=
(
Fstab
*
)
calloc
(
1
,
sizeof
(
Fstab
)))
!=
NULL
,
return
NULL
,
"Allocate memory for FS table failed, err = %d"
,
errno
);
"Allocate memory for FS table failed, err = %d"
,
errno
);
...
...
interfaces/innerkits/include/beget_ext.h
浏览文件 @
a7141dfc
...
@@ -28,7 +28,7 @@ extern "C" {
...
@@ -28,7 +28,7 @@ extern "C" {
#define INIT_DEBUG_LEVEL "persist.init.debug.loglevel"
#define INIT_DEBUG_LEVEL "persist.init.debug.loglevel"
#ifndef INIT_LOG_PATH
#ifndef INIT_LOG_PATH
#define INIT_LOG_PATH "/data/init_agent/"
#define INIT_LOG_PATH
STARTUP_INIT_UT_PATH
"/data/init_agent/"
#endif
#endif
#if defined(__GNUC__) && (__GNUC__ >= 4)
#if defined(__GNUC__) && (__GNUC__ >= 4)
...
@@ -49,7 +49,13 @@ typedef enum InitLogLevel {
...
@@ -49,7 +49,13 @@ typedef enum InitLogLevel {
INIT_FATAL
INIT_FATAL
}
InitLogLevel
;
}
InitLogLevel
;
#if (defined(STARTUP_INIT_TEST) || defined(APPSPAWN_TEST))
#define FILE_NAME (strrchr((__FILE__), '/') + 1)
#define STATIC
#else
#define FILE_NAME (strrchr((__FILE__), '/') ? strrchr((__FILE__), '/') + 1 : (__FILE__))
#define FILE_NAME (strrchr((__FILE__), '/') ? strrchr((__FILE__), '/') + 1 : (__FILE__))
#define STATIC static
#endif
INIT_PUBLIC_API
void
StartupLog
(
InitLogLevel
logLevel
,
uint32_t
domain
,
const
char
*
tag
,
const
char
*
fmt
,
...);
INIT_PUBLIC_API
void
StartupLog
(
InitLogLevel
logLevel
,
uint32_t
domain
,
const
char
*
tag
,
const
char
*
fmt
,
...);
INIT_PUBLIC_API
void
SetInitLogLevel
(
InitLogLevel
level
);
INIT_PUBLIC_API
void
SetInitLogLevel
(
InitLogLevel
level
);
...
...
interfaces/innerkits/service_control/service_control.c
浏览文件 @
a7141dfc
...
@@ -96,6 +96,7 @@ static int RestartProcess(const char *serviceName, const char *extArgv[], int ex
...
@@ -96,6 +96,7 @@ static int RestartProcess(const char *serviceName, const char *extArgv[], int ex
BEGET_LOGE
(
"Get service status failed.
\n
"
);
BEGET_LOGE
(
"Get service status failed.
\n
"
);
return
-
1
;
return
-
1
;
}
}
BEGET_LOGE
(
"Process service %s status: %d "
,
serviceName
,
status
);
if
(
status
==
SERVICE_STARTED
||
status
==
SERVICE_READY
)
{
if
(
status
==
SERVICE_STARTED
||
status
==
SERVICE_READY
)
{
if
(
StopProcess
(
serviceName
)
!=
0
)
{
if
(
StopProcess
(
serviceName
)
!=
0
)
{
BEGET_LOGE
(
"Stop service %s failed"
,
serviceName
);
BEGET_LOGE
(
"Stop service %s failed"
,
serviceName
);
...
@@ -114,8 +115,6 @@ static int RestartProcess(const char *serviceName, const char *extArgv[], int ex
...
@@ -114,8 +115,6 @@ static int RestartProcess(const char *serviceName, const char *extArgv[], int ex
BEGET_LOGE
(
"Start service %s failed"
,
serviceName
);
BEGET_LOGE
(
"Start service %s failed"
,
serviceName
);
return
-
1
;
return
-
1
;
}
}
}
else
{
BEGET_LOGE
(
"Current service status: %d is not support."
,
status
);
}
}
return
0
;
return
0
;
}
}
...
...
services/begetctl/begetctl.h
浏览文件 @
a7141dfc
...
@@ -46,5 +46,4 @@ int32_t BShellCmdRegister(BShellHandle shell, int execMode);
...
@@ -46,5 +46,4 @@ int32_t BShellCmdRegister(BShellHandle shell, int execMode);
}
}
#endif
#endif
#endif
#endif
#endif // INIT_UTILS_H
#endif // INIT_UTILS_H
\ No newline at end of file
services/begetctl/bootchart_cmd.c
浏览文件 @
a7141dfc
...
@@ -21,30 +21,18 @@
...
@@ -21,30 +21,18 @@
static
int
bootchartCmdEnable
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
static
int
bootchartCmdEnable
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
{
{
if
(
argc
<
1
)
{
char
*
helpArgs
[]
=
{
"bootchart"
,
NULL
};
BShellCmdHelp
(
shell
,
1
,
helpArgs
);
}
SystemSetParameter
(
"persist.init.bootchart.enabled"
,
"1"
);
SystemSetParameter
(
"persist.init.bootchart.enabled"
,
"1"
);
return
0
;
return
0
;
}
}
static
int
bootchartCmdDisable
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
static
int
bootchartCmdDisable
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
{
{
if
(
argc
<
1
)
{
char
*
helpArgs
[]
=
{
"bootchart"
,
NULL
};
BShellCmdHelp
(
shell
,
1
,
helpArgs
);
}
SystemSetParameter
(
"persist.init.bootchart.enabled"
,
"0"
);
SystemSetParameter
(
"persist.init.bootchart.enabled"
,
"0"
);
return
0
;
return
0
;
}
}
static
int
bootchartCmdStart
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
static
int
bootchartCmdStart
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
{
{
if
(
argc
<
1
)
{
char
*
helpArgs
[]
=
{
"bootchart"
,
NULL
};
BShellCmdHelp
(
shell
,
1
,
helpArgs
);
}
char
enable
[
4
]
=
{};
// 4 enable size
char
enable
[
4
]
=
{};
// 4 enable size
uint32_t
size
=
sizeof
(
enable
);
uint32_t
size
=
sizeof
(
enable
);
int
ret
=
SystemGetParameter
(
"persist.init.bootchart.enabled"
,
enable
,
&
size
);
int
ret
=
SystemGetParameter
(
"persist.init.bootchart.enabled"
,
enable
,
&
size
);
...
@@ -58,13 +46,10 @@ static int bootchartCmdStart(BShellHandle shell, int argc, char **argv)
...
@@ -58,13 +46,10 @@ static int bootchartCmdStart(BShellHandle shell, int argc, char **argv)
static
int
bootchartCmdStop
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
static
int
bootchartCmdStop
(
BShellHandle
shell
,
int
argc
,
char
**
argv
)
{
{
if
(
argc
<
1
)
{
char
*
helpArgs
[]
=
{
"bootchart"
,
NULL
};
BShellCmdHelp
(
shell
,
1
,
helpArgs
);
}
SystemSetParameter
(
"ohos.servicectrl.bootchart"
,
"stop"
);
SystemSetParameter
(
"ohos.servicectrl.bootchart"
,
"stop"
);
return
0
;
return
0
;
}
}
MODULE_CONSTRUCTOR
(
void
)
MODULE_CONSTRUCTOR
(
void
)
{
{
const
CmdInfo
infos
[]
=
{
const
CmdInfo
infos
[]
=
{
...
...
services/begetctl/misc_daemon.cpp
浏览文件 @
a7141dfc
...
@@ -56,10 +56,6 @@ static void ClearLogo(int fd)
...
@@ -56,10 +56,6 @@ static void ClearLogo(int fd)
static
void
WriteLogoContent
(
int
fd
,
const
std
::
string
&
logoPath
,
uint32_t
size
)
static
void
WriteLogoContent
(
int
fd
,
const
std
::
string
&
logoPath
,
uint32_t
size
)
{
{
if
(
fd
<
0
||
logoPath
.
empty
()
||
size
==
0
)
{
std
::
cout
<<
"path is null or size illegal
\n
"
;
return
;
}
FILE
*
rgbFile
=
fopen
(
logoPath
.
c_str
(),
"rb"
);
FILE
*
rgbFile
=
fopen
(
logoPath
.
c_str
(),
"rb"
);
if
(
rgbFile
==
nullptr
)
{
if
(
rgbFile
==
nullptr
)
{
std
::
cout
<<
"cannot find pic file
\n
"
;
std
::
cout
<<
"cannot find pic file
\n
"
;
...
@@ -83,20 +79,12 @@ static void WriteLogoContent(int fd, const std::string &logoPath, uint32_t size)
...
@@ -83,20 +79,12 @@ static void WriteLogoContent(int fd, const std::string &logoPath, uint32_t size)
free
(
buffer
);
free
(
buffer
);
return
;
return
;
}
}
free
(
buffer
);
if
(
buffer
!=
nullptr
)
{
free
(
buffer
);
buffer
=
nullptr
;
}
(
void
)
fclose
(
rgbFile
);
(
void
)
fclose
(
rgbFile
);
}
}
static
int
WriteLogo
(
int
fd
,
const
std
::
string
&
logoPath
)
static
int
WriteLogo
(
int
fd
,
const
std
::
string
&
logoPath
)
{
{
if
(
fd
<
0
||
logoPath
.
empty
())
{
std
::
cout
<<
"Invalid arguments
\n
"
;
return
-
1
;
}
int
addrOffset
=
(
PARTITION_INFO_POS
+
PARTITION_INFO_MAX_LENGTH
+
BLOCK_SZIE_1
-
1
)
/
BLOCK_SZIE_1
;
int
addrOffset
=
(
PARTITION_INFO_POS
+
PARTITION_INFO_MAX_LENGTH
+
BLOCK_SZIE_1
-
1
)
/
BLOCK_SZIE_1
;
if
(
lseek
(
fd
,
addrOffset
*
BLOCK_SZIE_1
,
SEEK_SET
)
<
0
)
{
if
(
lseek
(
fd
,
addrOffset
*
BLOCK_SZIE_1
,
SEEK_SET
)
<
0
)
{
BSH_LOGI
(
"Failed lseek logoPath %s errno %d "
,
logoPath
.
c_str
(),
errno
);
BSH_LOGI
(
"Failed lseek logoPath %s errno %d "
,
logoPath
.
c_str
(),
errno
);
...
@@ -108,11 +96,12 @@ static int WriteLogo(int fd, const std::string &logoPath)
...
@@ -108,11 +96,12 @@ static int WriteLogo(int fd, const std::string &logoPath)
BSH_LOGI
(
"Failed magic logoPath %s errno %d "
,
logoPath
.
c_str
(),
errno
);
BSH_LOGI
(
"Failed magic logoPath %s errno %d "
,
logoPath
.
c_str
(),
errno
);
return
-
1
;
return
-
1
;
}
}
#ifndef STARTUP_INIT_TEST
if
(
magic
==
LOGO_MAGIC
)
{
if
(
magic
==
LOGO_MAGIC
)
{
BSH_LOGI
(
"Get matched magic number, logo already written
\n
"
);
BSH_LOGI
(
"Get matched magic number, logo already written
\n
"
);
return
0
;
return
0
;
}
}
#endif
struct
stat
st
{};
struct
stat
st
{};
magic
=
LOGO_MAGIC
;
magic
=
LOGO_MAGIC
;
lseek
(
fd
,
addrOffset
*
BLOCK_SZIE_1
,
SEEK_SET
);
lseek
(
fd
,
addrOffset
*
BLOCK_SZIE_1
,
SEEK_SET
);
...
...
services/begetctl/partitionslot.cpp
浏览文件 @
a7141dfc
...
@@ -29,7 +29,7 @@ static int LoadDevice()
...
@@ -29,7 +29,7 @@ static int LoadDevice()
if
(
devmgr
!=
nullptr
)
{
if
(
devmgr
!=
nullptr
)
{
return
devmgr
->
LoadDevice
(
"partition_slot_service"
);
return
devmgr
->
LoadDevice
(
"partition_slot_service"
);
}
else
{
}
else
{
std
::
cout
<<
"
Get
devmgr failed"
<<
std
::
endl
;
std
::
cout
<<
"
Load
devmgr failed"
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
}
}
...
@@ -39,27 +39,22 @@ static void UnloadDevice()
...
@@ -39,27 +39,22 @@ static void UnloadDevice()
auto
devmgr
=
IDeviceManager
::
Get
();
auto
devmgr
=
IDeviceManager
::
Get
();
if
(
devmgr
!=
nullptr
)
{
if
(
devmgr
!=
nullptr
)
{
devmgr
->
UnloadDevice
(
"partition_slot_service"
);
devmgr
->
UnloadDevice
(
"partition_slot_service"
);
}
else
{
std
::
cout
<<
"Get devmgr failed"
<<
std
::
endl
;
}
}
}
}
static
int
GetSlot
(
BShellHandle
handle
,
int32_t
argc
,
char
*
argv
[])
static
int
GetSlot
(
BShellHandle
handle
,
int32_t
argc
,
char
*
argv
[])
{
{
if
(
LoadDevice
()
!=
0
)
{
if
(
LoadDevice
()
!=
0
)
{
std
::
cout
<<
"Load partitionslot device failed"
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
std
::
cout
<<
"Command: partitionslot getslot"
<<
std
::
endl
;
std
::
cout
<<
"Command: partitionslot getslot"
<<
std
::
endl
;
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
int
bootSlots
=
0
;
int
bootSlots
=
0
;
int
currentSlot
=
0
;
int
currentSlot
=
0
;
if
(
partitionslot
=
=
nullptr
)
{
if
(
partitionslot
!
=
nullptr
)
{
std
::
cout
<<
"Get partitionslot failed"
<<
std
::
endl
;
partitionslot
->
GetCurrentSlot
(
currentSlot
,
bootSlots
)
;
return
-
1
;
std
::
cout
<<
"The number of slots: "
<<
bootSlots
<<
","
<<
"current slot: "
<<
currentSlot
<<
std
::
endl
;
}
}
partitionslot
->
GetCurrentSlot
(
currentSlot
,
bootSlots
);
std
::
cout
<<
"The number of slots: "
<<
bootSlots
<<
","
<<
"current slot: "
<<
currentSlot
<<
std
::
endl
;
UnloadDevice
();
UnloadDevice
();
return
0
;
return
0
;
}
}
...
@@ -71,19 +66,16 @@ static int GetSuffix(BShellHandle handle, int32_t argc, char *argv[])
...
@@ -71,19 +66,16 @@ static int GetSuffix(BShellHandle handle, int32_t argc, char *argv[])
return
-
1
;
return
-
1
;
}
}
if
(
LoadDevice
()
!=
0
)
{
if
(
LoadDevice
()
!=
0
)
{
std
::
cout
<<
"Load partitionslot device failed"
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
std
::
cout
<<
"Command: partitionslot getsuffix"
<<
std
::
endl
;
std
::
cout
<<
"Command: partitionslot getsuffix"
<<
std
::
endl
;
int
slot
=
atoi
(
argv
[
1
]);
int
slot
=
atoi
(
argv
[
1
]);
std
::
string
suffix
=
""
;
std
::
string
suffix
=
""
;
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
if
(
partitionslot
=
=
nullptr
)
{
if
(
partitionslot
!
=
nullptr
)
{
std
::
cout
<<
"Get partitionslot failed"
<<
std
::
endl
;
partitionslot
->
GetSlotSuffix
(
slot
,
suffix
)
;
return
-
1
;
std
::
cout
<<
"The slot "
<<
slot
<<
" matches with suffix: "
<<
suffix
<<
std
::
endl
;
}
}
partitionslot
->
GetSlotSuffix
(
slot
,
suffix
);
std
::
cout
<<
"The slot "
<<
slot
<<
" matches with suffix: "
<<
suffix
<<
std
::
endl
;
UnloadDevice
();
UnloadDevice
();
return
0
;
return
0
;
}
}
...
@@ -95,18 +87,15 @@ static int SetActiveSlot(BShellHandle handle, int32_t argc, char *argv[])
...
@@ -95,18 +87,15 @@ static int SetActiveSlot(BShellHandle handle, int32_t argc, char *argv[])
return
-
1
;
return
-
1
;
}
}
if
(
LoadDevice
()
!=
0
)
{
if
(
LoadDevice
()
!=
0
)
{
std
::
cout
<<
"Load partitionslot device failed"
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
std
::
cout
<<
"Command: partitionslot setactive"
<<
std
::
endl
;
std
::
cout
<<
"Command: partitionslot setactive"
<<
std
::
endl
;
int
slot
=
atoi
(
argv
[
1
]);
int
slot
=
atoi
(
argv
[
1
]);
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
if
(
partitionslot
=
=
nullptr
)
{
if
(
partitionslot
!
=
nullptr
)
{
std
::
cout
<<
"Get partitionslot failed"
<<
std
::
endl
;
partitionslot
->
SetActiveSlot
(
slot
)
;
return
-
1
;
std
::
cout
<<
"Set active slot: "
<<
slot
<<
std
::
endl
;
}
}
partitionslot
->
SetActiveSlot
(
slot
);
std
::
cout
<<
"Set active slot: "
<<
slot
<<
std
::
endl
;
UnloadDevice
();
UnloadDevice
();
return
0
;
return
0
;
}
}
...
@@ -118,18 +107,15 @@ static int SetUnbootSlot(BShellHandle handle, int32_t argc, char *argv[])
...
@@ -118,18 +107,15 @@ static int SetUnbootSlot(BShellHandle handle, int32_t argc, char *argv[])
return
-
1
;
return
-
1
;
}
}
if
(
LoadDevice
()
!=
0
)
{
if
(
LoadDevice
()
!=
0
)
{
std
::
cout
<<
"Load partitionslot device failed"
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
std
::
cout
<<
"Command: partitionslot setunboot"
<<
std
::
endl
;
std
::
cout
<<
"Command: partitionslot setunboot"
<<
std
::
endl
;
int
slot
=
atoi
(
argv
[
1
]);
int
slot
=
atoi
(
argv
[
1
]);
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
sptr
<
IPartitionSlot
>
partitionslot
=
IPartitionSlot
::
Get
();
if
(
partitionslot
=
=
nullptr
)
{
if
(
partitionslot
!
=
nullptr
)
{
std
::
cout
<<
"Get partitionslot failed"
<<
std
::
endl
;
partitionslot
->
SetSlotUnbootable
(
slot
)
;
return
-
1
;
std
::
cout
<<
"Set unboot slot: "
<<
slot
<<
std
::
endl
;
}
}
partitionslot
->
SetSlotUnbootable
(
slot
);
std
::
cout
<<
"Set unboot slot: "
<<
slot
<<
std
::
endl
;
UnloadDevice
();
UnloadDevice
();
return
0
;
return
0
;
}
}
...
...
services/begetctl/sandbox.cpp
浏览文件 @
a7141dfc
...
@@ -47,14 +47,13 @@ static void Usage()
...
@@ -47,14 +47,13 @@ static void Usage()
std
::
cout
<<
"sandbox -n, --namespace_name=namespace name
\"
namespace name, system, chipset etc.
\"
"
<<
std
::
endl
;
std
::
cout
<<
"sandbox -n, --namespace_name=namespace name
\"
namespace name, system, chipset etc.
\"
"
<<
std
::
endl
;
std
::
cout
<<
"sandbox -p, --process=process name
\"
sh, hdcd, hdf_devhost, etc.
\"
"
<<
std
::
endl
;
std
::
cout
<<
"sandbox -p, --process=process name
\"
sh, hdcd, hdf_devhost, etc.
\"
"
<<
std
::
endl
;
std
::
cout
<<
"sandbox -h, --help
\"
Show help
\"
"
<<
std
::
endl
;
std
::
cout
<<
"sandbox -h, --help
\"
Show help
\"
"
<<
std
::
endl
;
#ifndef STARTUP_INIT_TEST
exit
(
0
);
exit
(
0
);
#endif
}
}
static
void
RunSandbox
(
const
std
::
string
&
sandboxName
)
static
void
RunSandbox
(
const
std
::
string
&
sandboxName
)
{
{
if
(
sandboxName
.
empty
())
{
return
;
}
InitDefaultNamespace
();
InitDefaultNamespace
();
if
(
!
InitSandboxWithName
(
sandboxName
.
c_str
()))
{
if
(
!
InitSandboxWithName
(
sandboxName
.
c_str
()))
{
std
::
cout
<<
"Init sandbox failed."
<<
std
::
endl
;
std
::
cout
<<
"Init sandbox failed."
<<
std
::
endl
;
...
@@ -85,10 +84,6 @@ static void EnterShell()
...
@@ -85,10 +84,6 @@ static void EnterShell()
static
const
int
MAX_PROCESS_ARGC
=
8
;
static
const
int
MAX_PROCESS_ARGC
=
8
;
static
void
EnterExec
(
const
std
::
string
&
processName
)
static
void
EnterExec
(
const
std
::
string
&
processName
)
{
{
if
(
processName
.
empty
())
{
std
::
cout
<<
"process name is nullptr."
<<
std
::
endl
;
return
;
}
std
::
string
tmpName
=
processName
;
std
::
string
tmpName
=
processName
;
std
::
vector
<
std
::
string
>
vtr
;
std
::
vector
<
std
::
string
>
vtr
;
const
std
::
string
sep
=
" "
;
const
std
::
string
sep
=
" "
;
...
...
services/begetctl/service_control.c
浏览文件 @
a7141dfc
...
@@ -47,8 +47,9 @@ static int main_cmd(BShellHandle shell, int argc, char **argv)
...
@@ -47,8 +47,9 @@ static int main_cmd(BShellHandle shell, int argc, char **argv)
}
else
if
(
strcmp
(
argv
[
0
],
"stop"
)
==
0
)
{
}
else
if
(
strcmp
(
argv
[
0
],
"stop"
)
==
0
)
{
ServiceControlWithExtra
(
argv
[
1
],
1
,
(
const
char
**
)
argv
+
SERVICE_START_NUMBER
,
argc
-
SERVICE_START_NUMBER
);
ServiceControlWithExtra
(
argv
[
1
],
1
,
(
const
char
**
)
argv
+
SERVICE_START_NUMBER
,
argc
-
SERVICE_START_NUMBER
);
}
else
if
(
strcmp
(
argv
[
0
],
"timer_start"
)
==
0
)
{
}
else
if
(
strcmp
(
argv
[
0
],
"timer_start"
)
==
0
)
{
if
(
argc
<
SERVICE_START_NUMBER
)
{
if
(
argc
<=
SERVICE_START_NUMBER
)
{
return
-
1
;
ServiceControlUsage
(
shell
,
argc
,
argv
);
return
0
;
}
}
char
*
timeBuffer
=
argv
[
SERVICE_START_NUMBER
];
char
*
timeBuffer
=
argv
[
SERVICE_START_NUMBER
];
errno
=
0
;
errno
=
0
;
...
...
services/init/adapter/init_adapter.c
浏览文件 @
a7141dfc
...
@@ -17,7 +17,6 @@
...
@@ -17,7 +17,6 @@
#include <errno.h>
#include <errno.h>
#include <semaphore.h>
#include <semaphore.h>
#include <sys/prctl.h>
#include <sys/prctl.h>
#include <sys/reboot.h>
#include <unistd.h>
#include <unistd.h>
#if defined OHOS_LITE && !defined __LINUX__
#if defined OHOS_LITE && !defined __LINUX__
#include <sys/capability.h>
#include <sys/capability.h>
...
@@ -30,14 +29,6 @@
...
@@ -30,14 +29,6 @@
#endif
#endif
#include "init_log.h"
#include "init_log.h"
void
RebootSystem
(
void
)
{
int
ret
=
reboot
(
RB_AUTOBOOT
);
if
(
ret
!=
0
)
{
INIT_LOGE
(
"reboot failed! syscall ret %d, err %d."
,
ret
,
errno
);
}
}
int
KeepCapability
(
void
)
int
KeepCapability
(
void
)
{
{
#if ((defined __LINUX__) || (!defined OHOS_LITE))
#if ((defined __LINUX__) || (!defined OHOS_LITE))
...
...
services/init/include/init.h
浏览文件 @
a7141dfc
...
@@ -34,6 +34,12 @@ extern "C" {
...
@@ -34,6 +34,12 @@ extern "C" {
#define UNUSED(x) (void)(x)
#define UNUSED(x) (void)(x)
#ifndef STARTUP_INIT_TEST
#define INIT_STATIC static
#else
#define INIT_STATIC
#endif
void
SystemInit
(
void
);
void
SystemInit
(
void
);
void
LogInit
(
void
);
void
LogInit
(
void
);
void
SystemPrepare
(
void
);
void
SystemPrepare
(
void
);
...
...
services/init/include/init_adapter.h
浏览文件 @
a7141dfc
...
@@ -40,7 +40,6 @@ extern "C" {
...
@@ -40,7 +40,6 @@ extern "C" {
#endif
#endif
#endif
#endif
void
RebootSystem
(
void
);
int
KeepCapability
(
void
);
int
KeepCapability
(
void
);
int
SetAmbientCapability
(
int
cap
);
int
SetAmbientCapability
(
int
cap
);
void
ExecuteRcs
(
void
);
void
ExecuteRcs
(
void
);
...
...
services/init/init_common_cmds.c
浏览文件 @
a7141dfc
...
@@ -117,6 +117,9 @@ const struct CmdArgs *GetCmdArg(const char *cmdContent, const char *delim, int a
...
@@ -117,6 +117,9 @@ const struct CmdArgs *GetCmdArg(const char *cmdContent, const char *delim, int a
while
(
isspace
(
*
p
))
{
while
(
isspace
(
*
p
))
{
p
++
;
p
++
;
}
}
if
(
end
==
p
)
{
// empty cmd content
break
;
}
token
=
strstr
(
p
,
delim
);
token
=
strstr
(
p
,
delim
);
if
(
token
==
NULL
)
{
if
(
token
==
NULL
)
{
ctx
->
argv
[
ctx
->
argc
]
=
AddOneArg
(
p
,
end
-
p
);
ctx
->
argv
[
ctx
->
argc
]
=
AddOneArg
(
p
,
end
-
p
);
...
@@ -151,7 +154,7 @@ void FreeCmdArg(struct CmdArgs *cmd)
...
@@ -151,7 +154,7 @@ void FreeCmdArg(struct CmdArgs *cmd)
void
ExecCmd
(
const
struct
CmdTable
*
cmd
,
const
char
*
cmdContent
)
void
ExecCmd
(
const
struct
CmdTable
*
cmd
,
const
char
*
cmdContent
)
{
{
INIT_ERROR_CHECK
(
cmd
!=
NULL
,
return
,
"Invalid cmd
for %s"
,
cmdContent
);
INIT_ERROR_CHECK
(
cmd
!=
NULL
,
return
,
"Invalid cmd
."
);
const
struct
CmdArgs
*
ctx
=
GetCmdArg
(
cmdContent
,
" "
,
cmd
->
maxArg
);
const
struct
CmdArgs
*
ctx
=
GetCmdArg
(
cmdContent
,
" "
,
cmd
->
maxArg
);
if
(
ctx
==
NULL
)
{
if
(
ctx
==
NULL
)
{
INIT_LOGE
(
"Invalid arguments cmd: %s content: %s"
,
cmd
->
name
,
cmdContent
);
INIT_LOGE
(
"Invalid arguments cmd: %s content: %s"
,
cmd
->
name
,
cmdContent
);
...
@@ -358,10 +361,7 @@ static void DoMkDir(const struct CmdArgs *ctx)
...
@@ -358,10 +361,7 @@ static void DoMkDir(const struct CmdArgs *ctx)
INIT_LOGE
(
"Failed to change owner %s, err %d."
,
ctx
->
argv
[
0
],
errno
);
INIT_LOGE
(
"Failed to change owner %s, err %d."
,
ctx
->
argv
[
0
],
errno
);
}
}
ret
=
SetFileCryptPolicy
(
ctx
->
argv
[
0
]);
ret
=
SetFileCryptPolicy
(
ctx
->
argv
[
0
]);
if
(
ret
!=
0
)
{
INIT_CHECK_ONLY_ELOG
(
ret
==
0
,
"Failed to set file fscrypt"
);
INIT_LOGW
(
"Failed to set file fscrypt"
);
}
return
;
return
;
}
}
...
@@ -578,7 +578,7 @@ static const struct CmdTable g_cmdTable[] = {
...
@@ -578,7 +578,7 @@ static const struct CmdTable g_cmdTable[] = {
{
"stop "
,
1
,
1
,
DoStop
},
{
"stop "
,
1
,
1
,
DoStop
},
{
"reset "
,
1
,
1
,
DoReset
},
{
"reset "
,
1
,
1
,
DoReset
},
{
"copy "
,
2
,
2
,
DoCopy
},
{
"copy "
,
2
,
2
,
DoCopy
},
{
"reboot "
,
1
,
1
,
DoRebootCmd
},
{
"reboot "
,
0
,
1
,
DoRebootCmd
},
{
"setrlimit "
,
3
,
3
,
DoSetrlimit
},
{
"setrlimit "
,
3
,
3
,
DoSetrlimit
},
{
"sleep "
,
1
,
1
,
DoSleep
},
{
"sleep "
,
1
,
1
,
DoSleep
},
{
"wait "
,
1
,
2
,
DoWait
},
{
"wait "
,
1
,
2
,
DoWait
},
...
...
services/init/init_common_service.c
浏览文件 @
a7141dfc
...
@@ -181,11 +181,7 @@ static int SetPerms(const Service *service)
...
@@ -181,11 +181,7 @@ static int SetPerms(const Service *service)
static
int
WritePid
(
const
Service
*
service
)
static
int
WritePid
(
const
Service
*
service
)
{
{
const
int
maxPidStrLen
=
50
;
char
pidString
[
maxPidStrLen
];
pid_t
childPid
=
getpid
();
pid_t
childPid
=
getpid
();
int
len
=
snprintf_s
(
pidString
,
maxPidStrLen
,
maxPidStrLen
-
1
,
"%d"
,
childPid
);
INIT_ERROR_CHECK
(
len
>
0
,
return
SERVICE_FAILURE
,
"Failed to format pid for service %s"
,
service
->
name
);
for
(
int
i
=
0
;
i
<
service
->
writePidArgs
.
count
;
i
++
)
{
for
(
int
i
=
0
;
i
<
service
->
writePidArgs
.
count
;
i
++
)
{
if
(
service
->
writePidArgs
.
argv
[
i
]
==
NULL
)
{
if
(
service
->
writePidArgs
.
argv
[
i
]
==
NULL
)
{
continue
;
continue
;
...
@@ -198,16 +194,16 @@ static int WritePid(const Service *service)
...
@@ -198,16 +194,16 @@ static int WritePid(const Service *service)
fd
=
fopen
(
service
->
writePidArgs
.
argv
[
i
],
"wb"
);
fd
=
fopen
(
service
->
writePidArgs
.
argv
[
i
],
"wb"
);
}
}
if
(
fd
!=
NULL
)
{
if
(
fd
!=
NULL
)
{
INIT_CHECK_ONLY_ELOG
((
int
)
f
write
(
pidString
,
1
,
len
,
fd
)
==
len
,
INIT_CHECK_ONLY_ELOG
((
int
)
f
printf
(
fd
,
"%d"
,
childPid
)
>
0
,
"Failed to write %s pid:%
s"
,
service
->
writePidArgs
.
argv
[
i
],
pidString
);
"Failed to write %s pid:%
d"
,
service
->
writePidArgs
.
argv
[
i
],
childPid
);
(
void
)
fclose
(
fd
);
(
void
)
fclose
(
fd
);
}
else
{
}
else
{
INIT_LOGE
(
"Failed to open
%s."
,
service
->
writePidArgs
.
argv
[
i
]
);
INIT_LOGE
(
"Failed to open
realPath: %s %s errno:%d."
,
realPath
,
service
->
writePidArgs
.
argv
[
i
],
errno
);
}
}
if
(
realPath
!=
NULL
)
{
if
(
realPath
!=
NULL
)
{
free
(
realPath
);
free
(
realPath
);
}
}
INIT_LOGV
(
"ServiceStart writepid filename=%s, childPid=%
s, ok"
,
service
->
writePidArgs
.
argv
[
i
],
pidString
);
INIT_LOGV
(
"ServiceStart writepid filename=%s, childPid=%
d, ok"
,
service
->
writePidArgs
.
argv
[
i
],
childPid
);
}
}
return
SERVICE_SUCCESS
;
return
SERVICE_SUCCESS
;
}
}
...
...
services/init/init_group_manager.c
浏览文件 @
a7141dfc
...
@@ -251,7 +251,6 @@ InitGroupNode *GetGroupNode(int type, const char *name)
...
@@ -251,7 +251,6 @@ InitGroupNode *GetGroupNode(int type, const char *name)
if
(
type
>=
NODE_TYPE_GROUPS
)
{
if
(
type
>=
NODE_TYPE_GROUPS
)
{
return
NULL
;
return
NULL
;
}
}
INIT_LOGV
(
"GetGroupNode type %d %p name %s"
,
type
,
g_initWorkspace
.
hashMap
[
type
],
name
);
HashNode
*
node
=
OH_HashMapGet
(
g_initWorkspace
.
hashMap
[
type
],
name
);
HashNode
*
node
=
OH_HashMapGet
(
g_initWorkspace
.
hashMap
[
type
],
name
);
if
(
node
==
NULL
)
{
if
(
node
==
NULL
)
{
return
NULL
;
return
NULL
;
...
...
services/init/lite/init_signal_handler.c
浏览文件 @
a7141dfc
...
@@ -12,12 +12,24 @@
...
@@ -12,12 +12,24 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
#include <errno.h>
#include <signal.h>
#include <signal.h>
#include <sys/reboot.h>
#include <sys/wait.h>
#include <sys/wait.h>
#include "init_
adapter
.h"
#include "init_
log
.h"
#include "init_service_manager.h"
#include "init_service_manager.h"
static
void
RebootSystem
(
void
)
{
#ifndef STARTUP_INIT_TEST
int
ret
=
reboot
(
RB_AUTOBOOT
);
if
(
ret
!=
0
)
{
INIT_LOGE
(
"reboot failed! syscall ret %d, err %d."
,
ret
,
errno
);
}
#endif
}
void
ReapService
(
Service
*
service
)
void
ReapService
(
Service
*
service
)
{
{
if
(
service
==
NULL
)
{
if
(
service
==
NULL
)
{
...
...
services/init/standard/fd_holder_service.c
浏览文件 @
a7141dfc
...
@@ -34,11 +34,6 @@ static void FreeFds(int *fds)
...
@@ -34,11 +34,6 @@ static void FreeFds(int *fds)
static
int
HandlerHoldFds
(
Service
*
service
,
int
*
fds
,
size_t
fdCount
,
const
char
*
pollStr
)
static
int
HandlerHoldFds
(
Service
*
service
,
int
*
fds
,
size_t
fdCount
,
const
char
*
pollStr
)
{
{
if
(
service
==
NULL
)
{
INIT_LOGE
(
"Request hold fds with invalid service"
);
return
-
1
;
}
if
(
fds
==
NULL
||
fdCount
==
0
||
fdCount
>
MAX_HOLD_FDS
)
{
if
(
fds
==
NULL
||
fdCount
==
0
||
fdCount
>
MAX_HOLD_FDS
)
{
INIT_LOGE
(
"Service %s request hold fds with invalid fds"
,
service
->
name
);
INIT_LOGE
(
"Service %s request hold fds with invalid fds"
,
service
->
name
);
return
-
1
;
return
-
1
;
...
@@ -93,64 +88,6 @@ static void SendErrorInfo(int sock, const char *errInfo, const char *serviceName
...
@@ -93,64 +88,6 @@ static void SendErrorInfo(int sock, const char *errInfo, const char *serviceName
}
}
}
}
static
void
SendFdsInfo
(
int
sock
,
Service
*
service
)
{
// Sanity check
if
(
sock
<
0
||
service
==
NULL
)
{
INIT_LOGE
(
"Try to send fd with invalid parameter"
);
return
;
}
char
sendBuffer
[
MAX_FD_HOLDER_BUFFER
]
=
{};
if
(
strncpy_s
(
sendBuffer
,
MAX_FD_HOLDER_BUFFER
,
"send done"
,
strlen
(
"send done"
))
!=
0
)
{
INIT_LOGE
(
"Failed to copy, err = %d"
,
errno
);
return
;
}
struct
iovec
iovec
=
{
.
iov_base
=
sendBuffer
,
.
iov_len
=
strlen
(
sendBuffer
),
};
struct
msghdr
msghdr
=
{
.
msg_iov
=
&
iovec
,
.
msg_iovlen
=
1
,
};
if
(
BuildControlMessage
(
&
msghdr
,
service
->
fds
,
service
->
fdCount
,
false
)
<
0
)
{
SendErrorInfo
(
sock
,
"Failed to build send message"
,
service
->
name
);
}
else
{
if
(
TEMP_FAILURE_RETRY
(
sendmsg
(
sock
,
&
msghdr
,
MSG_NOSIGNAL
))
<
0
)
{
INIT_LOGE
(
"Failed to send fd info to service
\'
%s
\'
, err = %d"
,
service
->
name
,
errno
);
}
else
{
// Send fd to service OK, need to close fds in init.
CloseServiceFds
(
service
,
true
);
}
}
if
(
msghdr
.
msg_control
!=
NULL
)
{
free
(
msghdr
.
msg_control
);
msghdr
.
msg_control
=
NULL
;
msghdr
.
msg_controllen
=
0
;
}
}
static
void
HandlerGetFds
(
int
sock
,
Service
*
service
)
{
if
(
sock
<
0
||
service
==
NULL
)
{
INIT_LOGE
(
"Get fd from init with invalid parameter"
);
SendErrorInfo
(
sock
,
"Invalid parameter"
,
""
);
return
;
}
if
(
service
->
fds
==
NULL
||
service
->
fdCount
==
0
)
{
INIT_LOGE
(
"Service
\'
%s
\'
does not have any held fds"
,
service
->
name
);
SendErrorInfo
(
sock
,
"Service without any fds"
,
service
->
name
);
return
;
}
// Send fds back to service
SendFdsInfo
(
sock
,
service
);
}
static
int
CheckFdHolderPermission
(
Service
*
service
,
pid_t
requestPid
)
static
int
CheckFdHolderPermission
(
Service
*
service
,
pid_t
requestPid
)
{
{
if
(
service
==
NULL
)
{
if
(
service
==
NULL
)
{
...
@@ -202,6 +139,7 @@ static void HandlerFdHolder(int sock)
...
@@ -202,6 +139,7 @@ static void HandlerFdHolder(int sock)
Service
*
service
=
GetServiceByName
(
serviceName
);
Service
*
service
=
GetServiceByName
(
serviceName
);
if
(
CheckFdHolderPermission
(
service
,
requestPid
)
<
0
)
{
if
(
CheckFdHolderPermission
(
service
,
requestPid
)
<
0
)
{
SendErrorInfo
(
sock
,
"Invalid service"
,
serviceName
);
// Permission check failed.
// Permission check failed.
// But fds may already dup to init, so close them.
// But fds may already dup to init, so close them.
CloseFds
(
fds
,
fdCount
);
CloseFds
(
fds
,
fdCount
);
...
@@ -214,10 +152,6 @@ static void HandlerFdHolder(int sock)
...
@@ -214,10 +152,6 @@ static void HandlerFdHolder(int sock)
if
(
HandlerHoldFds
(
service
,
fds
,
fdCount
,
pollStr
)
<
0
)
{
if
(
HandlerHoldFds
(
service
,
fds
,
fdCount
,
pollStr
)
<
0
)
{
CloseFds
(
fds
,
fdCount
);
CloseFds
(
fds
,
fdCount
);
}
}
}
else
if
(
strcmp
(
action
,
ACTION_GET
)
==
0
)
{
// In this case, ignore fds, just close them if fd passed to init
CloseFds
(
fds
,
fdCount
);
HandlerGetFds
(
sock
,
service
);
}
else
{
}
else
{
INIT_LOGE
(
"Unexpected action: %s"
,
action
);
INIT_LOGE
(
"Unexpected action: %s"
,
action
);
CloseFds
(
fds
,
fdCount
);
CloseFds
(
fds
,
fdCount
);
...
@@ -226,7 +160,7 @@ static void HandlerFdHolder(int sock)
...
@@ -226,7 +160,7 @@ static void HandlerFdHolder(int sock)
FreeStringVector
(
msg
,
msgCount
);
FreeStringVector
(
msg
,
msgCount
);
}
}
static
void
ProcessFdHoldEvent
(
const
WatcherHandle
taskHandle
,
int
fd
,
uint32_t
*
events
,
const
void
*
context
)
void
ProcessFdHoldEvent
(
const
WatcherHandle
taskHandle
,
int
fd
,
uint32_t
*
events
,
const
void
*
context
)
{
{
HandlerFdHolder
(
fd
);
HandlerFdHolder
(
fd
);
*
events
=
Event_Read
;
*
events
=
Event_Read
;
...
...
services/init/standard/init.c
浏览文件 @
a7141dfc
...
@@ -189,8 +189,10 @@ static void StartInitSecondStage(void)
...
@@ -189,8 +189,10 @@ static void StartInitSecondStage(void)
// Just abort
// Just abort
INIT_LOGE
(
"Mount required partitions failed; please check fstab file"
);
INIT_LOGE
(
"Mount required partitions failed; please check fstab file"
);
// Execute sh for debugging
// Execute sh for debugging
#ifndef STARTUP_INIT_TEST
execv
(
"/bin/sh"
,
NULL
);
execv
(
"/bin/sh"
,
NULL
);
abort
();
abort
();
#endif
}
}
}
}
...
@@ -258,7 +260,7 @@ static void RecordInitBootEvent(const char *initBootEvent)
...
@@ -258,7 +260,7 @@ static void RecordInitBootEvent(const char *initBootEvent)
return
;
return
;
}
}
static
void
BootStateChange
(
int
start
,
const
char
*
content
)
INIT_STATIC
void
BootStateChange
(
int
start
,
const
char
*
content
)
{
{
if
(
start
==
0
)
{
if
(
start
==
0
)
{
clock_gettime
(
CLOCK_MONOTONIC
,
&
(
g_bootJob
.
startTime
));
clock_gettime
(
CLOCK_MONOTONIC
,
&
(
g_bootJob
.
startTime
));
...
@@ -291,13 +293,13 @@ static void InitLoadParamFiles(void)
...
@@ -291,13 +293,13 @@ static void InitLoadParamFiles(void)
FreeCfgFiles
(
files
);
FreeCfgFiles
(
files
);
}
}
static
void
InitPreHook
(
const
HOOK_INFO
*
hookInfo
,
void
*
executionContext
)
INIT_STATIC
void
InitPreHook
(
const
HOOK_INFO
*
hookInfo
,
void
*
executionContext
)
{
{
INIT_TIMING_STAT
*
stat
=
(
INIT_TIMING_STAT
*
)
executionContext
;
INIT_TIMING_STAT
*
stat
=
(
INIT_TIMING_STAT
*
)
executionContext
;
clock_gettime
(
CLOCK_MONOTONIC
,
&
(
stat
->
startTime
));
clock_gettime
(
CLOCK_MONOTONIC
,
&
(
stat
->
startTime
));
}
}
static
void
InitPostHook
(
const
HOOK_INFO
*
hookInfo
,
void
*
executionContext
,
int
executionRetVal
)
INIT_STATIC
void
InitPostHook
(
const
HOOK_INFO
*
hookInfo
,
void
*
executionContext
,
int
executionRetVal
)
{
{
INIT_TIMING_STAT
*
stat
=
(
INIT_TIMING_STAT
*
)
executionContext
;
INIT_TIMING_STAT
*
stat
=
(
INIT_TIMING_STAT
*
)
executionContext
;
clock_gettime
(
CLOCK_MONOTONIC
,
&
(
stat
->
endTime
));
clock_gettime
(
CLOCK_MONOTONIC
,
&
(
stat
->
endTime
));
...
@@ -322,7 +324,7 @@ static void InitSysAdj(void)
...
@@ -322,7 +324,7 @@ static void InitSysAdj(void)
return
;
return
;
}
}
static
void
TriggerServices
(
int
startMode
)
INIT_STATIC
void
TriggerServices
(
int
startMode
)
{
{
int
index
=
0
;
int
index
=
0
;
int
jobNum
=
0
;
int
jobNum
=
0
;
...
@@ -371,7 +373,7 @@ static void TriggerServices(int startMode)
...
@@ -371,7 +373,7 @@ static void TriggerServices(int startMode)
void
SystemConfig
(
void
)
void
SystemConfig
(
void
)
{
{
INIT_TIMING_STAT
timingStat
;
INIT_TIMING_STAT
timingStat
;
InitSysAdj
();
InitSysAdj
();
HOOK_EXEC_OPTIONS
options
;
HOOK_EXEC_OPTIONS
options
;
...
...
services/init/standard/init_cmds.c
浏览文件 @
a7141dfc
...
@@ -45,6 +45,8 @@
...
@@ -45,6 +45,8 @@
#include "fscrypt_utils.h"
#include "fscrypt_utils.h"
#define FSCRYPT_POLICY_BUF_SIZE (60)
#define FSCRYPT_POLICY_BUF_SIZE (60)
#define DECIMAL 10
#define OCTAL 8
int
GetParamValue
(
const
char
*
symValue
,
unsigned
int
symLen
,
char
*
paramValue
,
unsigned
int
paramLen
)
int
GetParamValue
(
const
char
*
symValue
,
unsigned
int
symLen
,
char
*
paramValue
,
unsigned
int
paramLen
)
{
{
...
@@ -91,7 +93,6 @@ int GetParamValue(const char *symValue, unsigned int symLen, char *paramValue, u
...
@@ -91,7 +93,6 @@ int GetParamValue(const char *symValue, unsigned int symLen, char *paramValue, u
static
void
SyncExecCommand
(
int
argc
,
char
*
const
*
argv
)
static
void
SyncExecCommand
(
int
argc
,
char
*
const
*
argv
)
{
{
INIT_CHECK
(
!
(
argc
==
0
||
argv
==
NULL
||
argv
[
0
]
==
NULL
),
return
);
INIT_LOGI
(
"Sync exec: %s"
,
argv
[
0
]);
INIT_LOGI
(
"Sync exec: %s"
,
argv
[
0
]);
pid_t
pid
=
fork
();
pid_t
pid
=
fork
();
INIT_ERROR_CHECK
(
!
(
pid
<
0
),
return
,
"Fork new process to format failed: %d"
,
errno
);
INIT_ERROR_CHECK
(
!
(
pid
<
0
),
return
,
"Fork new process to format failed: %d"
,
errno
);
...
@@ -250,16 +251,14 @@ static void DoMakeNode(const struct CmdArgs *ctx)
...
@@ -250,16 +251,14 @@ static void DoMakeNode(const struct CmdArgs *ctx)
const
int
authorityPos
=
2
;
const
int
authorityPos
=
2
;
const
int
majorDevicePos
=
3
;
const
int
majorDevicePos
=
3
;
const
int
minorDevicePos
=
4
;
const
int
minorDevicePos
=
4
;
const
int
decimal
=
10
;
const
int
octal
=
8
;
INIT_ERROR_CHECK
(
access
(
ctx
->
argv
[
1
],
F_OK
),
return
,
"DoMakeNode failed, path has sexisted"
);
INIT_ERROR_CHECK
(
access
(
ctx
->
argv
[
1
],
F_OK
),
return
,
"DoMakeNode failed, path has sexisted"
);
mode_t
deviceMode
=
GetDeviceMode
(
ctx
->
argv
[
deviceTypePos
]);
mode_t
deviceMode
=
GetDeviceMode
(
ctx
->
argv
[
deviceTypePos
]);
errno
=
0
;
errno
=
0
;
unsigned
int
major
=
strtoul
(
ctx
->
argv
[
majorDevicePos
],
NULL
,
decimal
);
unsigned
int
major
=
strtoul
(
ctx
->
argv
[
majorDevicePos
],
NULL
,
DECIMAL
);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
majorDevicePos
]);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
majorDevicePos
]);
unsigned
int
minor
=
strtoul
(
ctx
->
argv
[
minorDevicePos
],
NULL
,
decimal
);
unsigned
int
minor
=
strtoul
(
ctx
->
argv
[
minorDevicePos
],
NULL
,
DECIMAL
);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
minorDevicePos
]);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
minorDevicePos
]);
mode_t
authority
=
strtoul
(
ctx
->
argv
[
authorityPos
],
NULL
,
octal
);
mode_t
authority
=
strtoul
(
ctx
->
argv
[
authorityPos
],
NULL
,
OCTAL
);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
authorityPos
]);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
authorityPos
]);
int
ret
=
mknod
(
ctx
->
argv
[
0
],
deviceMode
|
authority
,
makedev
(
major
,
minor
));
int
ret
=
mknod
(
ctx
->
argv
[
0
],
deviceMode
|
authority
,
makedev
(
major
,
minor
));
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
...
@@ -270,11 +269,10 @@ static void DoMakeNode(const struct CmdArgs *ctx)
...
@@ -270,11 +269,10 @@ static void DoMakeNode(const struct CmdArgs *ctx)
static
void
DoMakeDevice
(
const
struct
CmdArgs
*
ctx
)
static
void
DoMakeDevice
(
const
struct
CmdArgs
*
ctx
)
{
{
// format: makedev major minor
// format: makedev major minor
const
int
decimal
=
10
;
errno
=
0
;
errno
=
0
;
unsigned
int
major
=
strtoul
(
ctx
->
argv
[
0
],
NULL
,
decimal
);
unsigned
int
major
=
strtoul
(
ctx
->
argv
[
0
],
NULL
,
DECIMAL
);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
0
]);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
0
]);
unsigned
int
minor
=
strtoul
(
ctx
->
argv
[
1
],
NULL
,
decimal
);
unsigned
int
minor
=
strtoul
(
ctx
->
argv
[
1
],
NULL
,
DECIMAL
);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
1
]);
INIT_CHECK_ONLY_ELOG
(
errno
!=
ERANGE
,
"Failed to strtoul %s"
,
ctx
->
argv
[
1
]);
dev_t
deviceId
=
makedev
(
major
,
minor
);
dev_t
deviceId
=
makedev
(
major
,
minor
);
INIT_CHECK_ONLY_ELOG
(
deviceId
>=
0
,
"DoMakedevice
\"
major:%s, minor:%s
\"
failed :%d "
,
ctx
->
argv
[
0
],
INIT_CHECK_ONLY_ELOG
(
deviceId
>=
0
,
"DoMakedevice
\"
major:%s, minor:%s
\"
failed :%d "
,
ctx
->
argv
[
0
],
...
@@ -302,10 +300,6 @@ static void DoUmountFstabFile(const struct CmdArgs *ctx)
...
@@ -302,10 +300,6 @@ static void DoUmountFstabFile(const struct CmdArgs *ctx)
static
void
DoRestorecon
(
const
struct
CmdArgs
*
ctx
)
static
void
DoRestorecon
(
const
struct
CmdArgs
*
ctx
)
{
{
if
(
ctx
->
argc
!=
1
)
{
INIT_LOGE
(
"DoRestorecon invalid arguments."
);
return
;
}
PluginExecCmdByName
(
"restoreContentRecurse"
,
ctx
->
argv
[
0
]);
PluginExecCmdByName
(
"restoreContentRecurse"
,
ctx
->
argv
[
0
]);
return
;
return
;
}
}
...
@@ -411,11 +405,10 @@ static void DoTimerStop(const struct CmdArgs *ctx)
...
@@ -411,11 +405,10 @@ static void DoTimerStop(const struct CmdArgs *ctx)
static
bool
InitFscryptPolicy
(
void
)
static
bool
InitFscryptPolicy
(
void
)
{
{
char
policy
[
FSCRYPT_POLICY_BUF_SIZE
];
char
policy
[
FSCRYPT_POLICY_BUF_SIZE
];
if
(
LoadFscryptPolicy
(
policy
,
FSCRYPT_POLICY_BUF_SIZE
)
!=
0
)
{
if
(
LoadFscryptPolicy
(
policy
,
FSCRYPT_POLICY_BUF_SIZE
)
==
0
)
{
return
false
;
if
(
SetFscryptSysparam
(
policy
)
==
0
)
{
}
return
true
;
if
(
SetFscryptSysparam
(
policy
)
==
0
)
{
}
return
true
;
}
}
return
false
;
return
false
;
}
}
...
@@ -423,10 +416,6 @@ static bool InitFscryptPolicy(void)
...
@@ -423,10 +416,6 @@ static bool InitFscryptPolicy(void)
static
void
DoInitGlobalKey
(
const
struct
CmdArgs
*
ctx
)
static
void
DoInitGlobalKey
(
const
struct
CmdArgs
*
ctx
)
{
{
INIT_LOGV
(
"Do init global key start"
);
INIT_LOGV
(
"Do init global key start"
);
if
(
ctx
==
NULL
||
ctx
->
argc
!=
1
)
{
INIT_LOGE
(
"Parameter is invalid"
);
return
;
}
const
char
*
dataDir
=
"/data"
;
const
char
*
dataDir
=
"/data"
;
if
(
strncmp
(
ctx
->
argv
[
0
],
dataDir
,
strlen
(
dataDir
))
!=
0
)
{
if
(
strncmp
(
ctx
->
argv
[
0
],
dataDir
,
strlen
(
dataDir
))
!=
0
)
{
INIT_LOGE
(
"Not data partitation"
);
INIT_LOGE
(
"Not data partitation"
);
...
@@ -449,11 +438,6 @@ static void DoInitGlobalKey(const struct CmdArgs *ctx)
...
@@ -449,11 +438,6 @@ static void DoInitGlobalKey(const struct CmdArgs *ctx)
static
void
DoInitMainUser
(
const
struct
CmdArgs
*
ctx
)
static
void
DoInitMainUser
(
const
struct
CmdArgs
*
ctx
)
{
{
if
(
ctx
==
NULL
)
{
INIT_LOGE
(
"Do init main user: para invalid"
);
return
;
}
char
*
const
argv
[]
=
{
char
*
const
argv
[]
=
{
"/system/bin/sdc"
,
"/system/bin/sdc"
,
"filecrypt"
,
"filecrypt"
,
...
@@ -466,10 +450,6 @@ static void DoInitMainUser(const struct CmdArgs *ctx)
...
@@ -466,10 +450,6 @@ static void DoInitMainUser(const struct CmdArgs *ctx)
static
void
DoMkswap
(
const
struct
CmdArgs
*
ctx
)
static
void
DoMkswap
(
const
struct
CmdArgs
*
ctx
)
{
{
if
(
ctx
==
NULL
)
{
INIT_LOGE
(
"Parameter is invalid"
);
return
;
}
char
*
const
argv
[]
=
{
char
*
const
argv
[]
=
{
"/system/bin/mkswap"
,
"/system/bin/mkswap"
,
ctx
->
argv
[
0
],
ctx
->
argv
[
0
],
...
@@ -481,10 +461,6 @@ static void DoMkswap(const struct CmdArgs *ctx)
...
@@ -481,10 +461,6 @@ static void DoMkswap(const struct CmdArgs *ctx)
static
void
DoSwapon
(
const
struct
CmdArgs
*
ctx
)
static
void
DoSwapon
(
const
struct
CmdArgs
*
ctx
)
{
{
if
(
ctx
==
NULL
)
{
INIT_LOGE
(
"Parameter is invalid"
);
return
;
}
char
*
const
argv
[]
=
{
char
*
const
argv
[]
=
{
"/system/bin/swapon"
,
"/system/bin/swapon"
,
ctx
->
argv
[
0
],
ctx
->
argv
[
0
],
...
@@ -497,16 +473,7 @@ static void DoSwapon(const struct CmdArgs *ctx)
...
@@ -497,16 +473,7 @@ static void DoSwapon(const struct CmdArgs *ctx)
static
void
DoMkSandbox
(
const
struct
CmdArgs
*
ctx
)
static
void
DoMkSandbox
(
const
struct
CmdArgs
*
ctx
)
{
{
INIT_LOGV
(
"Do make sandbox start"
);
INIT_LOGV
(
"Do make sandbox start"
);
if
((
ctx
==
NULL
)
||
(
ctx
->
argc
!=
1
))
{
INIT_LOGE
(
"Call DoMkSandbox with invalid arguments"
);
return
;
}
const
char
*
sandbox
=
ctx
->
argv
[
0
];
const
char
*
sandbox
=
ctx
->
argv
[
0
];
if
(
sandbox
==
NULL
)
{
INIT_LOGE
(
"Invalid sandbox name."
);
return
;
}
InitDefaultNamespace
();
InitDefaultNamespace
();
if
(
!
InitSandboxWithName
(
sandbox
))
{
if
(
!
InitSandboxWithName
(
sandbox
))
{
INIT_LOGE
(
"Failed to init sandbox with name %s."
,
sandbox
);
INIT_LOGE
(
"Failed to init sandbox with name %s."
,
sandbox
);
...
@@ -525,15 +492,15 @@ static void DoMkSandbox(const struct CmdArgs *ctx)
...
@@ -525,15 +492,15 @@ static void DoMkSandbox(const struct CmdArgs *ctx)
static
const
struct
CmdTable
g_cmdTable
[]
=
{
static
const
struct
CmdTable
g_cmdTable
[]
=
{
{
"syncexec "
,
1
,
10
,
DoSyncExec
},
{
"syncexec "
,
1
,
10
,
DoSyncExec
},
{
"exec "
,
1
,
10
,
DoExec
},
{
"exec "
,
1
,
10
,
DoExec
},
{
"mknode "
,
1
,
5
,
DoMakeNode
},
{
"mknode "
,
5
,
5
,
DoMakeNode
},
{
"makedev "
,
2
,
2
,
DoMakeDevice
},
{
"makedev "
,
2
,
2
,
DoMakeDevice
},
{
"symlink "
,
2
,
2
,
DoSymlink
},
{
"symlink "
,
2
,
2
,
DoSymlink
},
{
"trigger "
,
1
,
1
,
DoTriggerCmd
},
{
"trigger "
,
0
,
1
,
DoTriggerCmd
},
{
"insmod "
,
1
,
10
,
DoInsmod
},
{
"insmod "
,
1
,
10
,
DoInsmod
},
{
"setparam "
,
2
,
2
,
DoSetParam
},
{
"setparam "
,
2
,
2
,
DoSetParam
},
{
"load_persist_params "
,
1
,
1
,
DoLoadPersistParams
},
{
"load_persist_params "
,
0
,
1
,
DoLoadPersistParams
},
{
"load_param "
,
1
,
2
,
DoLoadDefaultParams
},
{
"load_param "
,
1
,
2
,
DoLoadDefaultParams
},
{
"load_access_token_id "
,
1
,
1
,
DoLoadAccessTokenId
},
{
"load_access_token_id "
,
0
,
1
,
DoLoadAccessTokenId
},
{
"ifup "
,
1
,
1
,
DoIfup
},
{
"ifup "
,
1
,
1
,
DoIfup
},
{
"mount_fstab "
,
1
,
1
,
DoMountFstabFile
},
{
"mount_fstab "
,
1
,
1
,
DoMountFstabFile
},
{
"umount_fstab "
,
1
,
1
,
DoUmountFstabFile
},
{
"umount_fstab "
,
1
,
1
,
DoUmountFstabFile
},
...
...
services/init/standard/init_mount.c
浏览文件 @
a7141dfc
...
@@ -38,11 +38,9 @@ Fstab* LoadRequiredFstab(void)
...
@@ -38,11 +38,9 @@ Fstab* LoadRequiredFstab(void)
fstab
=
LoadFstabFromCommandLine
();
fstab
=
LoadFstabFromCommandLine
();
if
(
fstab
==
NULL
)
{
if
(
fstab
==
NULL
)
{
INIT_LOGI
(
"Cannot load fstab from command line, try read from fstab.required"
);
INIT_LOGI
(
"Cannot load fstab from command line, try read from fstab.required"
);
const
char
*
fstabFile
=
"/etc/fstab.required"
;
const
char
*
fstabFile
=
STARTUP_INIT_UT_PATH
"/etc/fstab.required"
;
INIT_CHECK
(
access
(
fstabFile
,
F_OK
)
==
0
,
fstabFile
=
"/system/etc/fstab.required"
);
INIT_CHECK
(
access
(
fstabFile
,
F_OK
)
==
0
,
fstabFile
=
"/system/etc/fstab.required"
);
#ifndef STARTUP_INIT_TEST
INIT_ERROR_CHECK
(
access
(
fstabFile
,
F_OK
)
==
0
,
abort
(),
"Failed get fstab.required"
);
INIT_ERROR_CHECK
(
access
(
fstabFile
,
F_OK
)
==
0
,
abort
(),
"Failed get fstab.required"
);
#endif
fstab
=
ReadFstabFromFile
(
fstabFile
,
false
);
fstab
=
ReadFstabFromFile
(
fstabFile
,
false
);
}
}
return
fstab
;
return
fstab
;
...
...
services/init/standard/init_service.c
浏览文件 @
a7141dfc
...
@@ -83,13 +83,12 @@ int ServiceExec(const Service *service)
...
@@ -83,13 +83,12 @@ int ServiceExec(const Service *service)
"setpriority failed for %s, importance = %d, err=%d"
,
service
->
name
,
service
->
importance
,
errno
);
"setpriority failed for %s, importance = %d, err=%d"
,
service
->
name
,
service
->
importance
,
errno
);
}
}
OpenHidebug
(
service
->
name
);
OpenHidebug
(
service
->
name
);
// L2 Can not be reset env
if
(
service
->
extraArgs
.
argv
!=
NULL
&&
service
->
extraArgs
.
count
>
0
)
{
if
(
service
->
extraArgs
.
argv
!=
NULL
&&
service
->
extraArgs
.
count
>
0
)
{
INIT_CHECK_ONLY_ELOG
(
execv
(
service
->
extraArgs
.
argv
[
0
],
service
->
extraArgs
.
argv
)
==
0
,
INIT_CHECK_ONLY_ELOG
(
execv
(
service
->
extraArgs
.
argv
[
0
],
service
->
extraArgs
.
argv
)
==
0
,
"service %s execv
e
failed! err %d."
,
service
->
name
,
errno
);
"service %s execv failed! err %d."
,
service
->
name
,
errno
);
}
else
{
}
else
{
INIT_CHECK_ONLY_ELOG
(
execv
(
service
->
pathArgs
.
argv
[
0
],
service
->
pathArgs
.
argv
)
==
0
,
INIT_CHECK_ONLY_ELOG
(
execv
(
service
->
pathArgs
.
argv
[
0
],
service
->
pathArgs
.
argv
)
==
0
,
"service %s execv
e
failed! err %d."
,
service
->
name
,
errno
);
"service %s execv failed! err %d."
,
service
->
name
,
errno
);
}
}
return
SERVICE_SUCCESS
;
return
SERVICE_SUCCESS
;
}
}
...
...
services/init/standard/init_signal_handler.c
浏览文件 @
a7141dfc
...
@@ -16,15 +16,16 @@
...
@@ -16,15 +16,16 @@
#include <sys/wait.h>
#include <sys/wait.h>
#include "control_fd.h"
#include "control_fd.h"
#include "init.h"
#include "init_adapter.h"
#include "init_adapter.h"
#include "init_log.h"
#include "init_log.h"
#include "init_param.h"
#include "init_param.h"
#include "init_service_manager.h"
#include "init_service_manager.h"
#include "loop_event.h"
#include "loop_event.h"
SignalHandle
g_sigHandle
=
NULL
;
static
SignalHandle
g_sigHandle
=
NULL
;
static
void
ProcessSignal
(
const
struct
signalfd_siginfo
*
siginfo
)
INIT_STATIC
void
ProcessSignal
(
const
struct
signalfd_siginfo
*
siginfo
)
{
{
switch
(
siginfo
->
ssi_signo
)
{
switch
(
siginfo
->
ssi_signo
)
{
case
SIGCHLD
:
{
case
SIGCHLD
:
{
...
@@ -38,7 +39,7 @@ static void ProcessSignal(const struct signalfd_siginfo *siginfo)
...
@@ -38,7 +39,7 @@ static void ProcessSignal(const struct signalfd_siginfo *siginfo)
Service
*
service
=
GetServiceByPid
(
sigPID
);
Service
*
service
=
GetServiceByPid
(
sigPID
);
// check child process exit status
// check child process exit status
if
(
WIFSIGNALED
(
procStat
))
{
if
(
WIFSIGNALED
(
procStat
))
{
INIT_LOGE
(
"Child process %s(pid %d) exit with
signal
: %d"
,
INIT_LOGE
(
"Child process %s(pid %d) exit with
code
: %d"
,
service
==
NULL
?
"Unknown"
:
service
->
name
,
sigPID
,
WTERMSIG
(
procStat
));
service
==
NULL
?
"Unknown"
:
service
->
name
,
sigPID
,
WTERMSIG
(
procStat
));
}
}
if
(
WIFEXITED
(
procStat
))
{
if
(
WIFEXITED
(
procStat
))
{
...
@@ -69,14 +70,12 @@ static void ProcessSignal(const struct signalfd_siginfo *siginfo)
...
@@ -69,14 +70,12 @@ static void ProcessSignal(const struct signalfd_siginfo *siginfo)
void
SignalInit
(
void
)
void
SignalInit
(
void
)
{
{
if
(
LE_CreateSignalTask
(
LE_GetDefaultLoop
(),
&
g_sigHandle
,
ProcessSignal
)
!=
0
)
{
if
(
LE_CreateSignalTask
(
LE_GetDefaultLoop
(),
&
g_sigHandle
,
ProcessSignal
)
==
0
)
{
INIT_LOGW
(
"initialize signal handler failed"
);
if
(
LE_AddSignal
(
LE_GetDefaultLoop
(),
g_sigHandle
,
SIGCHLD
)
!=
0
)
{
return
;
INIT_LOGW
(
"start SIGCHLD handler failed"
);
}
}
if
(
LE_AddSignal
(
LE_GetDefaultLoop
(),
g_sigHandle
,
SIGCHLD
)
!=
0
)
{
if
(
LE_AddSignal
(
LE_GetDefaultLoop
(),
g_sigHandle
,
SIGTERM
)
!=
0
)
{
INIT_LOGW
(
"start SIGCHLD handler failed"
);
INIT_LOGW
(
"start SIGTERM handler failed"
);
}
}
if
(
LE_AddSignal
(
LE_GetDefaultLoop
(),
g_sigHandle
,
SIGTERM
)
!=
0
)
{
INIT_LOGW
(
"start SIGTERM handler failed"
);
}
}
}
}
services/log/init_log.c
浏览文件 @
a7141dfc
...
@@ -150,20 +150,18 @@ INIT_LOCAL_API void EnableInitLogFromCmdline(void)
...
@@ -150,20 +150,18 @@ INIT_LOCAL_API void EnableInitLogFromCmdline(void)
{
{
SetInitCommLog
(
InitLog
);
SetInitCommLog
(
InitLog
);
char
level
[
MAX_BUFFER_LEN
]
=
{
0
};
char
level
[
MAX_BUFFER_LEN
]
=
{
0
};
char
*
buffer
=
ReadFileData
(
"/proc/cmdline"
);
char
*
buffer
=
ReadFileData
(
BOOT_CMD_LINE
);
if
(
buffer
==
NULL
)
{
if
(
buffer
==
NULL
)
{
INIT_LOGE
(
"Failed to read
\"
/proc/cmdline
\"
"
);
INIT_LOGE
(
"Failed to read
\"
/proc/cmdline
\"
"
);
return
;
return
;
}
}
int
ret
=
GetProcCmdlineValue
(
"initloglevel"
,
buffer
,
level
,
MAX_BUFFER_LEN
);
int
ret
=
GetProcCmdlineValue
(
"initloglevel"
,
buffer
,
level
,
MAX_BUFFER_LEN
);
free
(
buffer
);
free
(
buffer
);
if
(
ret
!=
0
)
{
if
(
ret
==
0
)
{
INIT_LOGE
(
"Failed get log level from cmdline"
);
errno
=
0
;
return
;
unsigned
int
logLevel
=
(
unsigned
int
)
strtoul
(
level
,
0
,
10
);
// 10 is decimal
INIT_INFO_CHECK
(
errno
==
0
,
return
,
"Failed strtoul %s, err=%d"
,
level
,
errno
);
SetInitLogLevel
((
InitLogLevel
)
logLevel
);
}
}
errno
=
0
;
unsigned
int
logLevel
=
(
unsigned
int
)
strtoul
(
level
,
0
,
10
);
// 10 is decimal
INIT_INFO_CHECK
(
errno
==
0
,
return
,
"Failed strtoul %s, err=%d"
,
level
,
errno
);
SetInitLogLevel
((
InitLogLevel
)
logLevel
);
return
;
return
;
}
}
services/loopevent/loop/le_epoll.c
浏览文件 @
a7141dfc
...
@@ -13,12 +13,14 @@
...
@@ -13,12 +13,14 @@
* limitations under the License.
* limitations under the License.
*/
*/
#include <errno.h>
#include "le_epoll.h"
#include "le_epoll.h"
#include "le_utils.h"
#include "le_utils.h"
static
int
IsValid_
(
const
EventEpoll
*
loop
)
static
int
IsValid_
(
const
EventEpoll
*
loop
)
{
{
return
loop
->
epollFd
>
0
;
return
loop
->
epollFd
>
=
0
;
}
}
static
void
GetEpollEvent_
(
int
fd
,
int
op
,
struct
epoll_event
*
event
)
static
void
GetEpollEvent_
(
int
fd
,
int
op
,
struct
epoll_event
*
event
)
...
@@ -36,6 +38,7 @@ static LE_STATUS Close_(const EventLoop *loop)
...
@@ -36,6 +38,7 @@ static LE_STATUS Close_(const EventLoop *loop)
{
{
LE_CHECK
(
loop
!=
NULL
,
return
LE_FAILURE
,
"Invalid loop"
);
LE_CHECK
(
loop
!=
NULL
,
return
LE_FAILURE
,
"Invalid loop"
);
EventEpoll
*
epoll
=
(
EventEpoll
*
)
loop
;
EventEpoll
*
epoll
=
(
EventEpoll
*
)
loop
;
LE_LOGV
(
"Close_ epollFd %d"
,
epoll
->
epollFd
);
close
(
epoll
->
epollFd
);
close
(
epoll
->
epollFd
);
free
(
epoll
);
free
(
epoll
);
return
LE_SUCCESS
;
return
LE_SUCCESS
;
...
@@ -124,7 +127,7 @@ LE_STATUS CreateEpollLoop(EventLoop **loop, uint32_t maxevents, uint32_t timeout
...
@@ -124,7 +127,7 @@ LE_STATUS CreateEpollLoop(EventLoop **loop, uint32_t maxevents, uint32_t timeout
EventEpoll
*
epoll
=
(
EventEpoll
*
)
malloc
(
sizeof
(
EventEpoll
)
+
sizeof
(
struct
epoll_event
)
*
(
maxevents
));
EventEpoll
*
epoll
=
(
EventEpoll
*
)
malloc
(
sizeof
(
EventEpoll
)
+
sizeof
(
struct
epoll_event
)
*
(
maxevents
));
LE_CHECK
(
epoll
!=
NULL
,
return
LE_FAILURE
,
"Failed to alloc memory for epoll"
);
LE_CHECK
(
epoll
!=
NULL
,
return
LE_FAILURE
,
"Failed to alloc memory for epoll"
);
epoll
->
epollFd
=
epoll_create
(
maxevents
);
epoll
->
epollFd
=
epoll_create
(
maxevents
);
LE_CHECK
(
epoll
->
epollFd
>
0
,
free
(
epoll
);
LE_CHECK
(
epoll
->
epollFd
>
=
0
,
free
(
epoll
);
return
LE_FAILURE
,
"Failed to create epoll"
);
return
LE_FAILURE
,
"Failed to create epoll"
);
*
loop
=
(
EventLoop
*
)
epoll
;
*
loop
=
(
EventLoop
*
)
epoll
;
...
...
services/loopevent/loop/le_loop.c
浏览文件 @
a7141dfc
...
@@ -137,11 +137,11 @@ LoopHandle LE_GetDefaultLoop(void)
...
@@ -137,11 +137,11 @@ LoopHandle LE_GetDefaultLoop(void)
return
(
LoopHandle
)
g_defaultLoop
;
return
(
LoopHandle
)
g_defaultLoop
;
}
}
LE_STATUS
LE_CreateLoop
(
LoopHandle
*
handl
l
e
)
LE_STATUS
LE_CreateLoop
(
LoopHandle
*
handle
)
{
{
EventLoop
*
loop
=
NULL
;
EventLoop
*
loop
=
NULL
;
LE_STATUS
ret
=
CreateLoop_
(
&
loop
,
LOOP_MAX_SOCKET
,
DEFAULT_TIMEOUT
);
LE_STATUS
ret
=
CreateLoop_
(
&
loop
,
LOOP_MAX_SOCKET
,
DEFAULT_TIMEOUT
);
*
handl
l
e
=
(
LoopHandle
)
loop
;
*
handle
=
(
LoopHandle
)
loop
;
return
ret
;
return
ret
;
}
}
...
@@ -156,6 +156,9 @@ void LE_CloseLoop(const LoopHandle loopHandle)
...
@@ -156,6 +156,9 @@ void LE_CloseLoop(const LoopHandle loopHandle)
{
{
LE_CHECK
(
loopHandle
!=
NULL
,
return
,
"Invalid handle"
);
LE_CHECK
(
loopHandle
!=
NULL
,
return
,
"Invalid handle"
);
CloseLoop
((
EventLoop
*
)
loopHandle
);
CloseLoop
((
EventLoop
*
)
loopHandle
);
if
((
LoopHandle
)
g_defaultLoop
==
loopHandle
)
{
g_defaultLoop
=
NULL
;
}
}
}
void
LE_StopLoop
(
const
LoopHandle
handle
)
void
LE_StopLoop
(
const
LoopHandle
handle
)
...
...
services/loopevent/socket/le_socket.c
浏览文件 @
a7141dfc
...
@@ -90,6 +90,7 @@ static LE_STATUS GetSockaddrFromServer_(const char *server, struct sockaddr_in *
...
@@ -90,6 +90,7 @@ static LE_STATUS GetSockaddrFromServer_(const char *server, struct sockaddr_in *
addr
->
sin_port
=
htons
(
port
);
addr
->
sin_port
=
htons
(
port
);
ret
=
inet_pton
(
AF_INET
,
server
,
&
addr
->
sin_addr
);
ret
=
inet_pton
(
AF_INET
,
server
,
&
addr
->
sin_addr
);
LE_CHECK
(
ret
>=
0
,
return
LE_FAILURE
,
"Failed to inet_pton addr %s"
,
server
);
LE_CHECK
(
ret
>=
0
,
return
LE_FAILURE
,
"Failed to inet_pton addr %s"
,
server
);
LE_LOGV
(
"CreateTcpSocket server: %s port: %d"
,
server
,
port
);
return
LE_SUCCESS
;
return
LE_SUCCESS
;
}
}
...
@@ -119,10 +120,9 @@ static int CreateTcpSocket_(const char *server)
...
@@ -119,10 +120,9 @@ static int CreateTcpSocket_(const char *server)
struct
sockaddr_in
serverAddr
;
struct
sockaddr_in
serverAddr
;
GetSockaddrFromServer_
(
server
,
&
serverAddr
);
GetSockaddrFromServer_
(
server
,
&
serverAddr
);
LE_LOGV
(
"CreateTcpSocket connect: %s "
,
server
);
int
ret
=
connect
(
fd
,
(
struct
sockaddr
*
)
&
serverAddr
,
sizeof
(
serverAddr
));
int
ret
=
connect
(
fd
,
(
struct
sockaddr
*
)
&
serverAddr
,
sizeof
(
serverAddr
));
LE_CHECK
(
ret
>=
0
,
close
(
fd
);
LE_CHECK
(
ret
>=
0
,
close
(
fd
);
return
ret
,
"Failed to connect socket
"
);
return
ret
,
"Failed to connect socket
errno:%d"
,
errno
);
return
fd
;
return
fd
;
}
}
...
...
services/loopevent/task/le_task.c
浏览文件 @
a7141dfc
...
@@ -38,7 +38,7 @@ BaseTask *CreateTask(const LoopHandle loopHandle, int fd, const LE_BaseInfo *inf
...
@@ -38,7 +38,7 @@ BaseTask *CreateTask(const LoopHandle loopHandle, int fd, const LE_BaseInfo *inf
if
((
size
>=
LOOP_MAX_BUFFER
)
||
((
size
+
info
->
userDataSize
)
>=
LOOP_MAX_BUFFER
))
{
if
((
size
>=
LOOP_MAX_BUFFER
)
||
((
size
+
info
->
userDataSize
)
>=
LOOP_MAX_BUFFER
))
{
return
NULL
;
return
NULL
;
}
}
BaseTask
*
task
=
(
BaseTask
*
)
malloc
(
size
+
info
->
userDataSize
);
BaseTask
*
task
=
(
BaseTask
*
)
calloc
(
1
,
size
+
info
->
userDataSize
);
LE_CHECK
(
task
!=
NULL
,
return
NULL
,
"Failed to alloc for task"
);
LE_CHECK
(
task
!=
NULL
,
return
NULL
,
"Failed to alloc for task"
);
HASHMAPInitNode
(
&
task
->
hashNode
);
HASHMAPInitNode
(
&
task
->
hashNode
);
// key id
// key id
...
...
services/loopevent/utils/le_utils.c
浏览文件 @
a7141dfc
...
@@ -22,11 +22,7 @@ void SetNoBlock(int fd)
...
@@ -22,11 +22,7 @@ void SetNoBlock(int fd)
if
(
option
<
0
)
{
if
(
option
<
0
)
{
return
;
return
;
}
}
option
=
option
|
O_NONBLOCK
|
FD_CLOEXEC
;
option
=
option
|
O_NONBLOCK
|
FD_CLOEXEC
;
option
=
fcntl
(
fd
,
F_SETFD
,
option
);
(
void
)
fcntl
(
fd
,
F_SETFD
,
option
);
if
(
option
<
0
)
{
return
;
}
return
;
return
;
}
}
\ No newline at end of file
services/modules/bootchart/bootchart.c
浏览文件 @
a7141dfc
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
static
BootchartCtrl
*
g_bootchartCtrl
=
NULL
;
static
BootchartCtrl
*
g_bootchartCtrl
=
NULL
;
static
long
long
GetJiffies
(
void
)
BOOTCHART_STATIC
long
long
GetJiffies
(
void
)
{
{
struct
timespec
time1
=
{
0
};
struct
timespec
time1
=
{
0
};
clock_gettime
(
CLOCK_MONOTONIC
,
&
time1
);
clock_gettime
(
CLOCK_MONOTONIC
,
&
time1
);
...
@@ -63,7 +63,7 @@ char *ReadFileToBuffer(const char *fileName, char *buffer, uint32_t bufferSize)
...
@@ -63,7 +63,7 @@ char *ReadFileToBuffer(const char *fileName, char *buffer, uint32_t bufferSize)
return
(
readLen
>
0
)
?
buffer
:
NULL
;
return
(
readLen
>
0
)
?
buffer
:
NULL
;
}
}
static
void
BootchartLogHeader
(
void
)
BOOTCHART_STATIC
void
BootchartLogHeader
(
void
)
{
{
char
date
[
32
];
// 32 data size
char
date
[
32
];
// 32 data size
time_t
tm
=
time
(
NULL
);
time_t
tm
=
time
(
NULL
);
...
@@ -97,7 +97,7 @@ static void BootchartLogHeader(void)
...
@@ -97,7 +97,7 @@ static void BootchartLogHeader(void)
(
void
)
fclose
(
file
);
(
void
)
fclose
(
file
);
}
}
static
void
BootchartLogFile
(
FILE
*
log
,
const
char
*
procfile
)
BOOTCHART_STATIC
void
BootchartLogFile
(
FILE
*
log
,
const
char
*
procfile
)
{
{
(
void
)
fprintf
(
log
,
"%lld
\n
"
,
GetJiffies
());
(
void
)
fprintf
(
log
,
"%lld
\n
"
,
GetJiffies
());
char
*
data
=
ReadFileToBuffer
(
procfile
,
g_bootchartCtrl
->
buffer
,
g_bootchartCtrl
->
bufferSize
);
char
*
data
=
ReadFileToBuffer
(
procfile
,
g_bootchartCtrl
->
buffer
,
g_bootchartCtrl
->
bufferSize
);
...
@@ -106,7 +106,7 @@ static void BootchartLogFile(FILE *log, const char *procfile)
...
@@ -106,7 +106,7 @@ static void BootchartLogFile(FILE *log, const char *procfile)
}
}
}
}
static
void
BootchartLogProcessStat
(
FILE
*
log
,
pid_t
pid
)
BOOTCHART_STATIC
void
BootchartLogProcessStat
(
FILE
*
log
,
pid_t
pid
)
{
{
static
char
path
[
255
]
=
{
};
// 255 path length
static
char
path
[
255
]
=
{
};
// 255 path length
static
char
nameBuffer
[
255
]
=
{
};
// 255 path length
static
char
nameBuffer
[
255
]
=
{
};
// 255 path length
...
@@ -143,7 +143,7 @@ static void BootchartLogProcessStat(FILE *log, pid_t pid)
...
@@ -143,7 +143,7 @@ static void BootchartLogProcessStat(FILE *log, pid_t pid)
}
}
}
}
static
void
bootchartLogProcess
(
FILE
*
log
)
BOOTCHART_STATIC
void
bootchartLogProcess
(
FILE
*
log
)
{
{
(
void
)
fprintf
(
log
,
"%lld
\n
"
,
GetJiffies
());
(
void
)
fprintf
(
log
,
"%lld
\n
"
,
GetJiffies
());
DIR
*
pDir
=
opendir
(
"/proc"
);
DIR
*
pDir
=
opendir
(
"/proc"
);
...
@@ -160,7 +160,7 @@ static void bootchartLogProcess(FILE *log)
...
@@ -160,7 +160,7 @@ static void bootchartLogProcess(FILE *log)
(
void
)
fputc
(
'\n'
,
log
);
(
void
)
fputc
(
'\n'
,
log
);
}
}
static
void
*
BootchartThreadMain
(
void
*
data
)
BOOTCHART_STATIC
void
*
BootchartThreadMain
(
void
*
data
)
{
{
PLUGIN_LOGI
(
"bootcharting start"
);
PLUGIN_LOGI
(
"bootcharting start"
);
FILE
*
statFile
=
fopen
(
BOOTCHART_OUTPUT_PATH
"proc_stat.log"
,
"w"
);
FILE
*
statFile
=
fopen
(
BOOTCHART_OUTPUT_PATH
"proc_stat.log"
,
"w"
);
...
@@ -210,7 +210,7 @@ static void *BootchartThreadMain(void *data)
...
@@ -210,7 +210,7 @@ static void *BootchartThreadMain(void *data)
return
NULL
;
return
NULL
;
}
}
static
void
BootchartDestory
(
void
)
BOOTCHART_STATIC
void
BootchartDestory
(
void
)
{
{
pthread_mutex_destroy
(
&
(
g_bootchartCtrl
->
mutex
));
pthread_mutex_destroy
(
&
(
g_bootchartCtrl
->
mutex
));
pthread_cond_destroy
(
&
(
g_bootchartCtrl
->
cond
));
pthread_cond_destroy
(
&
(
g_bootchartCtrl
->
cond
));
...
@@ -218,7 +218,7 @@ static void BootchartDestory(void)
...
@@ -218,7 +218,7 @@ static void BootchartDestory(void)
g_bootchartCtrl
=
NULL
;
g_bootchartCtrl
=
NULL
;
}
}
static
int
DoBootchartStart
(
void
)
BOOTCHART_STATIC
int
DoBootchartStart
(
void
)
{
{
if
(
g_bootchartCtrl
!=
NULL
)
{
if
(
g_bootchartCtrl
!=
NULL
)
{
PLUGIN_LOGI
(
"bootcharting has been start"
);
PLUGIN_LOGI
(
"bootcharting has been start"
);
...
@@ -247,7 +247,7 @@ static int DoBootchartStart(void)
...
@@ -247,7 +247,7 @@ static int DoBootchartStart(void)
return
0
;
return
0
;
}
}
static
int
DoBootchartStop
(
void
)
BOOTCHART_STATIC
int
DoBootchartStop
(
void
)
{
{
if
(
g_bootchartCtrl
==
NULL
||
!
g_bootchartCtrl
->
start
)
{
if
(
g_bootchartCtrl
==
NULL
||
!
g_bootchartCtrl
->
start
)
{
PLUGIN_LOGI
(
"bootcharting not start"
);
PLUGIN_LOGI
(
"bootcharting not start"
);
...
@@ -263,7 +263,7 @@ static int DoBootchartStop(void)
...
@@ -263,7 +263,7 @@ static int DoBootchartStop(void)
return
0
;
return
0
;
}
}
static
int
DoBootchartCmd
(
int
id
,
const
char
*
name
,
int
argc
,
const
char
**
argv
)
BOOTCHART_STATIC
int
DoBootchartCmd
(
int
id
,
const
char
*
name
,
int
argc
,
const
char
**
argv
)
{
{
PLUGIN_LOGI
(
"DoBootchartCmd argc %d %s"
,
argc
,
name
);
PLUGIN_LOGI
(
"DoBootchartCmd argc %d %s"
,
argc
,
name
);
PLUGIN_CHECK
(
argc
>=
1
,
return
-
1
,
"Invalid parameter"
);
PLUGIN_CHECK
(
argc
>=
1
,
return
-
1
,
"Invalid parameter"
);
...
@@ -276,7 +276,7 @@ static int DoBootchartCmd(int id, const char *name, int argc, const char **argv)
...
@@ -276,7 +276,7 @@ static int DoBootchartCmd(int id, const char *name, int argc, const char **argv)
}
}
static
int32_t
g_executorId
=
-
1
;
static
int32_t
g_executorId
=
-
1
;
static
int
BootchartInit
(
void
)
BOOTCHART_STATIC
int
BootchartInit
(
void
)
{
{
if
(
g_executorId
==
-
1
)
{
if
(
g_executorId
==
-
1
)
{
g_executorId
=
AddCmdExecutor
(
"bootchart"
,
DoBootchartCmd
);
g_executorId
=
AddCmdExecutor
(
"bootchart"
,
DoBootchartCmd
);
...
@@ -285,7 +285,7 @@ static int BootchartInit(void)
...
@@ -285,7 +285,7 @@ static int BootchartInit(void)
return
0
;
return
0
;
}
}
static
void
BootchartExit
(
void
)
BOOTCHART_STATIC
void
BootchartExit
(
void
)
{
{
PLUGIN_LOGI
(
"BootchartExit executorId %d"
,
g_executorId
);
PLUGIN_LOGI
(
"BootchartExit executorId %d"
,
g_executorId
);
if
(
g_executorId
!=
-
1
)
{
if
(
g_executorId
!=
-
1
)
{
...
...
services/modules/bootchart/bootchart.h
浏览文件 @
a7141dfc
...
@@ -29,4 +29,10 @@ typedef struct {
...
@@ -29,4 +29,10 @@ typedef struct {
char
buffer
[
DEFAULT_BUFFER
];
char
buffer
[
DEFAULT_BUFFER
];
}
BootchartCtrl
;
}
BootchartCtrl
;
#ifdef STARTUP_INIT_TEST
#define BOOTCHART_STATIC
#else
#define BOOTCHART_STATIC static
#endif
#endif
/* _PLUGIN_BOOTCHART_H */
#endif
/* _PLUGIN_BOOTCHART_H */
services/modules/bootevent/bootevent.c
浏览文件 @
a7141dfc
...
@@ -254,8 +254,9 @@ static void BootEventParaFireByName(const char *paramName)
...
@@ -254,8 +254,9 @@ static void BootEventParaFireByName(const char *paramName)
const
char
*
clearBootEventArgv
[]
=
{
"bootevent"
};
const
char
*
clearBootEventArgv
[]
=
{
"bootevent"
};
// clear servie extra data
// clear servie extra data
PluginExecCmd
(
"clear"
,
ARRAY_LENGTH
(
clearBootEventArgv
),
clearBootEventArgv
);
PluginExecCmd
(
"clear"
,
ARRAY_LENGTH
(
clearBootEventArgv
),
clearBootEventArgv
);
#ifndef STARTUP_INIT_TEST
HookMgrExecute
(
GetBootStageHookMgr
(),
INIT_BOOT_COMPLETE
,
NULL
,
NULL
);
HookMgrExecute
(
GetBootStageHookMgr
(),
INIT_BOOT_COMPLETE
,
NULL
,
NULL
);
#endif
return
;
return
;
}
}
...
@@ -304,7 +305,7 @@ static void AddCmdBootEvent(int argc, const char **argv)
...
@@ -304,7 +305,7 @@ static void AddCmdBootEvent(int argc, const char **argv)
if
(
argc
<
4
)
{
// 4 is min args cmd boot event required
if
(
argc
<
4
)
{
// 4 is min args cmd boot event required
return
;
return
;
}
}
BOOT_EVENT_PARAM_ITEM
*
item
=
calloc
(
1
,
sizeof
(
BOOT_EVENT_PARAM_ITEM
));
BOOT_EVENT_PARAM_ITEM
*
item
=
calloc
(
1
,
sizeof
(
BOOT_EVENT_PARAM_ITEM
));
if
(
item
==
NULL
)
{
if
(
item
==
NULL
)
{
return
;
return
;
...
@@ -431,7 +432,7 @@ MODULE_CONSTRUCTOR(void)
...
@@ -431,7 +432,7 @@ MODULE_CONSTRUCTOR(void)
HookMgrAddEx
(
GetBootStageHookMgr
(),
&
info
);
HookMgrAddEx
(
GetBootStageHookMgr
(),
&
info
);
InitAddServiceHook
(
SetServiceBootEventFork
,
INIT_SERVICE_FORK_BEFORE
);
InitAddServiceHook
(
SetServiceBootEventFork
,
INIT_SERVICE_FORK_BEFORE
);
InitAddServiceHook
(
SetServiceBootEventFork
,
INIT_SERVICE_FORK_AFTER
);
InitAddServiceHook
(
SetServiceBootEventFork
,
INIT_SERVICE_FORK_AFTER
);
InitAdd
ServiceHook
(
ClearServiceBootEvent
,
INIT_SERVICE_CLEAR
);
InitAdd
ClearServiceHook
(
ClearServiceBootEvent
);
InitAddServiceParseHook
(
ServiceParseBootEventHook
);
InitAddServiceParseHook
(
ServiceParseBootEventHook
);
InitAddGlobalInitHook
(
0
,
ParamSetBootEventHook
);
InitAddGlobalInitHook
(
0
,
ParamSetBootEventHook
);
InitAddPostPersistParamLoadHook
(
0
,
GetBootEventFlag
);
InitAddPostPersistParamLoadHook
(
0
,
GetBootEventFlag
);
...
...
services/modules/init_hook/init_hook.c
浏览文件 @
a7141dfc
...
@@ -199,9 +199,9 @@ static void DumpServiceHook(void)
...
@@ -199,9 +199,9 @@ static void DumpServiceHook(void)
// check and dump all jobs
// check and dump all jobs
char
dump
[
8
]
=
{
0
};
// 8 len
char
dump
[
8
]
=
{
0
};
// 8 len
uint32_t
len
=
sizeof
(
dump
);
uint32_t
len
=
sizeof
(
dump
);
int
ret
=
SystemReadParam
(
"persist.init.debug.dump.trigger"
,
dump
,
&
len
);
(
void
)
SystemReadParam
(
"persist.init.debug.dump.trigger"
,
dump
,
&
len
);
PLUGIN_LOGV
(
"boot dump
%s ret %d"
,
dump
,
ret
);
PLUGIN_LOGV
(
"boot dump
trigger %s"
,
dump
);
if
(
ret
==
0
&&
strcmp
(
dump
,
"1"
)
==
0
)
{
if
(
strcmp
(
dump
,
"1"
)
==
0
)
{
SystemDumpTriggers
(
1
,
DumpTrigger
);
SystemDumpTriggers
(
1
,
DumpTrigger
);
}
}
return
;
return
;
...
...
services/modules/reboot/reboot_static.c
浏览文件 @
a7141dfc
...
@@ -156,7 +156,9 @@ const ParamCmdInfo *GetStartupPowerCtl(size_t *size)
...
@@ -156,7 +156,9 @@ const ParamCmdInfo *GetStartupPowerCtl(size_t *size)
static
void
InitRebootHook_
(
RebootHookCtx
*
ctx
)
static
void
InitRebootHook_
(
RebootHookCtx
*
ctx
)
{
{
#ifndef STARTUP_INIT_TEST // do not install
InitModuleMgrInstall
(
"rebootmodule"
);
InitModuleMgrInstall
(
"rebootmodule"
);
#endif
PLUGIN_LOGI
(
"Install rebootmodule."
);
PLUGIN_LOGI
(
"Install rebootmodule."
);
}
}
...
...
services/modules/selinux/selinux_adp.c
浏览文件 @
a7141dfc
...
@@ -56,7 +56,9 @@ static int SetServiceContent(int id, const char *name, int argc, const char **ar
...
@@ -56,7 +56,9 @@ static int SetServiceContent(int id, const char *name, int argc, const char **ar
if
(
data
!=
NULL
)
{
if
(
data
!=
NULL
)
{
if
(
setexeccon
((
char
*
)
data
->
data
)
<
0
)
{
if
(
setexeccon
((
char
*
)
data
->
data
)
<
0
)
{
PLUGIN_LOGE
(
"failed to set service %s's secon (%s)."
,
argv
[
0
],
(
char
*
)
data
->
data
);
PLUGIN_LOGE
(
"failed to set service %s's secon (%s)."
,
argv
[
0
],
(
char
*
)
data
->
data
);
#ifndef STARTUP_INIT_TEST
_exit
(
PROCESS_EXIT_CODE
);
_exit
(
PROCESS_EXIT_CODE
);
#endif
}
else
{
}
else
{
PLUGIN_LOGV
(
"Set content %s to %s."
,
(
char
*
)
data
->
data
,
argv
[
0
]);
PLUGIN_LOGV
(
"Set content %s to %s."
,
(
char
*
)
data
->
data
,
argv
[
0
]);
}
}
...
@@ -70,17 +72,19 @@ static int SetServiceContent(int id, const char *name, int argc, const char **ar
...
@@ -70,17 +72,19 @@ static int SetServiceContent(int id, const char *name, int argc, const char **ar
static
int
SetSockCreateCon
(
int
id
,
const
char
*
name
,
int
argc
,
const
char
**
argv
)
static
int
SetSockCreateCon
(
int
id
,
const
char
*
name
,
int
argc
,
const
char
**
argv
)
{
{
PLUGIN_CHECK
(
name
!=
NULL
&&
argc
>=
1
&&
argv
!=
NULL
,
return
-
1
,
"Invalid parameter"
);
PLUGIN_CHECK
(
name
!=
NULL
,
return
-
1
,
"Invalid parameter"
);
if
(
strcmp
(
argv
[
0
],
""
)
==
0
)
{
if
(
argc
==
0
)
{
setsockcreatecon
(
NULL
);
setsockcreatecon
(
NULL
);
return
0
;
return
0
;
}
}
PLUGIN_CHECK
(
argc
>=
1
&&
argv
!=
NULL
,
return
-
1
,
"Invalid parameter"
);
ServiceExtData
*
data
=
GetServiceExtData
(
argv
[
0
],
HOOK_ID_SELINUX
);
ServiceExtData
*
data
=
GetServiceExtData
(
argv
[
0
],
HOOK_ID_SELINUX
);
if
(
data
!=
NULL
)
{
if
(
data
!=
NULL
)
{
if
(
setsockcreatecon
((
char
*
)
data
->
data
)
<
0
)
{
if
(
setsockcreatecon
((
char
*
)
data
->
data
)
<
0
)
{
PLUGIN_LOGE
(
"failed to set socket context %s's secon (%s)."
,
argv
[
0
],
(
char
*
)
data
->
data
);
PLUGIN_LOGE
(
"failed to set socket context %s's secon (%s)."
,
argv
[
0
],
(
char
*
)
data
->
data
);
#ifndef STARTUP_INIT_TEST
_exit
(
PROCESS_EXIT_CODE
);
_exit
(
PROCESS_EXIT_CODE
);
#endif
}
}
}
}
...
...
services/modules/selinux/selinux_static.c
浏览文件 @
a7141dfc
...
@@ -21,7 +21,9 @@
...
@@ -21,7 +21,9 @@
static
int
SelinuxHook
(
const
HOOK_INFO
*
hookInfo
,
void
*
cookie
)
static
int
SelinuxHook
(
const
HOOK_INFO
*
hookInfo
,
void
*
cookie
)
{
{
PLUGIN_LOGI
(
"Install selinuxadp."
);
PLUGIN_LOGI
(
"Install selinuxadp."
);
#ifndef STARTUP_INIT_TEST // do not install
InitModuleMgrInstall
(
"selinuxadp"
);
InitModuleMgrInstall
(
"selinuxadp"
);
#endif
return
0
;
return
0
;
}
}
...
...
services/param/adapter/param_dac.c
浏览文件 @
a7141dfc
...
@@ -29,7 +29,11 @@
...
@@ -29,7 +29,11 @@
#define MAX_BUF_SIZE 1024
#define MAX_BUF_SIZE 1024
#define GROUP_FORMAT "const.group"
#define GROUP_FORMAT "const.group"
#define INVALID_MODE 0550
#define INVALID_MODE 0550
#ifdef STARTUP_INIT_TEST
#define GROUP_FILE_PATH STARTUP_INIT_UT_PATH "/etc/group"
#else
#define GROUP_FILE_PATH "/etc/group"
#define GROUP_FILE_PATH "/etc/group"
#endif
#define OCT_BASE 8
#define OCT_BASE 8
#define INVALID_UID(uid) ((uid) == (uid_t)-1)
#define INVALID_UID(uid) ((uid) == (uid_t)-1)
...
...
services/param/adapter/param_persistadp.c
浏览文件 @
a7141dfc
...
@@ -27,10 +27,9 @@ static ParamMutex g_saveMutex = {};
...
@@ -27,10 +27,9 @@ static ParamMutex g_saveMutex = {};
static
int
LoadOnePersistParam_
(
const
uint32_t
*
context
,
const
char
*
name
,
const
char
*
value
)
static
int
LoadOnePersistParam_
(
const
uint32_t
*
context
,
const
char
*
name
,
const
char
*
value
)
{
{
UNUSED
(
context
);
uint32_t
dataIndex
=
0
;
uint32_t
dataIndex
=
0
;
int
ret
=
WriteParam
(
name
,
value
,
&
dataIndex
,
0
);
return
WriteParam
(
name
,
value
,
&
dataIndex
,
0
);
PARAM_CHECK
(
ret
==
0
,
return
ret
,
"Failed to write param %d name:%s %s"
,
ret
,
name
,
value
);
return
0
;
}
}
static
int
LoadPersistParam
()
static
int
LoadPersistParam
()
...
@@ -48,10 +47,9 @@ static int LoadPersistParam()
...
@@ -48,10 +47,9 @@ static int LoadPersistParam()
const
int
buffSize
=
PARAM_NAME_LEN_MAX
+
PARAM_CONST_VALUE_LEN_MAX
+
10
;
// 10 max len
const
int
buffSize
=
PARAM_NAME_LEN_MAX
+
PARAM_CONST_VALUE_LEN_MAX
+
10
;
// 10 max len
char
*
buffer
=
malloc
(
buffSize
);
char
*
buffer
=
malloc
(
buffSize
);
if
(
buffer
==
NULL
)
{
PARAM_CHECK
(
buffer
!=
NULL
,
(
void
)
fclose
(
fp
);
(
void
)
fclose
(
fp
);
return
-
1
,
"Failed to alloc"
);
return
-
1
;
}
uint32_t
paramNum
=
0
;
uint32_t
paramNum
=
0
;
while
(
fgets
(
buffer
,
buffSize
,
fp
)
!=
NULL
)
{
while
(
fgets
(
buffer
,
buffSize
,
fp
)
!=
NULL
)
{
buffer
[
buffSize
-
1
]
=
'\0'
;
buffer
[
buffSize
-
1
]
=
'\0'
;
...
@@ -101,9 +99,8 @@ static int BatchSavePersistParam(PERSIST_SAVE_HANDLE handle, const char *name, c
...
@@ -101,9 +99,8 @@ static int BatchSavePersistParam(PERSIST_SAVE_HANDLE handle, const char *name, c
{
{
FILE
*
fp
=
(
FILE
*
)
handle
;
FILE
*
fp
=
(
FILE
*
)
handle
;
int
ret
=
fprintf
(
fp
,
"%s=%s
\n
"
,
name
,
value
);
int
ret
=
fprintf
(
fp
,
"%s=%s
\n
"
,
name
,
value
);
PARAM_CHECK
(
ret
>
0
,
return
-
1
,
"Failed to write param"
);
PARAM_LOGV
(
"BatchSavePersistParam %s=%s"
,
name
,
value
);
PARAM_LOGV
(
"BatchSavePersistParam %s=%s"
,
name
,
value
);
return
0
;
return
(
ret
>
0
)
?
0
:
-
1
;
}
}
static
void
BatchSavePersistParamEnd
(
PERSIST_SAVE_HANDLE
handle
)
static
void
BatchSavePersistParamEnd
(
PERSIST_SAVE_HANDLE
handle
)
...
...
services/param/adapter/param_selinux.c
浏览文件 @
a7141dfc
...
@@ -216,19 +216,19 @@ static int SelinuxGetParamSecurityLabel(const char *path)
...
@@ -216,19 +216,19 @@ static int SelinuxGetParamSecurityLabel(const char *path)
static
int
CheckFilePermission
(
const
ParamSecurityLabel
*
localLabel
,
const
char
*
fileName
,
int
flags
)
static
int
CheckFilePermission
(
const
ParamSecurityLabel
*
localLabel
,
const
char
*
fileName
,
int
flags
)
{
{
UNUSED
(
flags
);
UNUSED
(
flags
);
PARAM_CHECK
(
localLabel
!=
NULL
&&
fileName
!=
NULL
,
return
-
1
,
"Invalid param"
);
UNUSED
(
localLabel
);
UNUSED
(
fileName
);
return
0
;
return
0
;
}
}
static
const
char
*
GetSelinuxContent
(
const
char
*
name
)
static
const
char
*
GetSelinuxContent
(
const
char
*
name
)
{
{
SelinuxSpace
*
selinuxSpace
=
&
GetParamWorkSpace
()
->
selinuxSpace
;
SelinuxSpace
*
selinuxSpace
=
&
GetParamWorkSpace
()
->
selinuxSpace
;
const
char
*
content
=
WORKSPACE_NAME_DEF_SELINUX
;
if
(
selinuxSpace
->
getParamLabel
!=
NULL
)
{
if
(
selinuxSpace
->
getParamLabel
!=
NULL
)
{
return
selinuxSpace
->
getParamLabel
(
name
);
content
=
selinuxSpace
->
getParamLabel
(
name
);
}
else
{
PARAM_LOGE
(
"Can not init selinux"
);
return
WORKSPACE_NAME_DEF_SELINUX
;
}
}
return
content
;
}
}
static
int
CheckContentPermission
(
const
char
*
name
,
const
char
*
label
)
static
int
CheckContentPermission
(
const
char
*
name
,
const
char
*
label
)
...
...
services/param/base/param_base.c
浏览文件 @
a7141dfc
...
@@ -52,6 +52,7 @@ static void WorkSpaceFree(const HashNode *node)
...
@@ -52,6 +52,7 @@ static void WorkSpaceFree(const HashNode *node)
WorkSpace
*
workSpace
=
HASHMAP_ENTRY
(
node
,
WorkSpace
,
hashNode
);
WorkSpace
*
workSpace
=
HASHMAP_ENTRY
(
node
,
WorkSpace
,
hashNode
);
CloseWorkSpace
(
workSpace
);
CloseWorkSpace
(
workSpace
);
}
}
static
int
InitParamSecurity
(
ParamWorkSpace
*
workSpace
,
static
int
InitParamSecurity
(
ParamWorkSpace
*
workSpace
,
RegisterSecurityOpsPtr
registerOps
,
ParamSecurityType
type
,
int
isInit
,
int
op
)
RegisterSecurityOpsPtr
registerOps
,
ParamSecurityType
type
,
int
isInit
,
int
op
)
{
{
...
@@ -100,7 +101,7 @@ static int CheckNeedInit(int onlyRead, const PARAM_WORKSPACE_OPS *ops)
...
@@ -100,7 +101,7 @@ static int CheckNeedInit(int onlyRead, const PARAM_WORKSPACE_OPS *ops)
{
{
if
(
ops
!=
NULL
)
{
if
(
ops
!=
NULL
)
{
g_paramWorkSpace
.
ops
.
updaterMode
=
ops
->
updaterMode
;
g_paramWorkSpace
.
ops
.
updaterMode
=
ops
->
updaterMode
;
if
(
g_paramWorkSpace
.
ops
.
logFunc
==
NULL
)
{
if
(
g_paramWorkSpace
.
ops
.
logFunc
==
NULL
&&
ops
->
logFunc
!=
NULL
)
{
g_paramWorkSpace
.
ops
.
logFunc
=
ops
->
logFunc
;
g_paramWorkSpace
.
ops
.
logFunc
=
ops
->
logFunc
;
}
}
#ifdef PARAM_SUPPORT_SELINUX
#ifdef PARAM_SUPPORT_SELINUX
...
@@ -113,20 +114,12 @@ static int CheckNeedInit(int onlyRead, const PARAM_WORKSPACE_OPS *ops)
...
@@ -113,20 +114,12 @@ static int CheckNeedInit(int onlyRead, const PARAM_WORKSPACE_OPS *ops)
if
(
onlyRead
==
0
)
{
if
(
onlyRead
==
0
)
{
return
1
;
return
1
;
}
}
#if !(defined __LITEOS_A__ || defined __LITEOS_M__)
#ifdef STARTUP_INIT_TEST
if
(
getpid
()
==
1
)
{
// init process only for write
return
0
;
}
// for ut, do not init workspace
// for ut, do not init workspace
char
path
[
PATH_MAX
]
=
{
0
};
char
path
[
PATH_MAX
]
=
{
0
};
(
void
)
readlink
(
"/proc/self/exe"
,
path
,
sizeof
(
path
)
-
1
);
(
void
)
readlink
(
"/proc/self/exe"
,
path
,
sizeof
(
path
)
-
1
);
char
*
name
=
str
rchr
(
path
,
'/'
);
char
*
name
=
str
str
(
path
,
"/init_unittest"
);
if
(
name
!=
NULL
)
{
if
(
name
!=
NULL
)
{
name
++
;
}
else
{
name
=
path
;
}
if
(
strcmp
(
name
,
"init_unittest"
)
==
0
)
{
PARAM_LOGW
(
"Can not init client for init_test"
);
PARAM_LOGW
(
"Can not init client for init_test"
);
return
0
;
return
0
;
}
}
...
@@ -182,7 +175,7 @@ INIT_INNER_API int InitParamWorkSpace(int onlyRead, const PARAM_WORKSPACE_OPS *o
...
@@ -182,7 +175,7 @@ INIT_INNER_API int InitParamWorkSpace(int onlyRead, const PARAM_WORKSPACE_OPS *o
INIT_LOCAL_API
void
CloseParamWorkSpace
(
void
)
INIT_LOCAL_API
void
CloseParamWorkSpace
(
void
)
{
{
PARAM_LOGI
(
"CloseParamWorkSpace %
p"
,
&
g_paramWorkSpace
);
PARAM_LOGI
(
"CloseParamWorkSpace %
x"
,
g_paramWorkSpace
.
flags
);
if
(
!
PARAM_TEST_FLAG
(
g_paramWorkSpace
.
flags
,
WORKSPACE_FLAGS_INIT
))
{
if
(
!
PARAM_TEST_FLAG
(
g_paramWorkSpace
.
flags
,
WORKSPACE_FLAGS_INIT
))
{
return
;
return
;
}
}
...
@@ -216,7 +209,7 @@ INIT_LOCAL_API void ParamWorBaseLog(InitLogLevel logLevel, uint32_t domain, cons
...
@@ -216,7 +209,7 @@ INIT_LOCAL_API void ParamWorBaseLog(InitLogLevel logLevel, uint32_t domain, cons
INIT_INNER_API
ParamWorkSpace
*
GetParamWorkSpace
(
void
)
INIT_INNER_API
ParamWorkSpace
*
GetParamWorkSpace
(
void
)
{
{
if
(
!
PARAM_TEST_FLAG
(
g_paramWorkSpace
.
flags
,
WORKSPACE_FLAGS_INIT
))
{
if
(
!
PARAM_TEST_FLAG
(
g_paramWorkSpace
.
flags
,
WORKSPACE_FLAGS_INIT
))
{
PARAM_LOGE
(
"
GetParamWorkSpace %p"
,
&
g_paramWorkSpace
);
PARAM_LOGE
(
"
Invalid param workspace %x"
,
g_paramWorkSpace
.
flags
);
return
NULL
;
return
NULL
;
}
}
return
&
g_paramWorkSpace
;
return
&
g_paramWorkSpace
;
...
...
services/param/base/param_comm.c
浏览文件 @
a7141dfc
...
@@ -542,10 +542,7 @@ INIT_LOCAL_API int CheckParamPermission(const ParamSecurityLabel *srcLabel, cons
...
@@ -542,10 +542,7 @@ INIT_LOCAL_API int CheckParamPermission(const ParamSecurityLabel *srcLabel, cons
continue
;
continue
;
}
}
ParamSecurityOps
*
ops
=
GetParamSecurityOps
(
i
);
ParamSecurityOps
*
ops
=
GetParamSecurityOps
(
i
);
if
(
ops
==
NULL
)
{
if
(
ops
==
NULL
||
ops
->
securityCheckParamPermission
==
NULL
)
{
continue
;
}
if
(
ops
->
securityCheckParamPermission
==
NULL
)
{
continue
;
continue
;
}
}
ret
=
ops
->
securityCheckParamPermission
(
srcLabel
,
name
,
mode
);
ret
=
ops
->
securityCheckParamPermission
(
srcLabel
,
name
,
mode
);
...
...
services/param/base/param_trie.c
浏览文件 @
a7141dfc
...
@@ -135,9 +135,19 @@ INIT_LOCAL_API void CloseWorkSpace(WorkSpace *workSpace)
...
@@ -135,9 +135,19 @@ INIT_LOCAL_API void CloseWorkSpace(WorkSpace *workSpace)
free
(
workSpace
);
free
(
workSpace
);
}
}
static
int
CheckWorkSpace
(
const
WorkSpace
*
workSpace
)
{
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
-
1
,
"The workspace is null"
);
if
(
!
PARAM_TEST_FLAG
(
workSpace
->
flags
,
WORKSPACE_FLAGS_INIT
))
{
return
-
1
;
}
PARAM_CHECK
(
workSpace
->
allocTrieNode
!=
NULL
,
return
-
1
,
"Invalid allocTrieNode"
);
PARAM_CHECK
(
workSpace
->
compareTrieNode
!=
NULL
,
return
-
1
,
"Invalid compareTrieNode"
);
return
0
;
}
static
ParamTrieNode
*
GetTrieRoot
(
const
WorkSpace
*
workSpace
)
static
ParamTrieNode
*
GetTrieRoot
(
const
WorkSpace
*
workSpace
)
{
{
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
NULL
,
"The workspace is null"
);
return
(
ParamTrieNode
*
)(
workSpace
->
area
->
data
+
workSpace
->
area
->
firstNode
);
return
(
ParamTrieNode
*
)(
workSpace
->
area
->
data
+
workSpace
->
area
->
firstNode
);
}
}
...
@@ -153,7 +163,7 @@ static void GetNextKey(const char **remainingKey, char **subKey, uint32_t *subKe
...
@@ -153,7 +163,7 @@ static void GetNextKey(const char **remainingKey, char **subKey, uint32_t *subKe
static
ParamTrieNode
*
AddToSubTrie
(
WorkSpace
*
workSpace
,
ParamTrieNode
*
current
,
const
char
*
key
,
uint32_t
keyLen
)
static
ParamTrieNode
*
AddToSubTrie
(
WorkSpace
*
workSpace
,
ParamTrieNode
*
current
,
const
char
*
key
,
uint32_t
keyLen
)
{
{
if
(
current
==
NULL
||
workSpace
==
NULL
||
key
==
NULL
)
{
if
(
current
==
NULL
)
{
return
NULL
;
return
NULL
;
}
}
ParamTrieNode
*
subTrie
=
NULL
;
ParamTrieNode
*
subTrie
=
NULL
;
...
@@ -186,9 +196,7 @@ static ParamTrieNode *AddToSubTrie(WorkSpace *workSpace, ParamTrieNode *current,
...
@@ -186,9 +196,7 @@ static ParamTrieNode *AddToSubTrie(WorkSpace *workSpace, ParamTrieNode *current,
ParamTrieNode
*
AddTrieNode
(
WorkSpace
*
workSpace
,
const
char
*
key
,
uint32_t
keyLen
)
ParamTrieNode
*
AddTrieNode
(
WorkSpace
*
workSpace
,
const
char
*
key
,
uint32_t
keyLen
)
{
{
PARAM_CHECK
(
key
!=
NULL
&&
keyLen
>
0
,
return
NULL
,
"Invalid param "
);
PARAM_CHECK
(
key
!=
NULL
&&
keyLen
>
0
,
return
NULL
,
"Invalid param "
);
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
0
,
"Invalid workSpace %s"
,
key
);
PARAM_CHECK
(
CheckWorkSpace
(
workSpace
)
==
0
,
return
0
,
"Invalid workSpace %s"
,
key
);
PARAM_CHECK
(
workSpace
->
allocTrieNode
!=
NULL
,
return
NULL
,
"Invalid param %s"
,
key
);
PARAM_CHECK
(
workSpace
->
compareTrieNode
!=
NULL
,
return
NULL
,
"Invalid param %s"
,
key
);
const
char
*
remainingKey
=
key
;
const
char
*
remainingKey
=
key
;
ParamTrieNode
*
current
=
GetTrieRoot
(
workSpace
);
ParamTrieNode
*
current
=
GetTrieRoot
(
workSpace
);
PARAM_CHECK
(
current
!=
NULL
,
return
NULL
,
"Invalid current param %s"
,
key
);
PARAM_CHECK
(
current
!=
NULL
,
return
NULL
,
"Invalid current param %s"
,
key
);
...
@@ -250,10 +258,6 @@ static ParamTrieNode *FindSubTrie(const WorkSpace *workSpace,
...
@@ -250,10 +258,6 @@ static ParamTrieNode *FindSubTrie(const WorkSpace *workSpace,
static
ParamTrieNode
*
FindTrieNode_
(
const
WorkSpace
*
workSpace
,
const
char
*
key
,
uint32_t
keyLen
,
uint32_t
*
matchLabel
)
static
ParamTrieNode
*
FindTrieNode_
(
const
WorkSpace
*
workSpace
,
const
char
*
key
,
uint32_t
keyLen
,
uint32_t
*
matchLabel
)
{
{
PARAM_CHECK
(
key
!=
NULL
&&
keyLen
>
0
,
return
NULL
,
"Invalid key "
);
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
0
,
"Invalid workSpace %s"
,
key
);
PARAM_CHECK
(
workSpace
->
allocTrieNode
!=
NULL
,
return
NULL
,
"Invalid alloc function %s"
,
key
);
PARAM_CHECK
(
workSpace
->
compareTrieNode
!=
NULL
,
return
NULL
,
"Invalid compare function %s"
,
key
);
const
char
*
remainingKey
=
key
;
const
char
*
remainingKey
=
key
;
ParamTrieNode
*
current
=
GetTrieRoot
(
workSpace
);
ParamTrieNode
*
current
=
GetTrieRoot
(
workSpace
);
PARAM_CHECK
(
current
!=
NULL
,
return
NULL
,
"Invalid current param %s"
,
key
);
PARAM_CHECK
(
current
!=
NULL
,
return
NULL
,
"Invalid current param %s"
,
key
);
...
@@ -307,14 +311,13 @@ INIT_LOCAL_API int TraversalTrieNode(const WorkSpace *workSpace,
...
@@ -307,14 +311,13 @@ INIT_LOCAL_API int TraversalTrieNode(const WorkSpace *workSpace,
const
ParamTrieNode
*
root
,
TraversalTrieNodePtr
walkFunc
,
const
void
*
cookie
)
const
ParamTrieNode
*
root
,
TraversalTrieNodePtr
walkFunc
,
const
void
*
cookie
)
{
{
PARAM_CHECK
(
walkFunc
!=
NULL
,
return
PARAM_CODE_INVALID_PARAM
,
"Invalid param"
);
PARAM_CHECK
(
walkFunc
!=
NULL
,
return
PARAM_CODE_INVALID_PARAM
,
"Invalid param"
);
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
0
,
"Invalid workSpace"
);
PARAM_CHECK
(
CheckWorkSpace
(
workSpace
)
==
0
,
return
PARAM_CODE_INVALID_PARAM
,
"Invalid workSpace"
);
ParamTrieNode
*
current
=
(
ParamTrieNode
*
)
root
;
ParamTrieNode
*
current
=
(
ParamTrieNode
*
)
root
;
if
(
root
==
NULL
)
{
if
(
root
==
NULL
)
{
current
=
GetTrieRoot
(
workSpace
);
current
=
GetTrieRoot
(
workSpace
);
}
}
if
(
current
==
NULL
)
{
PARAM_CHECK
(
current
!=
NULL
,
return
0
,
"Invalid current node"
);
return
0
;
}
walkFunc
(
workSpace
,
(
ParamTrieNode
*
)
current
,
cookie
);
walkFunc
(
workSpace
,
(
ParamTrieNode
*
)
current
,
cookie
);
TraversalSubTrieNode
(
workSpace
,
GetTrieNode
(
workSpace
,
current
->
child
),
walkFunc
,
cookie
);
TraversalSubTrieNode
(
workSpace
,
GetTrieNode
(
workSpace
,
current
->
child
),
walkFunc
,
cookie
);
if
(
root
==
NULL
)
{
if
(
root
==
NULL
)
{
...
@@ -326,8 +329,8 @@ INIT_LOCAL_API int TraversalTrieNode(const WorkSpace *workSpace,
...
@@ -326,8 +329,8 @@ INIT_LOCAL_API int TraversalTrieNode(const WorkSpace *workSpace,
INIT_LOCAL_API
uint32_t
AddParamSecurityNode
(
WorkSpace
*
workSpace
,
const
ParamAuditData
*
auditData
)
INIT_LOCAL_API
uint32_t
AddParamSecurityNode
(
WorkSpace
*
workSpace
,
const
ParamAuditData
*
auditData
)
{
{
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
0
,
"Invalid param
"
);
PARAM_CHECK
(
CheckWorkSpace
(
workSpace
)
==
0
,
return
0
,
"Invalid workSpace
"
);
PARAM_CHECK
(
auditData
!=
NULL
&&
auditData
->
name
!=
NULL
,
return
0
,
"Invalid auditData"
);
PARAM_CHECK
(
auditData
!=
NULL
,
return
0
,
"Invalid auditData"
);
uint32_t
realLen
=
sizeof
(
ParamSecurityNode
);
uint32_t
realLen
=
sizeof
(
ParamSecurityNode
);
PARAM_CHECK
((
workSpace
->
area
->
currOffset
+
realLen
)
<
workSpace
->
area
->
dataSize
,
return
0
,
PARAM_CHECK
((
workSpace
->
area
->
currOffset
+
realLen
)
<
workSpace
->
area
->
dataSize
,
return
0
,
"Failed to allocate currOffset %u, dataSize %u datalen %u"
,
"Failed to allocate currOffset %u, dataSize %u datalen %u"
,
...
@@ -346,8 +349,8 @@ INIT_LOCAL_API uint32_t AddParamSecurityNode(WorkSpace *workSpace, const ParamAu
...
@@ -346,8 +349,8 @@ INIT_LOCAL_API uint32_t AddParamSecurityNode(WorkSpace *workSpace, const ParamAu
INIT_LOCAL_API
uint32_t
AddParamNode
(
WorkSpace
*
workSpace
,
uint8_t
type
,
INIT_LOCAL_API
uint32_t
AddParamNode
(
WorkSpace
*
workSpace
,
uint8_t
type
,
const
char
*
key
,
uint32_t
keyLen
,
const
char
*
value
,
uint32_t
valueLen
)
const
char
*
key
,
uint32_t
keyLen
,
const
char
*
value
,
uint32_t
valueLen
)
{
{
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
0
,
"Invalid param"
);
PARAM_CHECK
(
key
!=
NULL
&&
value
!=
NULL
,
return
0
,
"Invalid param"
);
PARAM_CHECK
(
key
!=
NULL
&&
value
!=
NULL
,
return
0
,
"Invalid param"
);
PARAM_CHECK
(
CheckWorkSpace
(
workSpace
)
==
0
,
return
0
,
"Invalid workSpace %s"
,
key
);
uint32_t
realLen
=
sizeof
(
ParamNode
)
+
1
+
1
;
uint32_t
realLen
=
sizeof
(
ParamNode
)
+
1
+
1
;
// for const parameter, alloc memory on demand
// for const parameter, alloc memory on demand
...
@@ -377,7 +380,7 @@ INIT_LOCAL_API uint32_t AddParamNode(WorkSpace *workSpace, uint8_t type,
...
@@ -377,7 +380,7 @@ INIT_LOCAL_API uint32_t AddParamNode(WorkSpace *workSpace, uint8_t type,
INIT_LOCAL_API
ParamTrieNode
*
GetTrieNode
(
const
WorkSpace
*
workSpace
,
uint32_t
offset
)
INIT_LOCAL_API
ParamTrieNode
*
GetTrieNode
(
const
WorkSpace
*
workSpace
,
uint32_t
offset
)
{
{
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
NULL
,
"Invalid param
"
);
PARAM_CHECK
(
CheckWorkSpace
(
workSpace
)
==
0
,
return
NULL
,
"Invalid workSpace
"
);
if
(
offset
==
0
||
offset
>
workSpace
->
area
->
dataSize
)
{
if
(
offset
==
0
||
offset
>
workSpace
->
area
->
dataSize
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -393,7 +396,9 @@ INIT_LOCAL_API void SaveIndex(uint32_t *index, uint32_t offset)
...
@@ -393,7 +396,9 @@ INIT_LOCAL_API void SaveIndex(uint32_t *index, uint32_t offset)
INIT_LOCAL_API
ParamTrieNode
*
FindTrieNode
(
WorkSpace
*
workSpace
,
INIT_LOCAL_API
ParamTrieNode
*
FindTrieNode
(
WorkSpace
*
workSpace
,
const
char
*
key
,
uint32_t
keyLen
,
uint32_t
*
matchLabel
)
const
char
*
key
,
uint32_t
keyLen
,
uint32_t
*
matchLabel
)
{
{
PARAM_CHECK
(
workSpace
!=
NULL
&&
workSpace
->
area
!=
NULL
,
return
NULL
,
"Invalid workSpace"
);
PARAM_CHECK
(
key
!=
NULL
&&
keyLen
>
0
,
return
NULL
,
"Invalid key "
);
PARAM_CHECK
(
CheckWorkSpace
(
workSpace
)
==
0
,
return
NULL
,
"Invalid workSpace %s"
,
key
);
ParamTrieNode
*
node
=
NULL
;
ParamTrieNode
*
node
=
NULL
;
PARAMSPACE_AREA_RD_LOCK
(
workSpace
);
PARAMSPACE_AREA_RD_LOCK
(
workSpace
);
node
=
FindTrieNode_
(
workSpace
,
key
,
keyLen
,
matchLabel
);
node
=
FindTrieNode_
(
workSpace
,
key
,
keyLen
,
matchLabel
);
...
@@ -423,7 +428,6 @@ INIT_LOCAL_API ParamNode *GetParamNode(const char *spaceName, const char *name)
...
@@ -423,7 +428,6 @@ INIT_LOCAL_API ParamNode *GetParamNode(const char *spaceName, const char *name)
{
{
uint32_t
labelIndex
=
0
;
uint32_t
labelIndex
=
0
;
WorkSpace
*
space
=
GetWorkSpace
(
spaceName
);
WorkSpace
*
space
=
GetWorkSpace
(
spaceName
);
PARAM_CHECK
(
space
!=
NULL
,
return
NULL
,
"Failed to get dac space %s"
,
name
);
ParamTrieNode
*
entry
=
FindTrieNode
(
space
,
name
,
strlen
(
name
),
&
labelIndex
);
ParamTrieNode
*
entry
=
FindTrieNode
(
space
,
name
,
strlen
(
name
),
&
labelIndex
);
if
(
entry
==
NULL
||
entry
->
dataIndex
==
0
)
{
if
(
entry
==
NULL
||
entry
->
dataIndex
==
0
)
{
return
NULL
;
return
NULL
;
...
...
services/param/include/param_osadp.h
浏览文件 @
a7141dfc
...
@@ -193,11 +193,13 @@ INIT_LOCAL_API void FreeSharedMem(const MemHandle *handle, void *mem, uint32_t d
...
@@ -193,11 +193,13 @@ INIT_LOCAL_API void FreeSharedMem(const MemHandle *handle, void *mem, uint32_t d
#define ATOMIC_LOAD_EXPLICIT(commitId, order) atomic_load_explicit((commitId), (order))
#define ATOMIC_LOAD_EXPLICIT(commitId, order) atomic_load_explicit((commitId), (order))
#define ATOMIC_STORE_EXPLICIT(commitId, value, order) atomic_store_explicit((commitId), (value), (order))
#define ATOMIC_STORE_EXPLICIT(commitId, value, order) atomic_store_explicit((commitId), (value), (order))
#endif
#endif
INIT_LOCAL_API
uint32_t
Difftime
(
time_t
curr
,
time_t
base
);
#ifdef __cplusplus
#ifdef __cplusplus
#if __cplusplus
#if __cplusplus
}
}
#endif
#endif
#endif
#endif
INIT_LOCAL_API
uint32_t
Difftime
(
time_t
curr
,
time_t
base
);
#endif // BASE_STARTUP_PARAM_MESSAGE_H
#endif // BASE_STARTUP_PARAM_MESSAGE_H
\ No newline at end of file
services/param/linux/param_message.c
浏览文件 @
a7141dfc
...
@@ -44,7 +44,7 @@ int ConnectServer(int fd, const char *servername)
...
@@ -44,7 +44,7 @@ int ConnectServer(int fd, const char *servername)
int
FillParamMsgContent
(
const
ParamMessage
*
request
,
uint32_t
*
start
,
int
type
,
const
char
*
value
,
uint32_t
length
)
int
FillParamMsgContent
(
const
ParamMessage
*
request
,
uint32_t
*
start
,
int
type
,
const
char
*
value
,
uint32_t
length
)
{
{
PARAM_CHECK
(
request
!=
NULL
&&
start
!=
NULL
,
return
-
1
,
"Invalid param"
);
PARAM_CHECK
(
request
!=
NULL
&&
start
!=
NULL
,
return
-
1
,
"Invalid param"
);
PARAM_CHECK
(
value
!=
NULL
&&
length
>
0
&&
length
<
PARAM_BUFFER_MAX
,
return
-
1
,
"Invalid value"
);
PARAM_CHECK
(
value
!=
NULL
&&
length
!=
0
,
return
-
1
,
"Invalid value"
);
uint32_t
bufferSize
=
request
->
msgSize
-
sizeof
(
ParamMessage
);
uint32_t
bufferSize
=
request
->
msgSize
-
sizeof
(
ParamMessage
);
uint32_t
offset
=
*
start
;
uint32_t
offset
=
*
start
;
PARAM_CHECK
((
offset
+
sizeof
(
ParamMsgContent
)
+
length
)
<=
bufferSize
,
PARAM_CHECK
((
offset
+
sizeof
(
ParamMsgContent
)
+
length
)
<=
bufferSize
,
...
@@ -63,6 +63,7 @@ int FillParamMsgContent(const ParamMessage *request, uint32_t *start, int type,
...
@@ -63,6 +63,7 @@ int FillParamMsgContent(const ParamMessage *request, uint32_t *start, int type,
ParamMessage
*
CreateParamMessage
(
int
type
,
const
char
*
name
,
uint32_t
msgSize
)
ParamMessage
*
CreateParamMessage
(
int
type
,
const
char
*
name
,
uint32_t
msgSize
)
{
{
PARAM_CHECK
(
name
!=
NULL
,
return
NULL
,
"Invalid name"
);
PARAM_CHECK
(
name
!=
NULL
,
return
NULL
,
"Invalid name"
);
PARAM_CHECK
(
msgSize
<
PARAM_BUFFER_MAX
,
return
NULL
,
"Invalid msg size %u"
,
msgSize
);
uint32_t
size
=
msgSize
;
uint32_t
size
=
msgSize
;
if
(
msgSize
<
sizeof
(
ParamMessage
))
{
if
(
msgSize
<
sizeof
(
ParamMessage
))
{
size
=
sizeof
(
ParamMessage
);
size
=
sizeof
(
ParamMessage
);
...
@@ -78,12 +79,12 @@ ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize)
...
@@ -78,12 +79,12 @@ ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize)
return
msg
;
return
msg
;
}
}
ParamMsgContent
*
GetNextContent
(
const
ParamMessage
*
reqest
,
uint32_t
*
offset
)
ParamMsgContent
*
GetNextContent
(
const
ParamMessage
*
req
u
est
,
uint32_t
*
offset
)
{
{
PARAM_CHECK
(
req
est
!=
NULL
,
return
NULL
,
"Invalid req
est"
);
PARAM_CHECK
(
req
uest
!=
NULL
,
return
NULL
,
"Invalid requ
est"
);
PARAM_CHECK
(
offset
!=
NULL
,
return
NULL
,
"Invalid offset"
);
PARAM_CHECK
(
offset
!=
NULL
,
return
NULL
,
"Invalid offset"
);
ParamMessage
*
msg
=
(
ParamMessage
*
)
reqest
;
ParamMessage
*
msg
=
(
ParamMessage
*
)
req
u
est
;
if
((
msg
==
NULL
)
||
((
*
offset
+
sizeof
(
ParamMessage
)
+
sizeof
(
ParamMsgContent
))
>=
msg
->
msgSize
)
)
{
if
((
*
offset
+
sizeof
(
ParamMessage
)
+
sizeof
(
ParamMsgContent
))
>=
msg
->
msgSize
)
{
return
NULL
;
return
NULL
;
}
}
ParamMsgContent
*
content
=
(
ParamMsgContent
*
)(
msg
->
data
+
*
offset
);
ParamMsgContent
*
content
=
(
ParamMsgContent
*
)(
msg
->
data
+
*
offset
);
...
...
services/param/linux/param_service.c
浏览文件 @
a7141dfc
...
@@ -166,7 +166,9 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg)
...
@@ -166,7 +166,9 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg)
socklen_t
crSize
=
sizeof
(
cr
);
socklen_t
crSize
=
sizeof
(
cr
);
if
(
getsockopt
(
LE_GetSocketFd
(
worker
),
SOL_SOCKET
,
SO_PEERCRED
,
&
cr
,
&
crSize
)
<
0
)
{
if
(
getsockopt
(
LE_GetSocketFd
(
worker
),
SOL_SOCKET
,
SO_PEERCRED
,
&
cr
,
&
crSize
)
<
0
)
{
PARAM_LOGE
(
"Failed to get opt %d"
,
errno
);
PARAM_LOGE
(
"Failed to get opt %d"
,
errno
);
#ifndef STARTUP_INIT_TEST
return
SendResponseMsg
(
worker
,
msg
,
-
1
);
return
SendResponseMsg
(
worker
,
msg
,
-
1
);
#endif
}
}
srcLabel
.
sockFd
=
LE_GetSocketFd
(
worker
);
srcLabel
.
sockFd
=
LE_GetSocketFd
(
worker
);
srcLabel
.
cred
.
uid
=
cr
.
uid
;
srcLabel
.
cred
.
uid
=
cr
.
uid
;
...
@@ -337,6 +339,9 @@ PARAM_STATIC int ProcessMessage(const ParamTaskPtr worker, const ParamMessage *m
...
@@ -337,6 +339,9 @@ PARAM_STATIC int ProcessMessage(const ParamTaskPtr worker, const ParamMessage *m
PARAM_STATIC
int
OnIncomingConnect
(
LoopHandle
loop
,
TaskHandle
server
)
PARAM_STATIC
int
OnIncomingConnect
(
LoopHandle
loop
,
TaskHandle
server
)
{
{
ParamStreamInfo
info
=
{};
ParamStreamInfo
info
=
{};
#ifdef STARTUP_INIT_TEST
info
.
flags
=
PARAM_TEST_FLAGS
;
#endif
info
.
server
=
NULL
;
info
.
server
=
NULL
;
info
.
close
=
OnClose
;
info
.
close
=
OnClose
;
info
.
recvMessage
=
ProcessMessage
;
info
.
recvMessage
=
ProcessMessage
;
...
...
services/param/manager/param_server.c
浏览文件 @
a7141dfc
...
@@ -170,10 +170,9 @@ static int LoadDefaultParam_(const char *fileName, uint32_t mode,
...
@@ -170,10 +170,9 @@ static int LoadDefaultParam_(const char *fileName, uint32_t mode,
const
int
buffSize
=
PARAM_NAME_LEN_MAX
+
PARAM_CONST_VALUE_LEN_MAX
+
10
;
// 10 max len
const
int
buffSize
=
PARAM_NAME_LEN_MAX
+
PARAM_CONST_VALUE_LEN_MAX
+
10
;
// 10 max len
char
*
buffer
=
malloc
(
buffSize
);
char
*
buffer
=
malloc
(
buffSize
);
if
(
buffer
==
NULL
)
{
PARAM_CHECK
(
buffer
!=
NULL
,
(
void
)
fclose
(
fp
);
(
void
)
fclose
(
fp
);
return
-
1
,
"Failed to alloc memory"
);
return
-
1
;
}
while
(
fgets
(
buffer
,
buffSize
,
fp
)
!=
NULL
)
{
while
(
fgets
(
buffer
,
buffSize
,
fp
)
!=
NULL
)
{
buffer
[
buffSize
-
1
]
=
'\0'
;
buffer
[
buffSize
-
1
]
=
'\0'
;
int
ret
=
SplitParamString
(
buffer
,
exclude
,
count
,
loadOneParam
,
&
mode
);
int
ret
=
SplitParamString
(
buffer
,
exclude
,
count
,
loadOneParam
,
&
mode
);
...
...
services/param/watcher/agent/watcher_manager_kits.cpp
浏览文件 @
a7141dfc
...
@@ -77,9 +77,6 @@ sptr<IWatcherManager> WatcherManagerKits::GetService(void)
...
@@ -77,9 +77,6 @@ sptr<IWatcherManager> WatcherManagerKits::GetService(void)
WATCHER_LOGE
(
"Failed to add death recipient"
);
WATCHER_LOGE
(
"Failed to add death recipient"
);
}
}
watcherManager_
=
iface_cast
<
IWatcherManager
>
(
object
);
watcherManager_
=
iface_cast
<
IWatcherManager
>
(
object
);
if
(
watcherManager_
==
nullptr
)
{
WATCHER_LOGE
(
"watcher manager iface_cast failed"
);
}
return
watcherManager_
;
return
watcherManager_
;
}
}
...
@@ -110,12 +107,6 @@ void WatcherManagerKits::ReAddWatcher(void)
...
@@ -110,12 +107,6 @@ void WatcherManagerKits::ReAddWatcher(void)
WATCHER_CHECK
(
remoteWatcherId
>
0
,
return
,
"Failed to get remote agent"
);
WATCHER_CHECK
(
remoteWatcherId
>
0
,
return
,
"Failed to get remote agent"
);
std
::
lock_guard
<
std
::
mutex
>
lock
(
mutex_
);
std
::
lock_guard
<
std
::
mutex
>
lock
(
mutex_
);
for
(
auto
iter
=
watchers_
.
begin
();
iter
!=
watchers_
.
end
();
iter
++
)
{
for
(
auto
iter
=
watchers_
.
begin
();
iter
!=
watchers_
.
end
();
iter
++
)
{
if
(
stop_
)
{
return
;
}
if
(
iter
->
second
==
nullptr
)
{
continue
;
}
WATCHER_LOGI
(
"Add old watcher keyPrefix %s "
,
iter
->
first
.
c_str
());
WATCHER_LOGI
(
"Add old watcher keyPrefix %s "
,
iter
->
first
.
c_str
());
int
ret
=
watcherManager
->
AddWatcher
(
iter
->
first
,
remoteWatcherId
);
int
ret
=
watcherManager
->
AddWatcher
(
iter
->
first
,
remoteWatcherId
);
WATCHER_CHECK
(
ret
==
0
,
continue
,
"Failed to add watcher for %s"
,
iter
->
first
.
c_str
());
WATCHER_CHECK
(
ret
==
0
,
continue
,
"Failed to add watcher for %s"
,
iter
->
first
.
c_str
());
...
@@ -283,6 +274,7 @@ int WatcherManagerKits::ParamWatcher::DelParameterListener(ParameterChangePtr ca
...
@@ -283,6 +274,7 @@ int WatcherManagerKits::ParamWatcher::DelParameterListener(ParameterChangePtr ca
void
WatcherManagerKits
::
RemoteWatcher
::
OnParameterChange
(
void
WatcherManagerKits
::
RemoteWatcher
::
OnParameterChange
(
const
std
::
string
&
prefix
,
const
std
::
string
&
name
,
const
std
::
string
&
value
)
const
std
::
string
&
prefix
,
const
std
::
string
&
name
,
const
std
::
string
&
value
)
{
{
Watcher
::
OnParameterChange
(
prefix
,
name
,
value
);
// get param watcher
// get param watcher
WatcherManagerKits
::
ParamWatcher
*
watcher
=
watcherManager_
->
GetParamWatcher
(
prefix
);
WatcherManagerKits
::
ParamWatcher
*
watcher
=
watcherManager_
->
GetParamWatcher
(
prefix
);
WATCHER_CHECK
(
watcher
!=
nullptr
,
return
,
"Failed to get watcher '%s'"
,
prefix
.
c_str
());
WATCHER_CHECK
(
watcher
!=
nullptr
,
return
,
"Failed to get watcher '%s'"
,
prefix
.
c_str
());
...
...
services/param/watcher/agent/watcher_manager_kits.h
浏览文件 @
a7141dfc
...
@@ -26,10 +26,11 @@
...
@@ -26,10 +26,11 @@
#include "init_param.h"
#include "init_param.h"
#include "watcher.h"
#include "watcher.h"
#include "watcher_utils.h"
#include "watcher_utils.h"
#include "beget_ext.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
init_param
{
namespace
init_param
{
class
WatcherManagerKits
final
:
public
DelayedRefSingleton
<
WatcherManagerKits
>
{
class
INIT_LOCAL_API
WatcherManagerKits
final
:
public
DelayedRefSingleton
<
WatcherManagerKits
>
{
DECLARE_DELAYED_REF_SINGLETON
(
WatcherManagerKits
);
DECLARE_DELAYED_REF_SINGLETON
(
WatcherManagerKits
);
public:
public:
DISALLOW_COPY_AND_MOVE
(
WatcherManagerKits
);
DISALLOW_COPY_AND_MOVE
(
WatcherManagerKits
);
...
@@ -38,10 +39,7 @@ public:
...
@@ -38,10 +39,7 @@ public:
int32_t
AddWatcher
(
const
std
::
string
&
keyPrefix
,
ParameterChangePtr
callback
,
void
*
context
);
int32_t
AddWatcher
(
const
std
::
string
&
keyPrefix
,
ParameterChangePtr
callback
,
void
*
context
);
int32_t
DelWatcher
(
const
std
::
string
&
keyPrefix
,
ParameterChangePtr
callback
,
void
*
context
);
int32_t
DelWatcher
(
const
std
::
string
&
keyPrefix
,
ParameterChangePtr
callback
,
void
*
context
);
void
ReAddWatcher
(
void
);
void
ReAddWatcher
(
void
);
#ifndef STARTUP_INIT_TEST
private:
private:
#endif
class
ParameterChangeListener
{
class
ParameterChangeListener
{
public:
public:
ParameterChangeListener
(
ParameterChangePtr
callback
,
void
*
context
)
ParameterChangeListener
(
ParameterChangePtr
callback
,
void
*
context
)
...
...
services/param/watcher/agent/watcher_manager_proxy.cpp
浏览文件 @
a7141dfc
...
@@ -14,15 +14,13 @@
...
@@ -14,15 +14,13 @@
*/
*/
#include "watcher_manager_proxy.h"
#include "watcher_manager_proxy.h"
#include "watcher_utils.h"
#include "watcher_utils.h"
#include "sysparam_errno.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
init_param
{
namespace
init_param
{
uint32_t
WatcherManagerProxy
::
AddRemoteWatcher
(
uint32_t
id
,
const
sptr
<
IWatcher
>
&
watcher
)
uint32_t
WatcherManagerProxy
::
AddRemoteWatcher
(
uint32_t
id
,
const
sptr
<
IWatcher
>
&
watcher
)
{
{
WATCHER_CHECK
(
watcher
!=
nullptr
,
return
ERR_INVALID_VALUE
,
"Invalid param"
);
WATCHER_CHECK
(
watcher
!=
nullptr
,
return
ERR_INVALID_VALUE
,
"Invalid param"
);
auto
remote
=
Remote
();
WATCHER_CHECK
(
remote
!=
nullptr
,
return
0
,
"Can not get remote"
);
MessageParcel
data
;
MessageParcel
data
;
data
.
WriteInterfaceToken
(
WatcherManagerProxy
::
GetDescriptor
());
data
.
WriteInterfaceToken
(
WatcherManagerProxy
::
GetDescriptor
());
bool
ret
=
data
.
WriteRemoteObject
(
watcher
->
AsObject
());
bool
ret
=
data
.
WriteRemoteObject
(
watcher
->
AsObject
());
...
@@ -31,38 +29,32 @@ uint32_t WatcherManagerProxy::AddRemoteWatcher(uint32_t id, const sptr<IWatcher>
...
@@ -31,38 +29,32 @@ uint32_t WatcherManagerProxy::AddRemoteWatcher(uint32_t id, const sptr<IWatcher>
MessageParcel
reply
;
MessageParcel
reply
;
MessageOption
option
{
MessageOption
::
TF_SYNC
};
MessageOption
option
{
MessageOption
::
TF_SYNC
};
int32_t
res
=
remote
->
SendRequest
(
ADD_REMOTE_AGENT
,
data
,
reply
,
option
);
int32_t
res
=
SendWatcherMsg
(
ADD_REMOTE_AGENT
,
data
,
reply
,
option
);
WATCHER_CHECK
(
res
==
ERR_OK
,
return
0
,
"Transact error %d"
,
res
);
WATCHER_CHECK
(
res
==
ERR_OK
,
return
0
,
"Transact error %d"
,
res
);
return
reply
.
ReadUint32
();
return
reply
.
ReadUint32
();
}
}
int32_t
WatcherManagerProxy
::
DelRemoteWatcher
(
uint32_t
remoteWatcherId
)
int32_t
WatcherManagerProxy
::
DelRemoteWatcher
(
uint32_t
remoteWatcherId
)
{
{
auto
remote
=
Remote
();
WATCHER_CHECK
(
remote
!=
nullptr
,
return
ERR_FLATTEN_OBJECT
,
"Can not get remote"
);
MessageParcel
data
;
MessageParcel
data
;
data
.
WriteInterfaceToken
(
WatcherManagerProxy
::
GetDescriptor
());
data
.
WriteInterfaceToken
(
WatcherManagerProxy
::
GetDescriptor
());
data
.
WriteUint32
(
remoteWatcherId
);
data
.
WriteUint32
(
remoteWatcherId
);
MessageParcel
reply
;
MessageParcel
reply
;
MessageOption
option
{
MessageOption
::
TF_SYNC
};
MessageOption
option
{
MessageOption
::
TF_SYNC
};
int32_t
res
=
remote
->
SendRequest
(
DEL_REMOTE_AGENT
,
data
,
reply
,
option
);
int32_t
res
=
SendWatcherMsg
(
DEL_REMOTE_AGENT
,
data
,
reply
,
option
);
WATCHER_CHECK
(
res
==
ERR_OK
,
return
ERR_FLATTEN_OBJECT
,
"Transact error"
);
WATCHER_CHECK
(
res
==
ERR_OK
,
return
ERR_FLATTEN_OBJECT
,
"Transact error"
);
return
reply
.
ReadInt32
();
return
reply
.
ReadInt32
();
}
}
int32_t
WatcherManagerProxy
::
SendMsg
(
int
op
,
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
int32_t
WatcherManagerProxy
::
SendMsg
(
int
op
,
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
{
{
auto
remote
=
Remote
();
WATCHER_CHECK
(
remote
!=
nullptr
,
return
0
,
"Can not get remote"
);
MessageParcel
data
;
MessageParcel
data
;
data
.
WriteInterfaceToken
(
WatcherManagerProxy
::
GetDescriptor
());
data
.
WriteInterfaceToken
(
WatcherManagerProxy
::
GetDescriptor
());
data
.
WriteString
(
keyPrefix
);
data
.
WriteString
(
keyPrefix
);
data
.
WriteUint32
(
remoteWatcherId
);
data
.
WriteUint32
(
remoteWatcherId
);
MessageParcel
reply
;
MessageParcel
reply
;
MessageOption
option
{
MessageOption
::
TF_SYNC
};
MessageOption
option
{
MessageOption
::
TF_SYNC
};
int32_t
res
=
remote
->
SendRequest
(
op
,
data
,
reply
,
option
);
int32_t
res
=
SendWatcherMsg
(
op
,
data
,
reply
,
option
);
WATCHER_CHECK
(
res
==
ERR_OK
,
return
0
,
"Transact error"
);
WATCHER_CHECK
(
res
==
ERR_OK
,
return
0
,
"Transact error"
);
return
reply
.
ReadInt32
();
return
reply
.
ReadInt32
();
}
}
...
@@ -81,5 +73,19 @@ int32_t WatcherManagerProxy::RefreshWatcher(const std::string &keyPrefix, uint32
...
@@ -81,5 +73,19 @@ int32_t WatcherManagerProxy::RefreshWatcher(const std::string &keyPrefix, uint32
{
{
return
SendMsg
(
REFRESH_WATCHER
,
keyPrefix
,
remoteWatcherId
);
return
SendMsg
(
REFRESH_WATCHER
,
keyPrefix
,
remoteWatcherId
);
}
}
int32_t
WatcherManagerProxy
::
SendWatcherMsg
(
uint32_t
code
,
MessageParcel
&
data
,
MessageParcel
&
reply
,
MessageOption
&
option
)
{
auto
remote
=
Remote
();
if
(
remote
!=
nullptr
)
{
return
remote
->
SendRequest
(
code
,
data
,
reply
,
option
);
}
#ifdef STARTUP_INIT_TEST
return
0
;
#else
return
SYSPARAM_SYSTEM_ERROR
;
#endif
}
}
}
}
// namespace OHOS
}
// namespace OHOS
services/param/watcher/agent/watcher_manager_proxy.h
浏览文件 @
a7141dfc
...
@@ -18,10 +18,11 @@
...
@@ -18,10 +18,11 @@
#include "iremote_proxy.h"
#include "iremote_proxy.h"
#include "iwatcher_manager.h"
#include "iwatcher_manager.h"
#include "beget_ext.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
init_param
{
namespace
init_param
{
class
WatcherManagerProxy
:
public
IRemoteProxy
<
IWatcherManager
>
{
class
INIT_LOCAL_API
WatcherManagerProxy
:
public
IRemoteProxy
<
IWatcherManager
>
{
public:
public:
explicit
WatcherManagerProxy
(
const
sptr
<
IRemoteObject
>
&
impl
)
:
IRemoteProxy
<
IWatcherManager
>
(
impl
)
{}
explicit
WatcherManagerProxy
(
const
sptr
<
IRemoteObject
>
&
impl
)
:
IRemoteProxy
<
IWatcherManager
>
(
impl
)
{}
...
@@ -32,6 +33,8 @@ public:
...
@@ -32,6 +33,8 @@ public:
int32_t
RefreshWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
int32_t
RefreshWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
private:
private:
int32_t
SendMsg
(
int
op
,
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
);
int32_t
SendMsg
(
int
op
,
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
);
int32_t
SendWatcherMsg
(
uint32_t
code
,
MessageParcel
&
data
,
MessageParcel
&
reply
,
MessageOption
&
option
);
static
inline
BrokerDelegator
<
WatcherManagerProxy
>
delegator_
;
static
inline
BrokerDelegator
<
WatcherManagerProxy
>
delegator_
;
};
};
}
// namespace init_param
}
// namespace init_param
...
...
services/param/watcher/agent/watcher_stub.cpp
浏览文件 @
a7141dfc
...
@@ -28,9 +28,9 @@ int32_t WatcherStub::OnRemoteRequest(uint32_t code, MessageParcel &data, Message
...
@@ -28,9 +28,9 @@ int32_t WatcherStub::OnRemoteRequest(uint32_t code, MessageParcel &data, Message
switch
(
code
)
{
switch
(
code
)
{
case
PARAM_CHANGE
:
{
case
PARAM_CHANGE
:
{
std
::
string
key
=
data
.
ReadString
(
);
std
::
string
key
(
data
.
ReadString
()
);
std
::
string
name
=
data
.
ReadString
(
);
std
::
string
name
(
data
.
ReadString
()
);
std
::
string
value
=
data
.
ReadString
(
);
std
::
string
value
(
data
.
ReadString
()
);
OnParameterChange
(
key
,
name
,
value
);
OnParameterChange
(
key
,
name
,
value
);
break
;
break
;
}
}
...
...
services/param/watcher/proxy/watcher_manager.cpp
浏览文件 @
a7141dfc
...
@@ -215,6 +215,7 @@ void WatcherManager::SendLocalChange(const std::string &keyPrefix, RemoteWatcher
...
@@ -215,6 +215,7 @@ void WatcherManager::SendLocalChange(const std::string &keyPrefix, RemoteWatcher
if
(
!
FilterParam
(
context
->
buffer
,
context
->
keyPrefix
))
{
if
(
!
FilterParam
(
context
->
buffer
,
context
->
keyPrefix
))
{
return
;
return
;
}
}
WATCHER_LOGV
(
"SendLocalChange name '%s' prefix '%s'"
,
context
->
buffer
,
context
->
keyPrefix
.
c_str
());
uint32_t
size
=
PARAM_CONST_VALUE_LEN_MAX
;
uint32_t
size
=
PARAM_CONST_VALUE_LEN_MAX
;
SystemGetParameterValue
(
handle
,
context
->
buffer
+
PARAM_NAME_LEN_MAX
,
&
size
);
SystemGetParameterValue
(
handle
,
context
->
buffer
+
PARAM_NAME_LEN_MAX
,
&
size
);
context
->
remoteWatcher
->
ProcessParameterChange
(
context
->
remoteWatcher
->
ProcessParameterChange
(
...
@@ -230,12 +231,12 @@ void WatcherManager::RunLoop()
...
@@ -230,12 +231,12 @@ void WatcherManager::RunLoop()
ssize_t
recvLen
=
0
;
ssize_t
recvLen
=
0
;
while
(
!
stop_
)
{
while
(
!
stop_
)
{
int
fd
=
GetServerFd
(
retry
);
int
fd
=
GetServerFd
(
retry
);
if
(
fd
>=
0
)
{
recvLen
=
recv
(
fd
,
buffer
.
data
(),
RECV_BUFFER_MAX
,
0
);
}
if
(
stop_
)
{
if
(
stop_
)
{
break
;
break
;
}
}
if
(
fd
>=
0
)
{
recvLen
=
recv
(
fd
,
buffer
.
data
(),
RECV_BUFFER_MAX
,
0
);
}
if
(
recvLen
<=
0
)
{
if
(
recvLen
<=
0
)
{
if
(
errno
==
EAGAIN
)
{
// timeout
if
(
errno
==
EAGAIN
)
{
// timeout
continue
;
continue
;
...
@@ -258,11 +259,11 @@ void WatcherManager::RunLoop()
...
@@ -258,11 +259,11 @@ void WatcherManager::RunLoop()
curr
+=
msg
->
msgSize
;
curr
+=
msg
->
msgSize
;
}
}
}
}
if
(
serverFd_
>
0
)
{
if
(
serverFd_
>
=
0
)
{
close
(
serverFd_
);
close
(
serverFd_
);
serverFd_
=
INVALID_SOCKET
;
serverFd_
=
INVALID_SOCKET
;
}
}
WATCHER_LOGV
(
"Exit runLoop
"
);
WATCHER_LOGV
(
"Exit runLoop
serverFd %d"
,
serverFd_
);
}
}
void
WatcherManager
::
StartLoop
()
void
WatcherManager
::
StartLoop
()
...
@@ -298,6 +299,9 @@ int WatcherManager::GetServerFd(bool retry)
...
@@ -298,6 +299,9 @@ int WatcherManager::GetServerFd(bool retry)
serverFd_
=
INVALID_SOCKET
;
serverFd_
=
INVALID_SOCKET
;
usleep
(
sleepTime
);
usleep
(
sleepTime
);
retryCount
++
;
retryCount
++
;
if
(
stop_
)
{
break
;
}
}
while
(
retryCount
<
maxRetry
);
}
while
(
retryCount
<
maxRetry
);
WATCHER_LOGV
(
"GetServerFd serverFd_ %d retryCount %d "
,
serverFd_
,
retryCount
);
WATCHER_LOGV
(
"GetServerFd serverFd_ %d retryCount %d "
,
serverFd_
,
retryCount
);
return
serverFd_
;
return
serverFd_
;
...
@@ -324,7 +328,7 @@ void WatcherManager::StopLoop()
...
@@ -324,7 +328,7 @@ void WatcherManager::StopLoop()
{
{
WATCHER_LOGI
(
"Watcher manager StopLoop serverFd_ %d"
,
serverFd_
);
WATCHER_LOGI
(
"Watcher manager StopLoop serverFd_ %d"
,
serverFd_
);
stop_
=
true
;
stop_
=
true
;
if
(
serverFd_
>
0
)
{
if
(
serverFd_
>
=
0
)
{
shutdown
(
serverFd_
,
SHUT_RDWR
);
shutdown
(
serverFd_
,
SHUT_RDWR
);
close
(
serverFd_
);
close
(
serverFd_
);
serverFd_
=
INVALID_SOCKET
;
serverFd_
=
INVALID_SOCKET
;
...
@@ -428,9 +432,6 @@ void WatcherManager::DumpAllGroup(int fd, ParamWatcherProcessor dumpHandle)
...
@@ -428,9 +432,6 @@ void WatcherManager::DumpAllGroup(int fd, ParamWatcherProcessor dumpHandle)
std
::
lock_guard
<
std
::
mutex
>
lock
(
watcherMutex_
);
std
::
lock_guard
<
std
::
mutex
>
lock
(
watcherMutex_
);
for
(
auto
it
=
groupMap_
.
begin
();
it
!=
groupMap_
.
end
();
++
it
)
{
for
(
auto
it
=
groupMap_
.
begin
();
it
!=
groupMap_
.
end
();
++
it
)
{
auto
group
=
it
->
second
;
auto
group
=
it
->
second
;
if
(
group
==
nullptr
)
{
continue
;
}
dprintf
(
fd
,
"Watch prefix : %s
\n
"
,
group
->
GetKeyPrefix
().
c_str
());
dprintf
(
fd
,
"Watch prefix : %s
\n
"
,
group
->
GetKeyPrefix
().
c_str
());
dprintf
(
fd
,
"Watch group id : %u
\n
"
,
group
->
GetGroupId
());
dprintf
(
fd
,
"Watch group id : %u
\n
"
,
group
->
GetGroupId
());
dprintf
(
fd
,
"Watch count : %zu
\n
"
,
group
->
GetNodeCount
());
dprintf
(
fd
,
"Watch count : %zu
\n
"
,
group
->
GetNodeCount
());
...
@@ -492,15 +493,18 @@ int WatcherManager::Dump(int fd, const std::vector<std::u16string>& args)
...
@@ -492,15 +493,18 @@ int WatcherManager::Dump(int fd, const std::vector<std::u16string>& args)
void
WatcherManager
::
Clear
(
void
)
void
WatcherManager
::
Clear
(
void
)
{
{
WATCHER_LOGV
(
"Clear"
);
std
::
lock_guard
<
std
::
mutex
>
lock
(
watcherMutex_
);
std
::
lock_guard
<
std
::
mutex
>
lock
(
watcherMutex_
);
remoteWatchers_
->
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
remoteWatchers_
->
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
list
->
RemoveNode
(
node
);
list
->
RemoveNode
(
node
);
auto
group
=
ConvertTo
<
WatcherGroup
>
(
node
);
auto
group
=
ConvertTo
<
WatcherGroup
>
(
node
);
WATCHER_LOGV
(
"Delete watcher group %u"
,
group
->
GetGroupId
());
delete
group
;
delete
group
;
});
});
watcherGroups_
->
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
watcherGroups_
->
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
list
->
RemoveNode
(
node
);
list
->
RemoveNode
(
node
);
auto
remoteWatcher
=
ConvertTo
<
RemoteWatcher
>
(
node
);
auto
remoteWatcher
=
ConvertTo
<
RemoteWatcher
>
(
node
);
WATCHER_LOGV
(
"Delete remote watcher %u"
,
remoteWatcher
->
GetRemoteWatcherId
());
delete
remoteWatcher
;
delete
remoteWatcher
;
});
});
delete
remoteWatchers_
;
delete
remoteWatchers_
;
...
@@ -740,5 +744,27 @@ int WatcherNode::Greater(ListNodePtr node, void *data)
...
@@ -740,5 +744,27 @@ int WatcherNode::Greater(ListNodePtr node, void *data)
uint32_t
id
=
*
(
uint32_t
*
)
data
;
uint32_t
id
=
*
(
uint32_t
*
)
data
;
return
(
watcher
->
nodeId_
>
id
)
?
0
:
1
;
return
(
watcher
->
nodeId_
>
id
)
?
0
:
1
;
}
}
WatcherGroup
::~
WatcherGroup
(
void
)
{
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
list
->
RemoveNode
(
node
);
ParamWatcher
*
watcher
=
ConvertTo
<
ParamWatcher
>
(
node
);
WATCHER_LOGV
(
"delete watcher group %u"
,
watcher
->
GetNodeId
());
delete
watcher
;
});
}
RemoteWatcher
::~
RemoteWatcher
(
void
)
{
watcher_
=
nullptr
;
WATCHER_LOGI
(
"RemoteWatcher "
);
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
list
->
RemoveNode
(
node
);
ParamWatcher
*
watcher
=
ConvertTo
<
ParamWatcher
>
(
node
);
WATCHER_LOGV
(
"delete remote watcher %u"
,
watcher
->
GetNodeId
());
delete
watcher
;
});
}
}
// namespace init_param
}
// namespace init_param
}
// namespace OHOS
}
// namespace OHOS
services/param/watcher/proxy/watcher_manager.h
浏览文件 @
a7141dfc
...
@@ -78,15 +78,11 @@ public:
...
@@ -78,15 +78,11 @@ public:
int32_t
AddWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
int32_t
AddWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
int32_t
DelWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
int32_t
DelWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
int32_t
RefreshWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
int32_t
RefreshWatcher
(
const
std
::
string
&
keyPrefix
,
uint32_t
remoteWatcherId
)
override
;
#ifndef STARTUP_INIT_TEST
protected:
protected:
#endif
void
OnStart
()
override
;
void
OnStart
()
override
;
void
OnStop
()
override
;
void
OnStop
()
override
;
int
Dump
(
int
fd
,
const
std
::
vector
<
std
::
u16string
>&
args
)
override
;
int
Dump
(
int
fd
,
const
std
::
vector
<
std
::
u16string
>&
args
)
override
;
#ifndef STARTUP_INIT_TEST
private:
private:
#endif
void
RunLoop
();
void
RunLoop
();
void
StartLoop
();
void
StartLoop
();
void
StopLoop
();
void
StopLoop
();
...
@@ -220,15 +216,7 @@ class RemoteWatcher : public WatcherNode, public ParamWatcherList {
...
@@ -220,15 +216,7 @@ class RemoteWatcher : public WatcherNode, public ParamWatcherList {
public:
public:
RemoteWatcher
(
uint32_t
watcherId
,
const
sptr
<
IWatcher
>
&
watcher
)
RemoteWatcher
(
uint32_t
watcherId
,
const
sptr
<
IWatcher
>
&
watcher
)
:
WatcherNode
(
watcherId
),
ParamWatcherList
(),
watcher_
(
watcher
)
{}
:
WatcherNode
(
watcherId
),
ParamWatcherList
(),
watcher_
(
watcher
)
{}
~
RemoteWatcher
(
void
)
override
~
RemoteWatcher
(
void
)
override
;
{
watcher_
=
nullptr
;
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
list
->
RemoveNode
(
node
);
ParamWatcher
*
watcher
=
ConvertTo
<
ParamWatcher
>
(
node
);
delete
watcher
;
});
}
uint32_t
GetRemoteWatcherId
(
void
)
const
uint32_t
GetRemoteWatcherId
(
void
)
const
{
{
...
@@ -259,14 +247,8 @@ class WatcherGroup : public WatcherNode, public ParamWatcherList {
...
@@ -259,14 +247,8 @@ class WatcherGroup : public WatcherNode, public ParamWatcherList {
public:
public:
WatcherGroup
(
uint32_t
groupId
,
const
std
::
string
&
key
)
WatcherGroup
(
uint32_t
groupId
,
const
std
::
string
&
key
)
:
WatcherNode
(
groupId
),
ParamWatcherList
(),
keyPrefix_
(
key
)
{}
:
WatcherNode
(
groupId
),
ParamWatcherList
(),
keyPrefix_
(
key
)
{}
~
WatcherGroup
()
override
~
WatcherGroup
(
void
)
override
;
{
TraversalNodeSafe
([](
ParamWatcherListPtr
list
,
WatcherNodePtr
node
,
uint32_t
index
)
{
list
->
RemoveNode
(
node
);
ParamWatcher
*
watcher
=
ConvertTo
<
ParamWatcher
>
(
node
);
delete
watcher
;
});
}
void
ProcessParameterChange
(
WatcherManager
*
mananger
,
const
std
::
string
&
name
,
const
std
::
string
&
value
);
void
ProcessParameterChange
(
WatcherManager
*
mananger
,
const
std
::
string
&
name
,
const
std
::
string
&
value
);
const
std
::
string
GetKeyPrefix
()
const
const
std
::
string
GetKeyPrefix
()
const
{
{
...
...
services/param/watcher/proxy/watcher_manager_stub.cpp
浏览文件 @
a7141dfc
...
@@ -23,7 +23,7 @@ int32_t WatcherManagerStub::OnRemoteRequest(uint32_t code,
...
@@ -23,7 +23,7 @@ int32_t WatcherManagerStub::OnRemoteRequest(uint32_t code,
{
{
std
::
u16string
myDescriptor
=
IWatcherManager
::
GetDescriptor
();
std
::
u16string
myDescriptor
=
IWatcherManager
::
GetDescriptor
();
std
::
u16string
remoteDescriptor
=
data
.
ReadInterfaceToken
();
std
::
u16string
remoteDescriptor
=
data
.
ReadInterfaceToken
();
WATCHER_CHECK
(
myDescriptor
==
remoteDescriptor
,
return
-
1
,
"Invalid remoteDescriptor
"
);
WATCHER_CHECK
(
myDescriptor
==
remoteDescriptor
,
return
-
1
,
"Invalid remoteDescriptor
%u"
,
code
);
WATCHER_LOGV
(
"OnRemoteRequest code %u"
,
code
);
WATCHER_LOGV
(
"OnRemoteRequest code %u"
,
code
);
switch
(
code
)
{
switch
(
code
)
{
...
@@ -42,8 +42,6 @@ int32_t WatcherManagerStub::OnRemoteRequest(uint32_t code,
...
@@ -42,8 +42,6 @@ int32_t WatcherManagerStub::OnRemoteRequest(uint32_t code,
case
ADD_REMOTE_AGENT
:
{
case
ADD_REMOTE_AGENT
:
{
auto
remote
=
data
.
ReadRemoteObject
();
auto
remote
=
data
.
ReadRemoteObject
();
// 0 is invalid watcherId
// 0 is invalid watcherId
WATCHER_CHECK
(
remote
!=
nullptr
,
reply
.
WriteUint32
(
0
);
return
0
,
"Failed to read remote watcher"
);
uint32_t
id
=
data
.
ReadUint32
();
uint32_t
id
=
data
.
ReadUint32
();
uint32_t
remoteWatcherId
=
AddRemoteWatcher
(
id
,
iface_cast
<
IWatcher
>
(
remote
));
uint32_t
remoteWatcherId
=
AddRemoteWatcher
(
id
,
iface_cast
<
IWatcher
>
(
remote
));
reply
.
WriteUint32
(
remoteWatcherId
);
reply
.
WriteUint32
(
remoteWatcherId
);
...
...
services/param/watcher/proxy/watcher_proxy.cpp
浏览文件 @
a7141dfc
...
@@ -20,23 +20,29 @@
...
@@ -20,23 +20,29 @@
#include "message_parcel.h"
#include "message_parcel.h"
#include "watcher_utils.h"
#include "watcher_utils.h"
#include "securec.h"
#include "securec.h"
#include "sysparam_errno.h"
namespace
OHOS
{
namespace
OHOS
{
namespace
init_param
{
namespace
init_param
{
void
WatcherProxy
::
OnParameterChange
(
const
std
::
string
&
prefix
,
const
std
::
string
&
name
,
const
std
::
string
&
value
)
void
WatcherProxy
::
OnParameterChange
(
const
std
::
string
&
prefix
,
const
std
::
string
&
name
,
const
std
::
string
&
value
)
{
{
WATCHER_LOGV
(
"WatcherProxy::OnParameterChange %s %s %s"
,
prefix
.
c_str
(),
name
.
c_str
(),
value
.
c_str
());
MessageParcel
data
;
MessageParcel
data
;
MessageParcel
reply
;
MessageParcel
reply
;
MessageOption
option
{
MessageOption
::
TF_ASYNC
};
MessageOption
option
{
MessageOption
::
TF_ASYNC
};
auto
remote
=
Remote
();
WATCHER_CHECK
(
remote
!=
nullptr
,
return
,
"Can not get remote"
);
data
.
WriteInterfaceToken
(
WatcherProxy
::
GetDescriptor
());
data
.
WriteInterfaceToken
(
WatcherProxy
::
GetDescriptor
());
data
.
WriteString
(
prefix
);
data
.
WriteString
(
prefix
);
data
.
WriteString
(
name
);
data
.
WriteString
(
name
);
data
.
WriteString
(
value
);
data
.
WriteString
(
value
);
int
ret
=
remote
->
SendRequest
(
PARAM_CHANGE
,
data
,
reply
,
option
);
auto
remote
=
Remote
();
#ifdef STARTUP_INIT_TEST
int
ret
=
0
;
#else
int
ret
=
SYSPARAM_SYSTEM_ERROR
;
#endif
if
(
remote
!=
nullptr
)
{
ret
=
remote
->
SendRequest
(
PARAM_CHANGE
,
data
,
reply
,
option
);
}
WATCHER_CHECK
(
ret
==
ERR_OK
,
return
,
"Can not SendRequest for name %s err:%d"
,
name
.
c_str
(),
ret
);
WATCHER_CHECK
(
ret
==
ERR_OK
,
return
,
"Can not SendRequest for name %s err:%d"
,
name
.
c_str
(),
ret
);
return
;
return
;
}
}
...
...
services/utils/init_hashmap.c
浏览文件 @
a7141dfc
...
@@ -29,9 +29,10 @@ typedef struct {
...
@@ -29,9 +29,10 @@ typedef struct {
static
uint32_t
g_tableId
=
0
;
static
uint32_t
g_tableId
=
0
;
int32_t
OH_HashMapCreate
(
HashMapHandle
*
handle
,
const
HashInfo
*
info
)
int32_t
OH_HashMapCreate
(
HashMapHandle
*
handle
,
const
HashInfo
*
info
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
info
!=
NULL
&&
info
->
maxBucket
>
0
,
return
-
1
,
"Invalid param"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
-
1
,
"Invalid hash handle"
);
INIT_ERROR_CHECK
(
info
->
keyHash
!=
NULL
&&
info
->
nodeHash
!=
NULL
,
return
-
1
,
"Invalid param"
);
INIT_ERROR_CHECK
(
info
!=
NULL
&&
info
->
maxBucket
>
0
,
return
-
1
,
"Invalid hash info"
);
INIT_ERROR_CHECK
(
info
->
nodeCompare
!=
NULL
&&
info
->
keyCompare
!=
NULL
,
return
-
1
,
"Invalid param"
);
INIT_ERROR_CHECK
(
info
->
keyHash
!=
NULL
&&
info
->
nodeHash
!=
NULL
,
return
-
1
,
"Invalid hash key"
);
INIT_ERROR_CHECK
(
info
->
nodeCompare
!=
NULL
&&
info
->
keyCompare
!=
NULL
,
return
-
1
,
"Invalid hash compare"
);
HashTab
*
tab
=
(
HashTab
*
)
calloc
(
1
,
sizeof
(
HashTab
)
+
sizeof
(
HashNode
*
)
*
info
->
maxBucket
);
HashTab
*
tab
=
(
HashTab
*
)
calloc
(
1
,
sizeof
(
HashTab
)
+
sizeof
(
HashNode
*
)
*
info
->
maxBucket
);
INIT_ERROR_CHECK
(
tab
!=
NULL
,
return
-
1
,
"Failed to create hash tab"
);
INIT_ERROR_CHECK
(
tab
!=
NULL
,
return
-
1
,
"Failed to create hash tab"
);
tab
->
maxBucket
=
info
->
maxBucket
;
tab
->
maxBucket
=
info
->
maxBucket
;
...
@@ -74,7 +75,7 @@ static HashNode *GetHashNodeByKey(const HashTab *tab, const HashNode *root, cons
...
@@ -74,7 +75,7 @@ static HashNode *GetHashNodeByKey(const HashTab *tab, const HashNode *root, cons
int32_t
OH_HashMapAdd
(
HashMapHandle
handle
,
HashNode
*
node
)
int32_t
OH_HashMapAdd
(
HashMapHandle
handle
,
HashNode
*
node
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
-
1
,
"Invalid
param
"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
-
1
,
"Invalid
hash handle
"
);
INIT_ERROR_CHECK
(
node
!=
NULL
&&
node
->
next
==
NULL
,
return
-
1
,
"Invalid param"
);
INIT_ERROR_CHECK
(
node
!=
NULL
&&
node
->
next
==
NULL
,
return
-
1
,
"Invalid param"
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
int
hashCode
=
tab
->
nodeHash
(
node
);
int
hashCode
=
tab
->
nodeHash
(
node
);
...
@@ -90,13 +91,12 @@ int32_t OH_HashMapAdd(HashMapHandle handle, HashNode *node)
...
@@ -90,13 +91,12 @@ int32_t OH_HashMapAdd(HashMapHandle handle, HashNode *node)
}
}
node
->
next
=
tab
->
buckets
[
hashCode
];
node
->
next
=
tab
->
buckets
[
hashCode
];
tab
->
buckets
[
hashCode
]
=
node
;
tab
->
buckets
[
hashCode
]
=
node
;
INIT_LOGV
(
"OH_HashMapAdd tableId %d hashCode %d node %p"
,
tab
->
tableId
,
hashCode
,
node
);
return
0
;
return
0
;
}
}
void
OH_HashMapRemove
(
HashMapHandle
handle
,
const
void
*
key
)
void
OH_HashMapRemove
(
HashMapHandle
handle
,
const
void
*
key
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
key
!=
NULL
,
return
,
"Invalid
param"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
key
!=
NULL
,
return
,
"Invalid
hash handle key:%s"
,
key
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
int
hashCode
=
tab
->
keyHash
(
key
);
int
hashCode
=
tab
->
keyHash
(
key
);
hashCode
=
(
hashCode
<
0
)
?
-
hashCode
:
hashCode
;
hashCode
=
(
hashCode
<
0
)
?
-
hashCode
:
hashCode
;
...
@@ -122,7 +122,7 @@ void OH_HashMapRemove(HashMapHandle handle, const void *key)
...
@@ -122,7 +122,7 @@ void OH_HashMapRemove(HashMapHandle handle, const void *key)
HashNode
*
OH_HashMapGet
(
HashMapHandle
handle
,
const
void
*
key
)
HashNode
*
OH_HashMapGet
(
HashMapHandle
handle
,
const
void
*
key
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
key
!=
NULL
,
return
NULL
,
"Invalid
param
%s"
,
key
);
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
key
!=
NULL
,
return
NULL
,
"Invalid
hash handle key:
%s"
,
key
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
int
hashCode
=
tab
->
keyHash
(
key
);
int
hashCode
=
tab
->
keyHash
(
key
);
hashCode
=
(
hashCode
<
0
)
?
-
hashCode
:
hashCode
;
hashCode
=
(
hashCode
<
0
)
?
-
hashCode
:
hashCode
;
...
@@ -149,7 +149,7 @@ static void HashListFree(HashTab *tab, HashNode *root)
...
@@ -149,7 +149,7 @@ static void HashListFree(HashTab *tab, HashNode *root)
void
OH_HashMapDestory
(
HashMapHandle
handle
)
void
OH_HashMapDestory
(
HashMapHandle
handle
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
,
"Invalid
param
"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
,
"Invalid
hash handle
"
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
for
(
int
i
=
0
;
i
<
tab
->
maxBucket
;
i
++
)
{
for
(
int
i
=
0
;
i
<
tab
->
maxBucket
;
i
++
)
{
HashListFree
(
tab
,
tab
->
buckets
[
i
]);
HashListFree
(
tab
,
tab
->
buckets
[
i
]);
...
@@ -160,8 +160,8 @@ void OH_HashMapDestory(HashMapHandle handle)
...
@@ -160,8 +160,8 @@ void OH_HashMapDestory(HashMapHandle handle)
HashNode
*
OH_HashMapFind
(
HashMapHandle
handle
,
HashNode
*
OH_HashMapFind
(
HashMapHandle
handle
,
int
hashCode
,
const
void
*
key
,
HashKeyCompare
keyCompare
)
int
hashCode
,
const
void
*
key
,
HashKeyCompare
keyCompare
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
key
!=
NULL
,
return
NULL
,
"Invalid param
"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
NULL
,
"Invalid hash handle
"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
keyCompare
!=
NULL
,
return
NULL
,
"Invalid param
"
);
INIT_ERROR_CHECK
(
key
!=
NULL
&&
keyCompare
!=
NULL
,
return
NULL
,
"Invalid hash key
"
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
INIT_ERROR_CHECK
(
hashCode
<
tab
->
maxBucket
,
return
NULL
,
INIT_ERROR_CHECK
(
hashCode
<
tab
->
maxBucket
,
return
NULL
,
"Invalid hashcode %d %d"
,
tab
->
maxBucket
,
hashCode
);
"Invalid hashcode %d %d"
,
tab
->
maxBucket
,
hashCode
);
...
@@ -171,7 +171,7 @@ HashNode *OH_HashMapFind(HashMapHandle handle,
...
@@ -171,7 +171,7 @@ HashNode *OH_HashMapFind(HashMapHandle handle,
void
OH_HashMapTraverse
(
HashMapHandle
handle
,
void
(
*
hashNodeTraverse
)(
const
HashNode
*
node
,
const
void
*
context
),
void
OH_HashMapTraverse
(
HashMapHandle
handle
,
void
(
*
hashNodeTraverse
)(
const
HashNode
*
node
,
const
void
*
context
),
const
void
*
context
)
const
void
*
context
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
hashNodeTraverse
!=
NULL
,
return
,
"Invalid
param
"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
&&
hashNodeTraverse
!=
NULL
,
return
,
"Invalid
hash handle
"
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
for
(
int
i
=
0
;
i
<
tab
->
maxBucket
;
i
++
)
{
for
(
int
i
=
0
;
i
<
tab
->
maxBucket
;
i
++
)
{
HashNode
*
node
=
tab
->
buckets
[
i
];
HashNode
*
node
=
tab
->
buckets
[
i
];
...
@@ -185,7 +185,7 @@ void OH_HashMapTraverse(HashMapHandle handle, void (*hashNodeTraverse)(const Has
...
@@ -185,7 +185,7 @@ void OH_HashMapTraverse(HashMapHandle handle, void (*hashNodeTraverse)(const Has
int
OH_HashMapIsEmpty
(
HashMapHandle
handle
)
int
OH_HashMapIsEmpty
(
HashMapHandle
handle
)
{
{
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
1
,
"Invalid
param
"
);
INIT_ERROR_CHECK
(
handle
!=
NULL
,
return
1
,
"Invalid
hash handle
"
);
HashTab
*
tab
=
(
HashTab
*
)
handle
;
HashTab
*
tab
=
(
HashTab
*
)
handle
;
for
(
int
i
=
0
;
i
<
tab
->
maxBucket
;
i
++
)
{
for
(
int
i
=
0
;
i
<
tab
->
maxBucket
;
i
++
)
{
HashNode
*
node
=
tab
->
buckets
[
i
];
HashNode
*
node
=
tab
->
buckets
[
i
];
...
...
services/utils/init_utils.c
浏览文件 @
a7141dfc
...
@@ -162,6 +162,7 @@ char *ReadFileToBuf(const char *configFile)
...
@@ -162,6 +162,7 @@ char *ReadFileToBuf(const char *configFile)
void
CloseStdio
(
void
)
void
CloseStdio
(
void
)
{
{
#ifndef STARTUP_INIT_TEST
#ifndef __LITEOS_M__
#ifndef __LITEOS_M__
int
fd
=
open
(
"/dev/null"
,
O_RDWR
|
O_CLOEXEC
);
int
fd
=
open
(
"/dev/null"
,
O_RDWR
|
O_CLOEXEC
);
if
(
fd
<
0
)
{
if
(
fd
<
0
)
{
...
@@ -172,6 +173,7 @@ void CloseStdio(void)
...
@@ -172,6 +173,7 @@ void CloseStdio(void)
dup2
(
fd
,
STDERR_HANDLE
);
dup2
(
fd
,
STDERR_HANDLE
);
close
(
fd
);
close
(
fd
);
#endif
#endif
#endif
}
}
char
*
ReadFileData
(
const
char
*
fileName
)
char
*
ReadFileData
(
const
char
*
fileName
)
...
...
test/unittest/BUILD.gn
浏览文件 @
a7141dfc
...
@@ -19,6 +19,8 @@ config("utest_config") {
...
@@ -19,6 +19,8 @@ config("utest_config") {
cflags = [
cflags = [
"-Wno-implicit-fallthrough",
"-Wno-implicit-fallthrough",
"-Wno-unused-function",
"-Wno-unused-function",
"-Dprivate=public",
"-Dprotected=public",
]
]
cflags_cc = [
cflags_cc = [
"-Wno-implicit-fallthrough",
"-Wno-implicit-fallthrough",
...
...
ueventd/include/ueventd.h
浏览文件 @
a7141dfc
...
@@ -16,6 +16,11 @@
...
@@ -16,6 +16,11 @@
#ifndef BASE_STARTUP_INITLITE_UEVENTD_H
#ifndef BASE_STARTUP_INITLITE_UEVENTD_H
#define BASE_STARTUP_INITLITE_UEVENTD_H
#define BASE_STARTUP_INITLITE_UEVENTD_H
#include <unistd.h>
#include <unistd.h>
#ifdef __cplusplus
#if __cplusplus
extern
"C"
{
#endif
#endif
// Refer to linux kernel kobject.h
// Refer to linux kernel kobject.h
typedef
enum
ACTION
{
typedef
enum
ACTION
{
...
@@ -71,4 +76,9 @@ void ParseUeventMessage(const char *buffer, ssize_t length, struct Uevent *ueven
...
@@ -71,4 +76,9 @@ void ParseUeventMessage(const char *buffer, ssize_t length, struct Uevent *ueven
void
RetriggerUevent
(
int
sockFd
,
char
**
devices
,
int
num
);
void
RetriggerUevent
(
int
sockFd
,
char
**
devices
,
int
num
);
void
ProcessUevent
(
int
sockFd
,
char
**
devices
,
int
num
);
void
ProcessUevent
(
int
sockFd
,
char
**
devices
,
int
num
);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // BASE_STARTUP_INITLITE_UEVENTD_H
#endif // BASE_STARTUP_INITLITE_UEVENTD_H
ueventd/include/ueventd_device_handler.h
浏览文件 @
a7141dfc
...
@@ -16,7 +16,18 @@
...
@@ -16,7 +16,18 @@
#ifndef BASE_STARTUP_INITLITE_UEVENTD_DEVICE_HANDLER_H
#ifndef BASE_STARTUP_INITLITE_UEVENTD_DEVICE_HANDLER_H
#define BASE_STARTUP_INITLITE_UEVENTD_DEVICE_HANDLER_H
#define BASE_STARTUP_INITLITE_UEVENTD_DEVICE_HANDLER_H
#include "ueventd.h"
#include "ueventd.h"
#ifdef __cplusplus
#if __cplusplus
extern
"C"
{
#endif
#endif
void
HandleBlockDeviceEvent
(
const
struct
Uevent
*
uevent
);
void
HandleBlockDeviceEvent
(
const
struct
Uevent
*
uevent
);
void
HandleOtherDeviceEvent
(
const
struct
Uevent
*
uevent
);
void
HandleOtherDeviceEvent
(
const
struct
Uevent
*
uevent
);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // BASE_STARTUP_INITLITE_UEVENTD_DEVICE_HANDLER_H
#endif // BASE_STARTUP_INITLITE_UEVENTD_DEVICE_HANDLER_H
ueventd/include/ueventd_socket.h
浏览文件 @
a7141dfc
...
@@ -16,6 +16,18 @@
...
@@ -16,6 +16,18 @@
#ifndef BASE_STARTUP_INITLITE_UEVENTD_SOCKET_H
#ifndef BASE_STARTUP_INITLITE_UEVENTD_SOCKET_H
#define BASE_STARTUP_INITLITE_UEVENTD_SOCKET_H
#define BASE_STARTUP_INITLITE_UEVENTD_SOCKET_H
#include <sys/types.h>
#include <sys/types.h>
#include <unistd.h>
#ifdef __cplusplus
#if __cplusplus
extern
"C"
{
#endif
#endif
int
UeventdSocketInit
(
void
);
int
UeventdSocketInit
(
void
);
ssize_t
ReadUeventMessage
(
int
sockFd
,
char
*
buffer
,
size_t
length
);
ssize_t
ReadUeventMessage
(
int
sockFd
,
char
*
buffer
,
size_t
length
);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // BASE_STARTUP_INITLITE_LIST_H
#endif // BASE_STARTUP_INITLITE_LIST_H
ueventd/ueventd.c
浏览文件 @
a7141dfc
...
@@ -243,7 +243,7 @@ void ParseUeventMessage(const char *buffer, ssize_t length, struct Uevent *ueven
...
@@ -243,7 +243,7 @@ void ParseUeventMessage(const char *buffer, ssize_t length, struct Uevent *ueven
return
;
return
;
}
}
// reset partiti
t
on number, major and minor.
// reset partition number, major and minor.
uevent
->
partitionNum
=
-
1
;
uevent
->
partitionNum
=
-
1
;
uevent
->
major
=
-
1
;
uevent
->
major
=
-
1
;
uevent
->
minor
=
-
1
;
uevent
->
minor
=
-
1
;
...
...
ueventd/ueventd_device_handler.c
浏览文件 @
a7141dfc
...
@@ -428,7 +428,7 @@ void HandleBlockDeviceEvent(const struct Uevent *uevent)
...
@@ -428,7 +428,7 @@ void HandleBlockDeviceEvent(const struct Uevent *uevent)
}
}
if
(
strcmp
(
uevent
->
subsystem
,
"block"
)
!=
0
)
{
if
(
strcmp
(
uevent
->
subsystem
,
"block"
)
!=
0
)
{
INIT_LOGE
(
"Unexp
ce
ted uevent subsystem
\"
%s
\"
received in block device handler"
,
uevent
->
subsystem
);
INIT_LOGE
(
"Unexp
ec
ted uevent subsystem
\"
%s
\"
received in block device handler"
,
uevent
->
subsystem
);
return
;
return
;
}
}
...
@@ -475,7 +475,8 @@ void HandleOtherDeviceEvent(const struct Uevent *uevent)
...
@@ -475,7 +475,8 @@ void HandleOtherDeviceEvent(const struct Uevent *uevent)
char
deviceNode
[
DEVICE_FILE_SIZE
]
=
{};
char
deviceNode
[
DEVICE_FILE_SIZE
]
=
{};
char
sysPath
[
SYSPATH_SIZE
]
=
{};
char
sysPath
[
SYSPATH_SIZE
]
=
{};
if
(
strncpy_s
(
sysPath
,
SYSPATH_SIZE
-
1
,
uevent
->
syspath
,
strlen
(
uevent
->
syspath
)
!=
EOK
))
{
if
((
uevent
->
syspath
==
NULL
)
||
strncpy_s
(
sysPath
,
SYSPATH_SIZE
-
1
,
uevent
->
syspath
,
strlen
(
uevent
->
syspath
))
!=
EOK
)
{
INIT_LOGE
(
"Failed to copy sys path"
);
INIT_LOGE
(
"Failed to copy sys path"
);
return
;
return
;
}
}
...
...
ueventd/ueventd_socket.c
浏览文件 @
a7141dfc
...
@@ -50,8 +50,10 @@ int UeventdSocketInit(void)
...
@@ -50,8 +50,10 @@ int UeventdSocketInit(void)
if
(
bind
(
sockfd
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
<
0
)
{
if
(
bind
(
sockfd
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
<
0
)
{
INIT_LOGE
(
"Bind socket failed, err = %d"
,
errno
);
INIT_LOGE
(
"Bind socket failed, err = %d"
,
errno
);
#ifndef STARTUP_INIT_TEST
close
(
sockfd
);
close
(
sockfd
);
return
-
1
;
return
-
1
;
#endif
}
}
return
sockfd
;
return
sockfd
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录