From 2ba8983131e6d399dba1a8606b37b270a878d809 Mon Sep 17 00:00:00 2001 From: xionglei6 Date: Tue, 16 Nov 2021 10:38:26 +0800 Subject: [PATCH] init: fix bugs Signed-off-by: xionglei6 --- interfaces/innerkits/socket/BUILD.gn | 5 ++++- services/init/standard/init_reboot.c | 3 +++ services/param/adapter/param_persistadp.c | 21 +++++++++++++++------ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/interfaces/innerkits/socket/BUILD.gn b/interfaces/innerkits/socket/BUILD.gn index aa8a26e3..273c04d5 100755 --- a/interfaces/innerkits/socket/BUILD.gn +++ b/interfaces/innerkits/socket/BUILD.gn @@ -35,5 +35,8 @@ ohos_shared_library("libsocket") { include_dirs = service_socket_include deps = service_socket_deps part_name = "init" - install_images = [ "system" ] + install_images = [ + "system", + "updater", + ] } diff --git a/services/init/standard/init_reboot.c b/services/init/standard/init_reboot.c index 5499a77f..8cf702f3 100755 --- a/services/init/standard/init_reboot.c +++ b/services/init/standard/init_reboot.c @@ -116,6 +116,9 @@ static int CheckAndRebootToUpdater(const char *valueData, const char *cmd, const ret = snprintf_s(msg.update, MAX_UPDATE_SIZE, MAX_UPDATE_SIZE - 1, "%s", p); INIT_ERROR_CHECK(ret > 0, return -1, "Failed to format param for %s.", cmd); msg.update[MAX_UPDATE_SIZE - 1] = 0; + } else { + ret = memset_s(msg.update, MAX_UPDATE_SIZE, 0, MAX_UPDATE_SIZE); + INIT_ERROR_CHECK(ret == 0, return -1, "Failed to format update for %s.", cmd); } ret = -1; diff --git a/services/param/adapter/param_persistadp.c b/services/param/adapter/param_persistadp.c index 45bdcd04..8aa6a7a9 100755 --- a/services/param/adapter/param_persistadp.c +++ b/services/param/adapter/param_persistadp.c @@ -18,6 +18,7 @@ #include #include +#include "init_utils.h" #include "param_persist.h" #include "param_utils.h" @@ -29,9 +30,11 @@ typedef struct { static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context) { CheckAndCreateDir(PARAM_PERSIST_SAVE_PATH); - FILE *fp = fopen(PARAM_PERSIST_SAVE_TMP_PATH, "r"); + int updaterMode = InUpdaterMode(); + char *tmpPath = (updaterMode == 0) ? PARAM_PERSIST_SAVE_TMP_PATH : "/param/tmp_persist_parameters"; + FILE *fp = fopen(tmpPath, "r"); if (fp == NULL) { - fp = fopen(PARAM_PERSIST_SAVE_PATH, "r"); + fp = fopen((updaterMode == 0) ? PARAM_PERSIST_SAVE_PATH : "/param/persist_parameters", "r"); PARAM_LOGI("LoadPersistParam open file %s", PARAM_PERSIST_SAVE_PATH); } PARAM_CHECK(fp != NULL, return -1, "No valid persist parameter file %s", PARAM_PERSIST_SAVE_PATH); @@ -65,7 +68,7 @@ static int SavePersistParam(const char *name, const char *value) static int BatchSavePersistParamBegin(PERSIST_SAVE_HANDLE *handle) { - FILE *fp = fopen(PARAM_PERSIST_SAVE_TMP_PATH, "w"); + FILE *fp = fopen((InUpdaterMode() == 0) ? PARAM_PERSIST_SAVE_TMP_PATH : "/param/tmp_persist_parameters", "w"); PARAM_CHECK(fp != NULL, return -1, "Open file %s fail error %d", PARAM_PERSIST_SAVE_TMP_PATH, errno); *handle = (PERSIST_SAVE_HANDLE)fp; return 0; @@ -82,10 +85,16 @@ static int BatchSavePersistParam(PERSIST_SAVE_HANDLE handle, const char *name, c static void BatchSavePersistParamEnd(PERSIST_SAVE_HANDLE handle) { + int ret; FILE *fp = (FILE *)handle; (void)fclose(fp); - unlink(PARAM_PERSIST_SAVE_PATH); - int ret = rename(PARAM_PERSIST_SAVE_TMP_PATH, PARAM_PERSIST_SAVE_PATH); + if (InUpdaterMode() == 0) { + unlink(PARAM_PERSIST_SAVE_PATH); + ret = rename(PARAM_PERSIST_SAVE_TMP_PATH, PARAM_PERSIST_SAVE_PATH); + } else { + unlink("/param/persist_parameters"); + ret = rename("/param/tmp_persist_parameters", "/param/persist_parameters"); + } PARAM_CHECK(ret == 0, return, "BatchSavePersistParamEnd %s fail error %d", PARAM_PERSIST_SAVE_TMP_PATH, errno); } @@ -98,4 +107,4 @@ int RegisterPersistParamOps(PersistParamOps *ops) ops->batchSave = BatchSavePersistParam; ops->batchSaveEnd = BatchSavePersistParamEnd; return 0; -} \ No newline at end of file +} -- GitLab