summaryrefslogtreecommitdiffstats
path: root/nsframework/backup_manager/server/src
diff options
context:
space:
mode:
authorTadao Tanikawa <tanikawa.tadao@jp.panasonic.com>2020-11-20 23:36:23 +0900
committerTadao Tanikawa <tanikawa.tadao@jp.panasonic.com>2020-11-22 09:02:55 +0900
commit17cf21bcf8a2e29d2cbcf0a313474d2a4ee44f5d (patch)
tree582a9768558d9eaf261ca5df6136e9de54c95816 /nsframework/backup_manager/server/src
parent9e86046cdb356913ae026f616e5bf17f6f238aa5 (diff)
Re-organized sub-directory by category
Since all the sub-directories were placed in the first level, created sub-directories, "hal", "module", and "service" for classification and relocated each component. Signed-off-by: Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com> Change-Id: Ifdf743ac0d1893bd8e445455cf0d2c199a011d5c
Diffstat (limited to 'nsframework/backup_manager/server/src')
-rwxr-xr-xnsframework/backup_manager/server/src/backupmanager_application.cpp277
-rwxr-xr-xnsframework/backup_manager/server/src/backupmanager_main.cpp61
-rwxr-xr-xnsframework/backup_manager/server/src/bkup_crc32.cpp62
-rwxr-xr-xnsframework/backup_manager/server/src/bkup_param.cpp447
-rwxr-xr-xnsframework/backup_manager/server/src/bkup_process.cpp2497
5 files changed, 0 insertions, 3344 deletions
diff --git a/nsframework/backup_manager/server/src/backupmanager_application.cpp b/nsframework/backup_manager/server/src/backupmanager_application.cpp
deleted file mode 100755
index c08e725..0000000
--- a/nsframework/backup_manager/server/src/backupmanager_application.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <native_service/ns_backup.h>
-#include <agl_thread.h>
-#include <system_service/ss_system_if.h>
-#include <system_service/ss_system_manager_notifications.h>
-#include <native_service/frameworkunified_multithreading.h>
-
-#include <nv_hal.h>
-#include <signal.h>
-#include <cerrno>
-#include <cstdio>
-#include "bkup_api.h"
-#include "bkup_param.h"
-#include "bkup_backupmanagerlog.h"
-#include "bkup_process.h"
-
-pthread_t g_work_thread_id = 0;
-pthread_t g_delay_thread_id = 0;
-pthread_t g_nand_thread_id = 0;
-HANDLE g_msg_handle_thread = NULL;
-
-typedef void (* signal_handler)(int);
-
-void SignalHandlerFuncForMsgHandleThread(int signum) {
- pthread_exit(0);
-}
-
-EFrameworkunifiedStatus MsgHandleThreadStart(HANDLE h_app) {
- signal_handler p_signal = SignalHandlerFuncForMsgHandleThread;
- signal(SIGUSR1, p_signal);
-
- g_work_thread_id = pthread_self();
-
- EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK;
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((e_status = FrameworkunifiedAttachCallbackToDispatcher(h_app, FRAMEWORKUNIFIED_ANY_SOURCE, BACKUP_CID, BkupHandler)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedAttachCallbacksToDispatcher e_status:%d\n", e_status);
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
- return e_status;
-}
-
-EFrameworkunifiedStatus MsgHandleThreadStop(HANDLE h_app) {
- EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK;
- return e_status;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnInitialization(HANDLE h_app) {
- EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK;
- pthread_attr_t t_attr;
- pthread_t t;
-
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((e_status = FrameworkunifiedRegisterServiceAvailabilityNotification(h_app, NTFY_BackupMgr_Availability)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedRegisterServiceAvailabilityNotification e_status:%d\n", e_status);
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
- if (pthread_attr_init(&t_attr) < 0) { // LCOV_EXCL_BR_LINE 5:pthread_attr_init's error case.
- // LCOV_EXCL_START 5:pthread_attr_init's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_attr_init:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5:pthread_attr_init's error case.
- }
-
- // LCOV_EXCL_BR_START 5:pthread_attr_setinheritsched's error case.
- if (pthread_attr_setinheritsched(&t_attr, PTHREAD_INHERIT_SCHED) < 0) {
- // LCOV_EXCL_BR_STOP 5:pthread_attr_setinheritsched's error case.
- // LCOV_EXCL_START 5:pthread_attr_setinheritsched's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_attr_setinheritsched:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5:pthread_attr_setinheritsched's error case.
- }
-
- if (pthread_create(&t, &t_attr, BkupNandThread, NULL) < 0) { // LCOV_EXCL_BR_LINE 5:pthread_create's error case.
- // LCOV_EXCL_START 5:pthread_create's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_create:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5:pthread_create's error case.
- }
-
- if (pthread_create(&t, &t_attr, BkupDelayThread, NULL) < 0) { // LCOV_EXCL_BR_LINE 5:pthread_create's error case.
- // LCOV_EXCL_START 5:pthread_create's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_create:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5:pthread_create's error case.
- }
-
- e_status = InitNv();
- if (e_status != eFrameworkunifiedStatusOK) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "InitNv e_status:%d", e_status);
- exit(EXIT_FAILURE);
- }
-
- if (BckupParamInit() < 0) { // LCOV_EXCL_BR_LINE 5:C API's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- exit(EXIT_FAILURE); // LCOV_EXCL_LINE 5:C API's error case.
- }
-
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((e_status = FrameworkunifiedAttachCallbackToDispatcher(h_app, FRAMEWORKUNIFIED_ANY_SOURCE, BACKUP_CID, BkupHandler)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedAttachCallbacksToDispatcher e_status:%d\n", e_status);
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
-
- g_msg_handle_thread = FrameworkunifiedCreateChildThread(h_app, SERVICE_BACKUP_MANAGER_MSG_HANDLE_THREAD, MsgHandleThreadStart, MsgHandleThreadStop); // LCOV_EXCL_BR_LINE 11:Unexpected branch // NOLINT (whitespace/line_length)
- if (g_msg_handle_thread == NULL) { // LCOV_EXCL_BR_LINE 4: NSFW error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 4: NSFW error case.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- "Fail to create SERVICE_BACKUP_MANAGER_MSG_HANDLE_THREAD");
- // LCOV_EXCL_STOP 4: NSFW error case.
- } else {
- if (eFrameworkunifiedStatusOK != (e_status = FrameworkunifiedStartChildThread(h_app, g_msg_handle_thread, 0, NULL))) { // LCOV_EXCL_BR_LINE 4: NSFW error case. // NOLINT (whitespace/line_length)
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Fail to Start SERVICE_BACKUP_MANAGER_MSG_HANDLE_THREAD. Status:%#x", e_status); // LCOV_EXCL_LINE 4: NSFW error case. // NOLINT (whitespace/line_length)
- }
- }
-
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((e_status = FrameworkunifiedSubscribeNotificationWithCallback(h_app,
- NTFY_SSSystemMgrPowerOnOff,
- bkup_power_handler)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedSubscribeNotificationWithCallback eStatus:%d", e_status); // LCOV_EXCL_LINE 4: NSFW error case. // NOLINT (whitespace/line_length)
- }
-
- e_status = BkupInitHandler(h_app); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((e_status = FrameworkunifiedPublishServiceAvailability(h_app, TRUE)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedPublishServiceAvailability e_status:%d\n", e_status);
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
- return e_status;
-}
-
-// LCOV_EXCL_START 14 Resident process, not called by NSFW
-EFrameworkunifiedStatus FrameworkunifiedOnDestroy(HANDLE h_app) {
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-// LCOV_EXCL_STOP 14 Resident process, not called by NSFW
-
-EFrameworkunifiedStatus FrameworkunifiedOnStart(HANDLE h_app) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnStop(HANDLE h_app) {
- EFrameworkunifiedStatus e_status = BkupTerminateHandler(h_app);
-
- if (FrameworkunifiedPublishServiceAvailability(h_app, FALSE) != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case
- // LCOV_EXCL_START 15:marco defined in "native_service/ns_logger_if.h"
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedPublishServiceAvailability fail\n");
- // LCOV_EXCL_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
-
- // LCOV_EXCL_BR_START 4: NSFW error case
- if (eFrameworkunifiedStatusOK == (FrameworkunifiedStopChildThread(h_app, g_msg_handle_thread, 0, NULL))) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- FrameworkunifiedDestroyChildThread(h_app, g_msg_handle_thread);
- g_msg_handle_thread = NULL;
- }
-
- int ret2 = pthread_kill(g_work_thread_id, SIGUSR1);
- if (ESRCH == ret2) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __PRETTY_FUNCTION__,
- "thread is already exit !");
- } else if (EINVAL == ret2) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __PRETTY_FUNCTION__,
- "signal is invalid !");
- } else {
- pthread_join(g_work_thread_id, NULL);
- }
-
- ret2 = pthread_kill(g_nand_thread_id, SIGUSR1);
- if (ESRCH == ret2) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __PRETTY_FUNCTION__,
- "thread is already exit !");
- } else if (EINVAL == ret2) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __PRETTY_FUNCTION__,
- "signal is invalid !");
- } else {
- pthread_join(g_nand_thread_id, NULL);
- }
-
- ret2 = pthread_kill(g_delay_thread_id, SIGUSR1);
- if (ESRCH == ret2) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __PRETTY_FUNCTION__,
- "thread is already exit !");
- } else if (EINVAL == ret2) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __PRETTY_FUNCTION__,
- "signal is invalid !");
- } else {
- pthread_join(g_delay_thread_id, NULL);
- }
-
- return e_status;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnPreStart(HANDLE hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnPreStop(HANDLE hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnBackgroundStart(HANDLE hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnBackgroundStop(HANDLE hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnDebugDump(HANDLE h_app) { // LCOV_EXCL_START 7:debug code
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-// LCOV_EXCL_STOP 7:debug code
-
-EFrameworkunifiedStatus FrameworkunifiedCreateStateMachine(HANDLE h_app) { // LCOV_EXCL_START 7:debug code
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "called");
- return eFrameworkunifiedStatusOK;
-}
-// LCOV_EXCL_STOP 7:debug code
diff --git a/nsframework/backup_manager/server/src/backupmanager_main.cpp b/nsframework/backup_manager/server/src/backupmanager_main.cpp
deleted file mode 100755
index f225524..0000000
--- a/nsframework/backup_manager/server/src/backupmanager_main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <native_service/ns_version_if.h>
-#include <native_service/frameworkunified_dispatcher.h>
-#include <agl_thread.h>
-#include <system_service/ss_system_if.h>
-#include <cerrno>
-#include <cstdio>
-#include "bkup_backupmanagerlog.h"
-
-CFrameworkunifiedVersion g_FrameworkunifiedVersion(0, 0, 0); // NOLINT(readability/nolint).
-
-FRAMEWORKUNIFIEDLOGPARAM g_FrameworkunifiedLogParams = { // NOLINT(readability/nolint) The varable is used by FW
- FRAMEWORKUNIFIEDLOGOPTIONS,
- {
- ZONE_TEXT_10, ZONE_TEXT_11, ZONE_TEXT_12,
- ZONE_TEXT_13, ZONE_TEXT_14, ZONE_TEXT_15,
- ZONE_TEXT_16, ZONE_TEXT_17, ZONE_TEXT_18,
- ZONE_TEXT_19, ZONE_TEXT_20, ZONE_TEXT_21,
- ZONE_TEXT_22, ZONE_TEXT_23, ZONE_TEXT_24,
- ZONE_TEXT_25, ZONE_TEXT_26, ZONE_TEXT_27,
- ZONE_TEXT_28, ZONE_TEXT_29, ZONE_TEXT_30,
- ZONE_TEXT_31
- },
- FRAMEWORKUNIFIEDLOGZONES
-};
-
-int main(int argc, char *argv[]) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- FrameworkunifiedDefaultCallbackHandler cb_funcs;
- FRAMEWORKUNIFIED_MAKE_DEFAULT_CALLBACK(cb_funcs);
- FRAMEWORKUNIFIED_SET_ZONES();
- // LCOV_EXCL_BR_STOP 11:unexpected branch
-
- // LCOV_EXCL_BR_START 11:unexpected branch
- EFrameworkunifiedStatus e_status = FrameworkunifiedDispatcherWithArguments(MN_NS_BACKUPMGR, argc, argv, &cb_funcs);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- if (e_status != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedDispatcherWithArguments: %d", e_status);
- return EXIT_FAILURE;
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
- return EXIT_SUCCESS;
-} // LCOV_EXCL_BR_LINE 10:The final line
diff --git a/nsframework/backup_manager/server/src/bkup_crc32.cpp b/nsframework/backup_manager/server/src/bkup_crc32.cpp
deleted file mode 100755
index f1d8449..0000000
--- a/nsframework/backup_manager/server/src/bkup_crc32.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <cstdio>
-#include "bkup_crc32.h"
-#include "bkup_util.h"
-
-/*
- * CRC-32C lookup table
- *
- * Polynomial 0x1EDC6F41
- */
-static const uint32_t kBkupCrc32Lookup[4][256] = {
- {
- },
- {
- },
- {
- },
- {
- }
-};
-
-/**
- * compute CRC-32C (Slicing-by-4)
- */
-uint32_t BkupCrc32(const void *data, size_t length) {
- uint32_t crc = 0xFFFFFFFF;
- const uint32_t *current = (const uint32_t *)data;
-
- if (data == NULL) {
- return -1;
- }
- while (length >= 4) {
- uint32_t one = *current++ ^ crc;
- crc = kBkupCrc32Lookup[0][(one >> 24) & 0xFF] ^
- kBkupCrc32Lookup[1][(one >> 16) & 0xFF] ^
- kBkupCrc32Lookup[2][(one >> 8) & 0xFF] ^
- kBkupCrc32Lookup[3][one & 0xFF];
- length -= 4;
- }
-
- const uint8_t *current_char = (const uint8_t *)current;
- while (length-- > 0) {
- crc = (crc >> 8) ^ kBkupCrc32Lookup[0][(crc & 0xFF) ^ *current_char++];
- }
-
- return ~crc;
-}
diff --git a/nsframework/backup_manager/server/src/bkup_param.cpp b/nsframework/backup_manager/server/src/bkup_param.cpp
deleted file mode 100755
index 900779b..0000000
--- a/nsframework/backup_manager/server/src/bkup_param.cpp
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <other_service/VP_GetEnv.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <libxml/xmlerror.h>
-#include <libxml/parser.h>
-#include <libxml/SAX2.h>
-#include <inttypes.h>
-#include <cerrno>
-#include <cstdio>
-#include <string>
-#include <map>
-#include <utility>
-#include "bkup_param.h"
-#include "bkup_backupmanagerlog.h"
-#include "bkup_util.h"
-
-#define BKUP_XML_PATH_MAX 100
-#define BKUP_XML_PATH "/usr/agl/conf/BS/ns/backup_manager/rodata/"
-#define BKUP_XML_PREFIX "backup_"
-#define BKUP_XML_EXTENSION ".xml"
-
-#define BKUP_AREA_1 "AREA1"
-#define BKUP_AREA_2 "AREA2"
-#define BKUP_BRAND_1 "BRAND1"
-#define BKUP_BRAND_2 "BRAND2"
-#define BKUP_GRADE_1 "GRADE1"
-#define BKUP_GRADE_2 "GRADE2"
-#define BKUP_DESTINATION_TYPE_AREA1_TE "AREA1_TE"
-#define BKUP_DESTINATION_TYPE_AREA1_L "AREA1_L"
-#define BKUP_DESTINATION_TYPE_AREA2_T "AREA2_T"
-#define BKUP_DESTINATION_TYPE_AREA2_TE "AREA2_TE"
-
-#define BKUP_DESTINATION_STR_MAX 10
-typedef struct {
- char area[VP_MAX_LENGTH];
- char brand[VP_MAX_LENGTH];
- char grade[VP_MAX_LENGTH];
- char destination[BKUP_DESTINATION_STR_MAX];
-} BkupDestinationTbl;
-
-const BkupDestinationTbl kDestinationTbl[] = {
- // Destination:Area1
- {BKUP_AREA_1, BKUP_BRAND_1, BKUP_GRADE_1, BKUP_DESTINATION_TYPE_AREA1_TE},
- {BKUP_AREA_1, BKUP_BRAND_1, BKUP_GRADE_2, BKUP_DESTINATION_TYPE_AREA1_TE},
- {BKUP_AREA_1, BKUP_BRAND_2, BKUP_GRADE_1, BKUP_DESTINATION_TYPE_AREA1_L},
- {BKUP_AREA_1, BKUP_BRAND_2, BKUP_GRADE_2, BKUP_DESTINATION_TYPE_AREA1_L},
- // Destination:Area2
- {BKUP_AREA_2, BKUP_BRAND_1, BKUP_GRADE_1, BKUP_DESTINATION_TYPE_AREA2_TE},
- {BKUP_AREA_2, BKUP_BRAND_1, BKUP_GRADE_2, BKUP_DESTINATION_TYPE_AREA2_TE},
- {BKUP_AREA_2, BKUP_BRAND_2, BKUP_GRADE_1, BKUP_DESTINATION_TYPE_AREA2_T},
- {BKUP_AREA_2, BKUP_BRAND_2, BKUP_GRADE_2, BKUP_DESTINATION_TYPE_AREA2_T},
-};
-
-typedef std::string Category;
-typedef struct {
- bool nand;
- bool cache_dram;
- bool backup_dram;
- bool sync;
- bool encrypt;
- int backup_cycle;
-} CategoryProperty;
-typedef std::map<Category, CategoryProperty> CategoryTable;
-
-typedef std::string Item;
-typedef struct {
- int id;
- int size;
- void *opt;
- Category category;
-} ItemProperty; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-typedef std::map<Item, ItemProperty> ItemTable;
-typedef std::map<int, Item> IdTable;
-
-typedef struct {
- Category current;
- CategoryTable category_table;
- ItemTable item_table;
- IdTable id_table;
-} BackupParams; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
-static BackupParams *g_backup_params = NULL;
-
-static void StartElementNs(void *ctx, const xmlChar *localname,
- const xmlChar *prefix, const xmlChar *uri,
- int nb_namespaces, const xmlChar **namespaces,
- int nb_attributes, int nb_defaulted,
- const xmlChar **attributes) {
- if (ctx == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "ctx is NULL");
- return;
- }
- if (localname == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "localname is NULL");
- return;
- }
- BackupParams *p_backup_params = static_cast<BackupParams *>(ctx);
- std::string tag = (const char *)localname; // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (tag.compare("backup") == 0) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- // do nothing
- } else if (tag.compare("category") == 0) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- CategoryProperty category_attr = {false, false, false, false, false, 0};
- std::string category_name; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
- for (int i = 0; i < nb_attributes; i++) {
- // LCOV_EXCL_BR_START 11:except,C++ STL
- std::string localname = (const char *)attributes[i * 5];
- std::string value((const char *)attributes[i * 5 + 3], (const char *)attributes[i * 5 + 4]);
- if (localname.compare("name") == 0) {
- category_name = value;
- } else if (localname.compare("nand") == 0) {
- if (value.compare("true") == 0) {
- category_attr.nand = true;
- }
- } else if (localname.compare("backupDram") == 0) {
- if (value.compare("true") == 0) {
- category_attr.backup_dram = true;
- }
- } else if (localname.compare("cacheDram") == 0) {
- if (value.compare("true") == 0) {
- category_attr.cache_dram = true;
- }
- } else if (localname.compare("sync") == 0) {
- if (value.compare("true") == 0) {
- category_attr.sync = true;
- }
- } else if (localname.compare("encrypt") == 0) {
- if (value.compare("true") == 0) {
- category_attr.encrypt = true;
- }
- } else if (localname.compare("backupCycle") == 0) {
- category_attr.backup_cycle = atoi(value.c_str());
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- } else {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __func__, "Unknown attribute:%s", localname.c_str());
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
- }
-
- // LCOV_EXCL_BR_START 11:except,C++ STL
- CategoryTable::iterator c_it = p_backup_params->category_table.find(category_name);
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- if (c_it != p_backup_params->category_table.end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- // LCOV_EXCL_START 200:Execute in server start period
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "duplicate category:%s", category_name.c_str());
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 200:Execute in server start period
- }
- // LCOV_EXCL_BR_START 11:except,C++ STL
- p_backup_params->category_table.insert(std::make_pair(category_name, category_attr));
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- p_backup_params->current = category_name; // LCOV_EXCL_BR_LINE 11:except,C++ STL
- } else if (tag.compare("item") == 0) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (p_backup_params->current.compare("") == 0) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- // LCOV_EXCL_START 200:Execute in server start period
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Detect item before category");
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 200:Execute in server start period
- }
-
- ItemProperty item_property = {0, 0, NULL, p_backup_params->current}; // LCOV_EXCL_BR_LINE 11:except,C++ STL
- std::string item_name; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
- for (int i = 0; i < nb_attributes; i++) {
- // LCOV_EXCL_BR_START 11:except,C++ STL
- std::string localname = (const char *)attributes[i * 5];
- std::string value((const char *)attributes[i * 5 + 3], (const char *)attributes[i * 5 + 4]);
- if (localname.compare("name") == 0) {
- item_name = value;
- } else if (localname.compare("id") == 0) {
- item_property.id = atoi(value.c_str());
- } else if (localname.compare("size") == 0) {
- item_property.size = atoi(value.c_str());
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- } else {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __func__, "Unknown attribute:%s", localname.c_str());
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
- }
-
- ItemTable::iterator i_it = p_backup_params->item_table.find(item_name); // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (i_it != p_backup_params->item_table.end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- // LCOV_EXCL_START 200:Execute in server start period
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Duplicate item:%s", item_name.c_str());
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 200:Execute in server start period
- }
- // LCOV_EXCL_BR_START 11:except,C++ STL
- p_backup_params->item_table.insert(std::make_pair(item_name, item_property));
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
-
- IdTable::iterator id_it = p_backup_params->id_table.find(item_property.id); // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (id_it != p_backup_params->id_table.end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- // LCOV_EXCL_START 200:Execute in server start period
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Duplicate id:%d", item_property.id);
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 200:Execute in server start period
- }
- // LCOV_EXCL_BR_START 11:except,C++ STL
- p_backup_params->id_table.insert(std::make_pair(item_property.id, item_name));
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- } else {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __func__, "Unknown tag:%s", localname);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
-}
-
-static int BkupGetXmlPath(char* path) {
- if (path == NULL) { // LCOV_EXCL_BR_LINE 6:Excluded as no NULL is currently passed
- // LCOV_EXCL_START 6:Excluded as no NULL is currently passed
- AGL_ASSERT_NOT_TESTED();
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "path is NULL");
- return -1;
- // LCOV_EXCL_STOP 6:Excluded as no NULL is currently passed
- }
- memset(path, 0, BKUP_XML_PATH_MAX);
- char param_area[VP_MAX_LENGTH] = "";
- VP_GetEnv(VP_VEHICLEPARAMETERLIBRARY_AREA, param_area);
- char param_brand[VP_MAX_LENGTH] = "";
- VP_GetEnv(VEHICLEPARAMETERLIBRARY_BRAND, param_brand);
- char param_grade[VP_MAX_LENGTH] = "";
- VP_GetEnv(VP_VEHICLEPARAMETERLIBRARY_GRADE, param_grade);
-
- bool is_match = false;
- for (uint16_t i = 0; i < _countof(kDestinationTbl); i++) {
- size_t area_size = static_cast<size_t>(std::string(kDestinationTbl[i].area).size());
- // Check vehicle parameter settings (For VP_VEHICLEPARAMETERLIBRALY_AREA only, check the area size of tbl to check the character strings common to each area)
- if ((strncmp(param_area, kDestinationTbl[i].area, area_size) == 0) &&
- (strncmp(param_brand, kDestinationTbl[i].brand, sizeof(param_area)) == 0) &&
- (strncmp(param_grade, kDestinationTbl[i].grade, sizeof(param_area)) == 0)) {
- is_match = true;
- snprintf(path, BKUP_XML_PATH_MAX, "%s%s%s%s", BKUP_XML_PATH, BKUP_XML_PREFIX,
- kDestinationTbl[i].destination, BKUP_XML_EXTENSION);
- break;
- }
- }
- if (is_match == false) {
- // If the destination settings do not match, set the AREA2_T path as failsafe
- snprintf(path, BKUP_XML_PATH_MAX, "%s%s%s%s", BKUP_XML_PATH, BKUP_XML_PREFIX,
- BKUP_DESTINATION_TYPE_AREA2_T, BKUP_XML_EXTENSION);
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Unexpected VP area[%s] brand[%s] grade[%s]",
- param_area, param_brand, param_grade);
- }
- return 0;
-}
-
-int BckupParamInit(void) {
- int ret = -1;
- xmlParserCtxtPtr xmlctx;
- xmlSAXHandler saxh;
- xmlDocPtr doc;
- int fd = -1;
- struct stat sb;
- char *map = NULL;
- uint64_t start, end;
-
- g_backup_params = new BackupParams; // LCOV_EXCL_BR_LINE 11:except,C++ operator
-
- LIBXML_TEST_VERSION // LCOV_EXCL_BR_LINE 11:unexpected branch
- // LCOV_EXCL_BR_START 11:unexpected branch
- xmlInitParser(); // NOLINT(readability/nolint) Defined in library of libxml
- // LCOV_EXCL_BR_STOP 11:unexpected branch
-
- memset(&saxh, 0, sizeof(saxh));
- saxh.initialized = XML_SAX2_MAGIC;
- saxh.startElementNs = StartElementNs;
-
- xmlctx = xmlCreatePushParserCtxt(&saxh, g_backup_params, NULL, 0, NULL); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- char xml_path[BKUP_XML_PATH_MAX] = {0};
- ret = BkupGetXmlPath(xml_path);
- if (ret != 0) { // LCOV_EXCL_BR_LINE 6:Excluded because the return value does not cause an error
- // LCOV_EXCL_START 6:Excluded because the return value does not cause an error
- AGL_ASSERT_NOT_TESTED();
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "BkupGetXmlPath Error");
- goto exit;
- // LCOV_EXCL_STOP 6:Excluded because the return value does not cause an error
- }
-
- if ((fd = open(xml_path, O_RDONLY)) < 0) { // LCOV_EXCL_BR_LINE 5:open's error case.
- // LCOV_EXCL_START 5:open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "open:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5:open's error case.
- }
- if (fstat(fd, &sb) < 0) { // LCOV_EXCL_BR_LINE 5:fstat's error case.
- // LCOV_EXCL_START 5:fstat's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "fstat:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5:fstat's error case.
- }
- map = reinterpret_cast<char *>(mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0));
- if (map == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
-
- start = BkupTimerReal();
- if (xmlParseChunk(xmlctx, map, static_cast<int>(sb.st_size), 1)) { // LCOV_EXCL_BR_LINE 5:xmlParseChunk's error case.
- // LCOV_EXCL_START 5:xmlParseChunk's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- xmlParserError(xmlctx, "xmlParseChunk");
- goto exit;
- // LCOV_EXCL_STOP 5:xmlParseChunk's error case.
- }
- end = BkupTimerReal();
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "spent:%" PRIu64 ".%06" PRIu64 "ms",
- static_cast<uint64_t>((end - start) / 1000000),
- static_cast<uint64_t>((end - start) % 1000000));
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
-
- doc = xmlctx->myDoc;
- xmlFreeParserCtxt(xmlctx); // LCOV_EXCL_BR_LINE 11:unexpected branch
- xmlFreeDoc(doc); // LCOV_EXCL_BR_LINE 11:unexpected branch
- xmlCleanupParser(); // LCOV_EXCL_BR_LINE 11:unexpected branch
- ret = 0;
-
-exit:
- if (fd >= 0) { // LCOV_EXCL_BR_LINE 5:open's error case.
- if (close(fd) < 0) { // LCOV_EXCL_BR_LINE 5:close's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, "close:%s", strerror(errno)); // LCOV_EXCL_LINE 5:close's error case.
- }
- }
- if (map) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- if (munmap(map, sb.st_size) < 0) { // LCOV_EXCL_BR_LINE 5:munmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, "munmap:%s", strerror(errno)); // LCOV_EXCL_LINE 5:munmap's error case.
- }
- }
- return ret;
-}
-
-int BkupParamGet(const char *item_name, bkup_query_result_t *result) {
- if (g_backup_params == NULL) { // LCOV_EXCL_BR_LINE 6:g_backup_params will not be NULL
- // LCOV_EXCL_START 6:g_backup_params will not be NULL
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Uninitialize call");
- return -1;
- // LCOV_EXCL_STOP 6:g_backup_params will not be NULL
- }
- if (result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "result is NULL");
- return -1;
- }
- ItemTable::iterator item_it = g_backup_params->item_table.find(item_name); // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (item_it == g_backup_params->item_table.end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- return -1;
- }
-
- // LCOV_EXCL_BR_START 11:except,C++ STL
- CategoryTable::iterator category_it = g_backup_params->category_table.find(item_it->second.category);
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- if (category_it == g_backup_params->category_table.end()) { // LCOV_EXCL_BR_LINE 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return -1; // LCOV_EXCL_LINE 6:double check
- }
-
- // LCOV_EXCL_BR_START 11:except,C++ STL
- result->id = item_it->second.id;
- result->size = item_it->second.size;
- result->opt = item_it->second.opt;
- result->nand = category_it->second.nand;
- result->cache_dram = category_it->second.cache_dram;
- result->backup_dram = category_it->second.backup_dram;
- result->sync = category_it->second.sync;
- result->encrypt = category_it->second.encrypt;
- result->backup_cycle = category_it->second.backup_cycle;
- BkupStrlcpy(result->category_name, item_it->second.category.c_str(), sizeof(result->category_name));
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
-
- return 0;
-}
-
-int BkupParamGetNumid(uint32_t num_id, bkup_query_result_t *result,
- char *item_name, size_t item_name_size) {
- if (g_backup_params == NULL) { // LCOV_EXCL_BR_LINE 6:g_backup_params will not be NULL
- // LCOV_EXCL_START 6:g_backup_params will not be NULL
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Uninitialize call");
- return -1;
- // LCOV_EXCL_STOP 6:g_backup_params will not be NULL
- }
-
- // LCOV_EXCL_BR_START 11:except,C++ STL
- IdTable::iterator id_it = g_backup_params->id_table.find(static_cast<int>(num_id));
- // LCOV_EXCL_BR_STOP 11:except,C++ STL
- if (id_it == g_backup_params->id_table.end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- return -1;
- }
- BkupStrlcpy(item_name, id_it->second.c_str(), item_name_size); // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
- return BkupParamGet(id_it->second.c_str(), result); // LCOV_EXCL_BR_LINE 11:except,C++ STL
-}
-
-void *BkupParamSetOpt(const char *item_name, void *opt) {
- if (g_backup_params == NULL) { // LCOV_EXCL_BR_LINE 6:g_backup_params will not be NULL
- // LCOV_EXCL_START 6:g_backup_params will not be NULL
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Uninitialize call");
- return reinterpret_cast<void *>((-1));
- // LCOV_EXCL_STOP 6:g_backup_params will not be NULL
- }
-
- ItemTable::iterator item_it = g_backup_params->item_table.find(item_name); // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (item_it == g_backup_params->item_table.end()) { // LCOV_EXCL_BR_LINE 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return reinterpret_cast<void *>((-1)); // LCOV_EXCL_LINE 6:double check
- }
-
- // LCOV_EXCL_BR_START 11:unexpected branch
- return __sync_val_compare_and_swap(&item_it->second.opt, NULL, opt); // NOLINT(readability/nolint) Supplied by gcc
- // LCOV_EXCL_BR_STOP 11:unexpected branch
-}
diff --git a/nsframework/backup_manager/server/src/bkup_process.cpp b/nsframework/backup_manager/server/src/bkup_process.cpp
deleted file mode 100755
index f8032ef..0000000
--- a/nsframework/backup_manager/server/src/bkup_process.cpp
+++ /dev/null
@@ -1,2497 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dirent.h>
-#include <fcntl.h>
-#include <libgen.h>
-#include <inttypes.h>
-#include <mqueue.h>
-#include <agl_thread.h>
-#include <poll.h>
-#include <signal.h>
-#include <sys/epoll.h>
-#include <sys/eventfd.h>
-#include <sys/prctl.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <sys/timerfd.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <native_service/frameworkunified_framework_if.h>
-#include <system_service/ss_system_manager_if.h>
-#include <nv_hal.h>
-#include <aglpath.h>
-#include <cerrno>
-#include <cstdio>
-#include <map>
-#include <set>
-#include <string>
-#include <utility>
-#include "bkup_api.h"
-#include "bkup_backupmanagerlog.h"
-#include "bkup_param.h"
-#include "bkup_crc32.h"
-#include "bkup_util.h"
-
-#define BKUP_THREAD_NAND "NS_BkupNAND"
-#define BKUP_THREAD_DELAY "NS_BkupDelay"
-const char kBkupPrexixEncryption[] = "ENC_";
-const size_t kBkupPrexixEncryptionSize = 4;
-
-typedef void (* signal_handler)(int);
-extern void SignalHandlerFuncForMsgHandleThread(int signum);
-extern pthread_t g_delay_thread_id;
-extern pthread_t g_nand_thread_id;
-
-#define MAX_FD_EPOLL 8
-
-/**
- * internal state
- */
-typedef enum {
- BKUP_STATE_INIT = 0,
- BKUP_STATE_NORMAL,
- BKUP_STATE_TERM,
-} bkup_state_t;
-static bkup_state_t g_bkup_internal_state = BKUP_STATE_INIT;
-
-
-/**
- * delay thread command
- */
-typedef enum {
- BKUP_DELAY_CMD_TERM = 0,
- BKUP_DELAY_CMD_PRE_ACCOFF,
- BKUP_DELAY_CMD_REGIST,
-} bkup_delay_cmd_t;
-
-
-/**
- * inter thread communication message
- */
-typedef union {
- struct {
- char client_name[16];
- uint32_t seq_id;
- char *rcv_buf;
- int rcv_size;
- } nand;
- struct {
-
-// bool terminate;
- bkup_delay_cmd_t cmd;
-
- int event_fd;
- char item_name[64];
- } delay;
-} bkup_itc_message_t;
-
-/**
- * reference response function
- */
-typedef struct {
- int (*set_response)(void *, void *, int, EFrameworkunifiedStatus);
- void *opt;
-} bkup_response_t;
-
-/**
- * response MQ map(TLS)
- */
-typedef std::map<std::string, HANDLE> g_bkup_response_mq_t;
-static __thread g_bkup_response_mq_t *g_bkup_response_mq;
-
-/**
- * NAND thread itc MQ
- */
-static mqd_t g_bkup_nand_mqd = -1;
-
-/**
- * Delay thread itc MQ
- */
-static mqd_t g_bkup_delay_mqd = -1;
-
-static int g_bkup_nand_tid;
-static int g_bkup_delay_tid;
-
-/**
- * prototype declared
- */
-static void BkupApilog(bkup_response_t *response, enum NvHalMedia current_media,
- bkup_protocol_header_t *hdr,
- bkup_query_result_t *query_result, char *buf,
- uint32_t crc32, EFrameworkunifiedStatus ret_value);
-
-/**
- * check status of file spicefied by path
- */
-static int BkupCheckStatFromNv(enum NvHalMedia media, const char *path,
- int check_size);
-
-/**
- * rwlock unlock
- */
-static inline void BkupRwlockUnlock(pthread_rwlock_t *rwlock, const char *path);
-
-/**
- * rwlock read lock
- */
-static inline void BkupRwlockRdlock(pthread_rwlock_t *rwlock, const char *path);
-
-/**
- * rwlock write lock
- */
-static inline void BkupRwlockWrlock(pthread_rwlock_t *rwlock, const char *path);
-
-/**\ingroup CheckNv
- * \~english @par Brief
- * Check the data stored on the storage device and check the data size.
- * \~english @param [in] media
- * enum NvHalMedia - Media type
- * \~english @param [in] filename
- * const char* - Concatenated string of "category name/item name"
- * \~english @param [in] size
- * uint32_t - Data size to be checked
- * \~english @retval eFrameworkunifiedStatusOK OK
- * \~english @retval eFrameworkunifiedStatusFileLoadError The file does not exist.
- * \~english @retval eFrameworkunifiedStatusAccessError Check size failed
- * \~english @retval eFrameworkunifiedStatusInvldParam Parameter error
- * \~english @par Preconditons
- * - none
- * \~english @par Conditions of processing failure
- * - If the media (media) specified in the parameter is smaller than NVHALMEDIA_CACHEDRAM or larger than NVHALMEDIA_NAND.\n
- * [eFrameworkunifiedStatusInvldParam]
- * - The identifier specified in the arguments is a NULL.[eFrameworkunifiedStatusInvldParam]
- * - When the size specified in the arguments is 0.[eFrameworkunifiedStatusInvldParam]
- * - Internal I/O handling errors (lstat).[eFrameworkunifiedStatusFileLoadError]
- * - The size specified by the parameter does not correspond to the file size specified by the identifier.[eFrameworkunifiedStatusAccessError]
- */
-static EFrameworkunifiedStatus CheckNv(enum NvHalMedia media, const char *filename, uint32_t size) {
- uint32_t size_;
- EFrameworkunifiedStatus ret;
- ret = GetSizeNv(media, filename, &size_); // Get size
- if (ret != eFrameworkunifiedStatusOK) { // If the GetSizeNv fails, the error is returned unchanged.
- return ret;
- }
- if (size_ != size) { // Returns eFrameworkunifiedStatusAccessError if the sizes do not match.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "invalid size:%d\n", size);
- return eFrameworkunifiedStatusAccessError;
- }
- return eFrameworkunifiedStatusOK; // Returns eFrameworkunifiedStatusOK if size matches
-}
-
-
-
-/**
- * read file spicefied by id
- *
- * \retval 0 read success
- * \retval -1 crc error
- * \retval -2 read failed
- * \retval -3 invalid param
- */
-static int32_t BkupBufferReadFromNv(const enum NvHalMedia media, const char* path,
- char *buf, size_t size, uint32_t *crc32) {
- int32_t ret = 0;
- EFrameworkunifiedStatus nv_ret = eFrameworkunifiedStatusFail;
- const uint32_t size_all = static_cast<uint32_t>(size + sizeof(uint32_t));
- void* buffer = MAP_FAILED;
- uint8_t* read_buffer = NULL;
- uint32_t calc_crc32, get_crc32;
-
- if (path == NULL) { // LCOV_EXCL_BR_LINE 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return -1; // LCOV_EXCL_LINE 6:double check
- }
-
- if (!buf) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "buf is NULL");
- return -1;
- }
- if ((buffer = BkupAnonMmap(size_all)) == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:map failed");
- ret = -1;
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
-
- read_buffer = reinterpret_cast<uint8_t*>(buffer);
- nv_ret = ReadNv(media, path, read_buffer, size_all);
- if (nv_ret == eFrameworkunifiedStatusOK) {
- const void* const src_buffer = reinterpret_cast<void *>(read_buffer + size);
- void* dest_buffer = reinterpret_cast<void *>(&get_crc32);
- memcpy(dest_buffer, src_buffer, sizeof(uint32_t));
- calc_crc32 = BkupCrc32(read_buffer, size); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (get_crc32 != calc_crc32) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "invalid crc(%s):%#x:%#x", path, get_crc32, calc_crc32);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- ret = -1;
- goto exit;
- }
- if (crc32 != NULL) {
- *crc32 = get_crc32;
- }
- dest_buffer = reinterpret_cast<void *>(buf);
- memcpy(dest_buffer, buffer, size);
- } else if (nv_ret == eFrameworkunifiedStatusInvldParam) { // LCOV_EXCL_BR_LINE 6:double check
- ret = -3;
- } else {
- ret = -2;
- }
-exit:
- if (buffer != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- munmap(buffer, size_all);
- }
-
- return ret;
-}
-
-/*
- * buffer -> file write
- */
-static int32_t BkupBufferWriteToNv(const enum NvHalMedia media, const char* path,
- char *buf, size_t size, uint32_t *crc32) {
- if (buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "buf is NULL");
- return eFrameworkunifiedStatusNullPointer;
- }
- int32_t ret = 0;
- EFrameworkunifiedStatus nv_ret = eFrameworkunifiedStatusFail;
- const uint32_t size_all = static_cast<uint32_t>(size + sizeof(uint32_t));
- char *buffer = reinterpret_cast<char *>(MAP_FAILED);
- uint32_t calc_crc32;
-
- if ((buffer = BkupAnonMmap(size_all)) == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- ret = -1;
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
-
- calc_crc32 = BkupCrc32(buf, size); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (crc32) {
- *crc32 = calc_crc32;
- }
-
- memcpy(buffer, buf, size);
- memcpy(buffer + size, &calc_crc32, sizeof(uint32_t));
-
- nv_ret = WriteNv(media, path, reinterpret_cast<uint8_t *>(buffer), size_all);
- if (nv_ret != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "write to nv(%s):%s", path, strerror(ret));
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- ret = -1;
- }
-
-exit:
- if (buffer != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- munmap(buffer, size_all);
- }
-
- return ret;
-}
-
-/**
- * inter media copy
- */
-static int BkupMediaCopyFromNv(char *category_name, const char *item_name,
- enum NvHalMedia src, enum NvHalMedia dst,
- pthread_rwlock_t *src_rwlock,
- pthread_rwlock_t *dst_rwlock) {
- if (category_name == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "category_name is NULL");
- return eFrameworkunifiedStatusNullPointer;
- }
-
- if (item_name == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "item_name is NULL");
- return eFrameworkunifiedStatusNullPointer;
- }
- int ret = -1;
- uint32_t crc32;
- char id_path[FILENAME_MAX] = {0};
- char *buffer = reinterpret_cast<char *>(MAP_FAILED);
-
- bkup_query_result_t query_result;
- BkupParamGet(item_name, &query_result); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- char prefix_name[kBkupPrexixEncryptionSize + 1] = {0};
- if (query_result.encrypt != false) {
- strncpy(prefix_name, kBkupPrexixEncryption, kBkupPrexixEncryptionSize);
- }
- snprintf(id_path, FILENAME_MAX, "%s/%s%s", category_name, prefix_name, item_name);
-
- if ((buffer = BkupAnonMmap(query_result.size)) == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:map failed");
- ret = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
-
- BkupRwlockRdlock(src_rwlock, id_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if ((ret = BkupBufferReadFromNv(src, id_path, buffer, query_result.size,
- &crc32)) >= 0) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupRwlockWrlock(dst_rwlock, id_path);
- ret = BkupBufferWriteToNv(dst, id_path, buffer, query_result.size, &crc32);
- BkupRwlockUnlock(dst_rwlock, id_path);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
- BkupRwlockUnlock(src_rwlock, id_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
-exit:
- if (buffer != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- munmap(buffer, query_result.size);
- }
-
- return ret;
-}
-
-/**
- * make backup path
- */
-static int BkupMakeBkupPathToNvId(const char *category_name,
- const char *item_name, char **path_buf,
- int buf_size) {
- int ret = -1;
- char prefix_name[kBkupPrexixEncryptionSize + 1] = {0};
-
- if ((*path_buf = BkupAnonMmap(buf_size)) == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
- bkup_query_result_t query_result;
- if (BkupParamGet(item_name, &query_result) < 0) { // LCOV_EXCL_BR_LINE 6:Excluded due to checking by upper-level function
- // LCOV_EXCL_START 6:Excluded due to checking by upper-level function
- AGL_ASSERT_NOT_TESTED();
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid item_name:%s", item_name);
- goto exit;
- // LCOV_EXCL_STOP 6:Excluded due to checking by upper-level function
- }
- if (query_result.encrypt != false) {
- strncpy(prefix_name, kBkupPrexixEncryption, kBkupPrexixEncryptionSize);
- }
- snprintf(*path_buf, static_cast<size_t>(buf_size), "%s/%s%s",
- category_name, prefix_name, item_name);
- ret = 0;
-
-exit:
- return ret;
-}
-
-/**
- * delete data
- */
-static int BkupDeleteDataFromNv(const enum NvHalMedia media, const char* const path) {
- int ret = 0;
- EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK;
-
- if (path == NULL) { // LCOV_EXCL_BR_LINE 6:Excluded due to checking by upper-level function
- // LCOV_EXCL_START 6:Excluded due to checking by upper-level function
- AGL_ASSERT_NOT_TESTED();
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "path is NULL");
- ret = -1;
- return ret;
- // LCOV_EXCL_STOP 6:Excluded due to checking by upper-level function
- }
- const size_t path_size = static_cast<size_t>(std::string(path).length());
- if (path_size > FILENAME_MAX) { // LCOV_EXCL_BR_LINE 6:Excluded due to checking by upper-level function
- // LCOV_EXCL_START 6:Excluded due to checking by upper-level function
- AGL_ASSERT_NOT_TESTED();
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "path size error");
- ret = -1;
- return ret;
- // LCOV_EXCL_STOP 6:Excluded due to checking by upper-level function
- }
-
- uint32_t size = 0;
- e_status = GetSizeNv(media, path, &size);
- if (e_status == eFrameworkunifiedStatusFileLoadError) {
- // If the file does not exist, deleet it successfully
- return ret;
- } else if (e_status != eFrameworkunifiedStatusOK) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "GetSizeNv e_status:%d\n", e_status);
- ret = -1;
- return ret;
- } else {
- // no proc
- }
-
- e_status = DeleteNv(media, path);
- if (e_status != eFrameworkunifiedStatusOK) {
- ret = -1;
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "DeleteNv e_status:%d\n", e_status);
- }
- return ret;
-}
-
-/**
- * get rwlock
- */
-static pthread_rwlock_t *BkupGetRwlock(const char *item_name,
- enum NvHalMedia media,
- bkup_query_result_t *query_result) {
- int ret;
- pthread_rwlock_t *rwlock, *org_rwlock;
- pthread_rwlockattr_t attr;
-
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "query_result is NULL");
- return NULL;
- }
-
- if (media != NVHALMEDIA_BACKUPDRAM || query_result->backup_dram == false || query_result->nand == false) {
- return NULL;
- }
- // backupDram && nand
- if (query_result->opt != NULL) {
- return reinterpret_cast<pthread_rwlock_t *>(query_result->opt);
- }
-
- if ((ret = pthread_rwlockattr_init(&attr)) != 0) { // LCOV_EXCL_BR_LINE 5:pthread_rwlockattr_init's error case.
- // LCOV_EXCL_START 5:pthread_rwlockattr_init's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_rwlockattr_init:%s", strerror(ret));
- return NULL;
- // LCOV_EXCL_STOP 5:pthread_rwlockattr_init's error case.
- }
-
- // LCOV_EXCL_BR_START 5:pthread_rwlockattr_setkind_np's error case.
- if ((ret = pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)) != 0) {
- // LCOV_EXCL_BR_STOP 5:pthread_rwlockattr_setkind_np's error case.
- // LCOV_EXCL_START 5:pthread_rwlockattr_setkind_np's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_rwlockattr_setkind_np:%s", strerror(ret));
- return NULL;
- // LCOV_EXCL_STOP 5:pthread_rwlockattr_setkind_np's error case.
- }
-
- // LCOV_EXCL_BR_START 5:malloc's error case.
- if ((rwlock = reinterpret_cast<pthread_rwlock_t *>(malloc(sizeof(pthread_rwlock_t)))) == NULL) {
- // LCOV_EXCL_BR_STOP 5:malloc's error case.
- // LCOV_EXCL_START 5:malloc's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "malloc failed");
- return NULL;
- // LCOV_EXCL_STOP 5:malloc's error case.
- }
-
- if ((ret = pthread_rwlock_init(rwlock, &attr)) != 0) { // LCOV_EXCL_BR_LINE 5:pthread_rwlock_init's error case.
- // LCOV_EXCL_START 5:pthread_rwlock_init's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_rwlock_init:%s", strerror(ret));
- free(rwlock);
- return NULL;
- // LCOV_EXCL_STOP 5:pthread_rwlock_init's error case.
- }
-
- // LCOV_EXCL_BR_START 11:unexpected branch
- org_rwlock = reinterpret_cast<pthread_rwlock_t *>(BkupParamSetOpt(item_name, rwlock));
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- if (org_rwlock == reinterpret_cast<void *>(-1)) { // LCOV_EXCL_BR_LINE 6:org_rwlock will not be -1
- // LCOV_EXCL_START 6:org_rwlock will not be -1
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid item_name:%s", item_name != 0 ? item_name : NULL);
- free(rwlock);
- return NULL;
- // LCOV_EXCL_STOP 6:org_rwlock will not be -1
- } else if (org_rwlock != NULL) { // LCOV_EXCL_BR_LINE 5:gcc builtin function's error case
- // conflict
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- free(rwlock); // LCOV_EXCL_LINE 5:gcc builtin function's error case
- rwlock = org_rwlock; // LCOV_EXCL_LINE 5:gcc builtin function's error case
- }
-
- query_result->opt = rwlock;
- return rwlock;
-}
-
-/**
- * rwlock read lock
- */
-static inline void BkupRwlockRdlock(pthread_rwlock_t *rwlock, const char *path) {
- if (rwlock) {
- int ret;
- if ((ret = pthread_rwlock_rdlock(rwlock)) != 0) { // LCOV_EXCL_BR_LINE 5:pthread_rwlock_rdlock's error case.
- // LCOV_EXCL_START 5:pthread_rwlock_rdlock's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_rwlock_rdlock(%s):%s", path, strerror(ret));
- // LCOV_EXCL_STOP 5:pthread_rwlock_rdlock's error case.
- }
- }
-}
-
-/**
- * rwlock write lock
- */
-static inline void BkupRwlockWrlock(pthread_rwlock_t *rwlock, const char *path) {
- if (rwlock) {
- int ret;
- if ((ret = pthread_rwlock_wrlock(rwlock)) != 0) { // LCOV_EXCL_BR_LINE 5:pthread_rwlock_wrlock's error case.
- // LCOV_EXCL_START 5:pthread_rwlock_wrlock's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_rwlock_wrlock(%s):%s", path, strerror(ret));
- // LCOV_EXCL_STOP 5:pthread_rwlock_wrlock's error case.
- }
- }
-}
-
-/**
- * rwlock unlock
- */
-static inline void BkupRwlockUnlock(pthread_rwlock_t *rwlock, const char *path) {
- if (rwlock) {
- int ret;
- if ((ret = pthread_rwlock_unlock(rwlock)) != 0) { // LCOV_EXCL_BR_LINE 5:pthread_rwlock_unlock's error case.
- // LCOV_EXCL_START 5:pthread_rwlock_unlock's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "pthread_rwlock_unlock(%s):%s", path, strerror(ret));
- // LCOV_EXCL_STOP 5:pthread_rwlock_unlock's error case.
- }
- }
-}
-
-/**
- * inter thread communication MQ open
- */
-static mqd_t BkupItcMqopen(const char *mq_name, int flags) {
- struct mq_attr attr;
-
- if (mq_name == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "mq_name is NULL");
- return -1;
- }
-
- attr.mq_flags = 0;
- attr.mq_maxmsg = 256;
- attr.mq_msgsize = sizeof(bkup_itc_message_t);
-
- return mq_open(mq_name, flags, 0660, &attr);
-}
-
-/**
- * write & rename
- */
-static int BkupWriteRename(const char *category_name, const char *item_name,
- enum NvHalMedia media, char *buf, int size,
- pthread_rwlock_t *rwlock) {
- int ret = -1;
- char *full_path = reinterpret_cast<char *>(MAP_FAILED);
-
- // LCOV_EXCL_BR_START 5:mmap's error case.
- if (BkupMakeBkupPathToNvId(category_name, item_name, &full_path, FILENAME_MAX) < 0) {
- // LCOV_EXCL_BR_STOP 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
-
- BkupRwlockWrlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (BkupBufferWriteToNv(media, full_path, buf, size, NULL) < 0) {
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- goto exit;
- }
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- ret = size;
-
-exit:
- if (full_path != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- munmap(full_path, FILENAME_MAX);
- }
- return ret;
-}
-
-/**
- * stat check
- *
- * \retval 0 file exists
- * \retval -1 file not exists
- * \retval -2 size error
- */
-static int BkupCheckStatFromNv(enum NvHalMedia media, const char *path,
- int check_size) {
- uint32_t size = check_size + static_cast<uint32_t>(sizeof(uint32_t));
- const EFrameworkunifiedStatus ret = CheckNv(media, path, size);
-
- if (path == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "path is NULL");
- return -1;
- }
-
- if (eFrameworkunifiedStatusOK == ret) {
- return 0;
- } else if (eFrameworkunifiedStatusAccessError == ret) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "CheckNv e_status:%d", ret);
- return -2;
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "CheckNv e_status:%d", ret);
- return -1;
- }
-}
-
-/**
- * media stat
- */
-static int BkupMediaStat(const char *category_name, const char *item_name, enum NvHalMedia src, int size) {
- int ret = -1;
- char *path = reinterpret_cast<char *>(MAP_FAILED);
-
- // LCOV_EXCL_BR_START 5:mmap's error case.
- if (BkupMakeBkupPathToNvId(category_name, item_name, &path, FILENAME_MAX) < 0) {
- // LCOV_EXCL_BR_STOP 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
- ret = BkupCheckStatFromNv(src, path, size); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
-exit:
- if (path != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- munmap(path, FILENAME_MAX);
- }
- return ret;
-}
-
-/**
- * stat check & read
- *
- * \retval 0 file exists
- * \retval -1 file not exists
- */
-static int BkupCheckStatRead(enum NvHalMedia current_media, const char *path,
- char *buf, int check_size, uint32_t *crc32,
- pthread_rwlock_t *rwlock) {
- int ret;
-
- if ((ret = BkupCheckStatFromNv(current_media, path, check_size)) < 0) {
- return ret;
- }
-
- BkupRwlockRdlock(rwlock, path);
-
- if (BkupBufferReadFromNv(current_media, path, buf, check_size, crc32) < 0) {
- BkupRwlockUnlock(rwlock, path);
- return -1;
- }
-
- BkupRwlockUnlock(rwlock, path);
- return 0;
-}
-
-/**
- * valid check
- *
- * \retval 0 file invalid & do nothing
- * \retval -1 file invalid but create 0 fill file
- * \retval 1 file valid
- */
-static int BkupCheckRead(const char *path, enum NvHalMedia current_media,
- bkup_protocol_command_t command, char *rcv_buf,
- char *read_buf, uint32_t *crc32,
- bkup_query_result_t *query_result,
- pthread_rwlock_t *rwlock) {
- int ret = -1;
-
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return 0;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return 0;
- }
-
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
-
- if (BkupCheckStatRead(current_media, path, read_buf, query_result->size, crc32, rwlock) < 0) {
- // file not exists
- if (current_media == NVHALMEDIA_NAND || query_result->nand == false) {
- goto exit;
- } else {
- if (command == BKUP_CMD_READ) {
- /*
- * Read
- */
- if (BkupCheckStatFromNv(NVHALMEDIA_NAND, path, query_result->size) == 0) {
- // do nothing
- ret = 0;
- } else {
- // take preference BackupDRAM or CacheDRAM
- ret = -1;
- }
- } else {
- /*
- * Write/Fill
- */
- pthread_rwlock_t *nand_rwlock = BkupGetRwlock(hdr->item_name, NVHALMEDIA_NAND, query_result);
- if (BkupCheckStatRead(NVHALMEDIA_NAND, path, read_buf, query_result->size, NULL, nand_rwlock) == 0) {
- // write back cache
- if (BkupWriteRename(query_result->category_name, hdr->item_name,
- current_media, read_buf, query_result->size,
- rwlock) >= 0) {
- ret = 1;
- } else {
- // copy error, do nothing
- ret = 0;
- }
- } else {
- // take preference BackupDRAM or CacheDRAM
- ret = -1;
- }
- }
- goto exit;
- }
- }
- ret = 1;
-exit:
- return ret;
-}
-
-/**
- * read command
- */
-static int BkupCmdRead(bkup_response_t *response, enum NvHalMedia current_media,
- char *rcv_buf, bkup_query_result_t *query_result) {
- int ret = -1;
- if (response == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "response is NULL");
- return -1;
- }
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return -1;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return -1;
- }
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *rwlock = BkupGetRwlock(hdr->item_name, current_media, query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- char *full_path = reinterpret_cast<char *>(MAP_FAILED);
- char *buf = reinterpret_cast<char *>(MAP_FAILED);
- size_t buf_size = 0;
- uint32_t crc32 = 0;
- EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK;
-
- // LCOV_EXCL_BR_START 5:mmap's error case.
- if (BkupMakeBkupPathToNvId(query_result->category_name, hdr->item_name, &full_path, FILENAME_MAX) < 0) {
- // LCOV_EXCL_BR_STOP 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- e_status = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
-
- if ((buf = BkupAnonMmap(query_result->size)) == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5:mmap's error case.
- // LCOV_EXCL_START 5:mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- e_status = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5:mmap's error case.
- }
- buf_size = query_result->size;
-
- ret = BkupCheckRead(full_path, current_media, hdr->command, rcv_buf, buf,
- &crc32, query_result, rwlock); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (ret == -1) {
- // return all 0
- ret = hdr->size;
- goto exit;
- } else if (ret == 0) {
- // do nothing
- goto exit;
- }
-
- // success
- ret = hdr->size;
-
- // caching to memory
- if (current_media == NVHALMEDIA_NAND) {
- if (query_result->cache_dram) {
- if (BkupMediaStat(query_result->category_name, hdr->item_name,
- NVHALMEDIA_CACHEDRAM, query_result->size) < 0) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *dst_rwlock =
- BkupGetRwlock(hdr->item_name, NVHALMEDIA_CACHEDRAM, query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- BkupWriteRename(query_result->category_name, hdr->item_name,
- NVHALMEDIA_CACHEDRAM, buf, query_result->size,
- dst_rwlock); // LCOV_EXCL_BR_LINE 11:unexpected branch
- }
- }
- if (query_result->backup_dram) {
- if (BkupMediaStat(query_result->category_name, hdr->item_name,
- NVHALMEDIA_BACKUPDRAM, query_result->size) < 0) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *dst_rwlock =
- BkupGetRwlock(hdr->item_name, NVHALMEDIA_BACKUPDRAM, query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- BkupWriteRename(query_result->category_name, hdr->item_name,
- NVHALMEDIA_BACKUPDRAM, buf, query_result->size,
- dst_rwlock); // LCOV_EXCL_BR_LINE 11:unexpected branch
- }
- }
- }
-
-exit:
- if (ret != 0 && buf != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupApilog(response, current_media, hdr, query_result, buf, crc32, e_status);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((*response->set_response)(response->opt, buf + hdr->offset, hdr->size, e_status) < 0) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- ret = -1; // LCOV_EXCL_LINE 4: NSFW error case
- }
- }
-
- if (full_path != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(full_path, FILENAME_MAX);
- }
- if (buf != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(buf, buf_size);
- }
- return ret;
-}
-
-/**
- * write command
- */
-static int BkupCmdWrite(bkup_response_t *response,
- enum NvHalMedia current_media, char *rcv_buf,
- bkup_query_result_t *query_result) {
- int ret = -1;
-
- if (response == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "response is NULL");
- return -1;
- }
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return -1;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return -1;
- }
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *rwlock = BkupGetRwlock(hdr->item_name, current_media, query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- char *full_path = reinterpret_cast<char *>(MAP_FAILED);
- char *buf = reinterpret_cast<char *>(MAP_FAILED);
- char *header = NULL;
- uint32_t crc32 = 0;
- int buf_size = 0;
-
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if (BkupMakeBkupPathToNvId(query_result->category_name, hdr->item_name, &full_path, FILENAME_MAX) < 0) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- goto exit; // LCOV_EXCL_LINE 5: mmap's error case.
- }
-
- if (hdr->offset != 0 || hdr->size != (uint32_t)query_result->size) {
- /*
- * partial write
- */
- if ((buf = BkupAnonMmap(query_result->size)) == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- buf_size = query_result->size;
-
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupCheckRead(full_path, current_media, hdr->command, rcv_buf, buf, NULL, query_result, rwlock);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- if (ret == 0) {
- // do nothing
- goto exit;
- }
-
- header = buf;
- memcpy(buf + hdr->offset, rcv_buf + sizeof(bkup_protocol_header_t), hdr->size);
- BkupRwlockWrlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (BkupBufferWriteToNv(current_media, full_path, buf, query_result->size, &crc32) < 0) {
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- goto exit;
- }
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- } else {
- /*
- * whole write
- */
- header = rcv_buf + sizeof(bkup_protocol_header_t);
- BkupRwlockWrlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (BkupBufferWriteToNv(current_media, full_path,
- rcv_buf + sizeof(bkup_protocol_header_t), hdr->size, &crc32) < 0) {
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- goto exit;
- }
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- }
-
- // success
- ret = hdr->size;
-
-exit:
- EFrameworkunifiedStatus e_status = ret < 0 ? eFrameworkunifiedStatusFail : eFrameworkunifiedStatusOK;
- if (current_media == NVHALMEDIA_NAND) {
- if (query_result->cache_dram == false && query_result->backup_dram == false) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupApilog(response, current_media, hdr, query_result, header, crc32, e_status);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
- if ((*response->set_response)(response->opt, NULL, 0, e_status) < 0) { // LCOV_EXCL_BR_LINE 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- ret = -1; // LCOV_EXCL_LINE 4: NSFW error case
- }
- } else {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupApilog(response, current_media, hdr, query_result, header, crc32, e_status);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
-
- if (buf != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(buf, buf_size);
- }
- if (full_path != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(full_path, FILENAME_MAX);
- }
- return ret;
-}
-
-/**
- * fill command
- */
-static int BkupCmdFill(bkup_response_t *response, enum NvHalMedia current_media,
- char *rcv_buf, bkup_query_result_t *query_result) {
- int ret = -1;
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *rwlock = BkupGetRwlock(hdr->item_name, current_media, query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- char *full_path = reinterpret_cast<char *>(MAP_FAILED);
- char *buf = reinterpret_cast<char *>(MAP_FAILED);
- uint32_t crc32 = 0;
-
- if (response == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "response is NULL");
- return -1;
- }
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return -1;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return -1;
- }
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if (BkupMakeBkupPathToNvId(query_result->category_name, hdr->item_name, &full_path, FILENAME_MAX) < 0) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- goto exit; // LCOV_EXCL_LINE 5: mmap's error case.
- }
-
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if ((buf = BkupAnonMmap(query_result->size)) == MAP_FAILED) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
-
- if (hdr->offset != 0 || hdr->size != (uint32_t)query_result->size) {
- /*
- * partial fill
- */
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupCheckRead(full_path, current_media, hdr->command, rcv_buf, buf, NULL, query_result, rwlock);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- if (ret == 0) {
- // do nothing
- goto exit;
- }
- }
-
- memset(buf + hdr->offset, hdr->fill_patern, hdr->size);
- BkupRwlockWrlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (BkupBufferWriteToNv(current_media, full_path, buf, query_result->size, &crc32) < 0) {
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
- goto exit;
- }
- BkupRwlockUnlock(rwlock, full_path); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- // success
- ret = hdr->size;
-
-exit:
- EFrameworkunifiedStatus e_status = ret < 0 ? eFrameworkunifiedStatusFail : eFrameworkunifiedStatusOK;
- if (current_media == NVHALMEDIA_NAND) {
- if (query_result->cache_dram == false && query_result->backup_dram == false) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupApilog(response, current_media, hdr, query_result, buf, crc32, e_status);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
- if ((*response->set_response)(response->opt, NULL, 0, e_status) < 0) { // LCOV_EXCL_BR_LINE 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- ret = -1; // LCOV_EXCL_LINE 4: NSFW error case
- }
- } else {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupApilog(response, current_media, hdr, query_result, buf, crc32, e_status);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
-
- if (buf != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(buf, query_result->size);
- }
- if (full_path != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(full_path, FILENAME_MAX);
- }
- return ret;
-}
-
-/**
- * copy command
- */
-static int BkupCmdCopy(bkup_response_t *response, enum NvHalMedia current_media,
- char *rcv_buf, bkup_query_result_t *query_result) {
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return -1;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return -1;
- }
- bkup_protocol_header_t *hdr =
- reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- pthread_rwlock_t *src_rwlock =
- BkupGetRwlock(hdr->item_name, hdr->src_media, query_result);
- pthread_rwlock_t *dst_rwlock =
- BkupGetRwlock(hdr->item_name, current_media, query_result);
-
- int ret = BkupMediaCopyFromNv(query_result->category_name, hdr->item_name, hdr->src_media, current_media, src_rwlock,
- dst_rwlock);
-
- if (response == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "response is NULL");
- return -1;
- }
-
- if (current_media == NVHALMEDIA_NAND) {
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((*response->set_response)(response->opt, NULL, 0, ret < 0 ? eFrameworkunifiedStatusFail : eFrameworkunifiedStatusOK) < 0) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- ret = -1; // LCOV_EXCL_LINE 4: NSFW error case
- }
- }
- return ret;
-}
-
-/**
- * check command
- */
-static int BkupCmdCheck(bkup_response_t *response,
- enum NvHalMedia current_media, char *rcv_buf,
- bkup_query_result_t *query_result) {
- int ret = 0;
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- char *full_path = reinterpret_cast<char *>(MAP_FAILED);
-
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return -1;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return -1;
- }
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if (BkupMakeBkupPathToNvId(query_result->category_name, hdr->item_name, &full_path, FILENAME_MAX) < 0) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- ret = -3;
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- ret = BkupCheckStatFromNv(current_media, full_path, query_result->size); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
-exit:
- if (full_path != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- munmap(full_path, FILENAME_MAX);
- }
- return ret;
-}
-
-/**
- * delete command
- */
-static int BkupCmdDeleteData(bkup_response_t* const response,
- const enum NvHalMedia current_media,
- char* const rcv_buf,
- bkup_query_result_t* const query_result) {
- int ret = -1;
- char *full_path = NULL;
- bkup_protocol_header_t* hdr = reinterpret_cast<bkup_protocol_header_t*>(NULL);
- pthread_rwlock_t* rwlock = reinterpret_cast<pthread_rwlock_t*>(NULL);
- if ((response == NULL) || (rcv_buf == NULL) || (query_result == NULL)) { // LCOV_EXCL_BR_LINE 6:Excluded as no NULL is currently passed
- // LCOV_EXCL_START 6:Excluded as no NULL is currently passed
- AGL_ASSERT_NOT_TESTED();
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Resp or Buf or Query is NULL");
- goto exit;
- // LCOV_EXCL_STOP 6:Excluded as no NULL is currently passed
- }
- hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- rwlock = BkupGetRwlock(hdr->item_name, current_media, query_result);
- if (BkupMakeBkupPathToNvId(query_result->category_name, hdr->item_name, &full_path, FILENAME_MAX) < 0) { // LCOV_EXCL_BR_LINE 6:Excluded due to checking by upper-level function
- // LCOV_EXCL_START 6:Excluded due to checking by upper-level function
- AGL_ASSERT_NOT_TESTED();
- goto exit;
- // LCOV_EXCL_STOP 6:Excluded due to checking by upper-level function
- }
- BkupRwlockWrlock(rwlock, full_path);
- ret = BkupDeleteDataFromNv(current_media, full_path);
- if (ret != 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "BkupDeleteDataFromNv Error");
- }
- BkupRwlockUnlock(rwlock, full_path);
-
-exit:
- if ((response != NULL) && (query_result != NULL) && (hdr != NULL)) { // LCOV_EXCL_BR_LINE 6:Excluded as no NULL is currently passed
- EFrameworkunifiedStatus e_status = (ret < 0) ? eFrameworkunifiedStatusFail : eFrameworkunifiedStatusOK;
- if (current_media == NVHALMEDIA_NAND) {
- if ((query_result->cache_dram == false) && (query_result->backup_dram == false)) {
- BkupApilog(response, current_media, hdr, query_result, NULL, 0, e_status);
- }
- if ((*response->set_response)(response->opt, NULL, 0, e_status) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Response Error");
- ret = -1;
- }
- } else {
- BkupApilog(response, current_media, hdr, query_result, NULL, 0, e_status);
- }
- }
-
- if (full_path != NULL) { // LCOV_EXCL_BR_LINE 6:Excluded because checked by BkupMakeBkupPathToNvId()
- munmap(full_path, FILENAME_MAX);
- }
- return ret;
-}
-
-/**
- * common file handler
- */
-static int BkupHandlerFile(bkup_response_t *response,
- enum NvHalMedia current_media, char *rcv_buf,
- bkup_query_result_t *query_result) {
- int ret = 0;
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
-
- if (rcv_buf == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "rcv_buf is NULL");
- return -1;
- }
-
- switch (hdr->command) { // LCOV_EXCL_BR_LINE 6:double check
- case BKUP_CMD_READ:
- ret = BkupCmdRead(response, current_media, rcv_buf, query_result);
- break;
-
- case BKUP_CMD_WRITE:
- ret = BkupCmdWrite(response, current_media, rcv_buf, query_result);
- break;
-
- case BKUP_CMD_FILL:
- ret = BkupCmdFill(response, current_media, rcv_buf, query_result);
- break;
-
- case BKUP_CMD_COPY_INNER:
- ret = BkupCmdCopy(response, current_media, rcv_buf, query_result);
- break;
-
- case BKUP_CMD_DELETE:
- ret = BkupCmdDeleteData(response, current_media, rcv_buf, query_result);
- break;
-
- default:
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- break; // LCOV_EXCL_LINE 6:double check
- }
- return ret;
-}
-
-/**
- * Main's response
- */
-static int BkupSetResponseNsfw(void *opt, void *buf, int size, EFrameworkunifiedStatus ret_value) {
- EFrameworkunifiedStatus e_status;
-
- if (buf != NULL) { // LCOV_EXCL_BR_LINE 6:double check
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((e_status = FrameworkunifiedSetSyncResponseData((HANDLE)opt, buf, size)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedSetSyncResponseData:%d", e_status);
- return -1;
- // LCOV_EXCL_STOP 4: NSFW error case
- }
- }
- return 0;
-}
-
-/**
- * write apilog
- */
-static void BkupApilog(bkup_response_t *response, enum NvHalMedia current_media,
- bkup_protocol_header_t *hdr,
- bkup_query_result_t *query_result, char *buf,
- uint32_t crc32, EFrameworkunifiedStatus ret_value) {
- const char *src;
- const char *cmd;
- char header[12] = "-- -- -- --";
- const char c[] = "0123456789abcdef";
-
- if (response == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "response is NULL");
- return;
- }
- if (hdr == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "hdr is NULL");
- return;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "query_result is NULL");
- return;
- }
- if (response->set_response == BkupSetResponseNsfw) {
- src = FrameworkunifiedGetMsgSrc((HANDLE)response->opt); // LCOV_EXCL_BR_LINE 11:unexpected branch
- } else {
- // LCOV_EXCL_BR_START 11:unexpected branch
- src = (reinterpret_cast<bkup_itc_message_t *>(response->opt))->nand.client_name;
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
-
- switch (hdr->command) { // LCOV_EXCL_BR_LINE 6:double check
- case BKUP_CMD_READ:
- cmd = "RD";
- break;
- case BKUP_CMD_WRITE:
- cmd = "WR";
- break;
- case BKUP_CMD_FILL:
- cmd = "FILL";
- break;
- case BKUP_CMD_READ_NUM:
- // LCOV_EXCL_START 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- cmd = "RDN";
- break;
- // LCOV_EXCL_STOP 6:double check
- case BKUP_CMD_SIZE_NUM:
- // LCOV_EXCL_START 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- cmd = "SZN";
- break;
- // LCOV_EXCL_STOP 6:double check
- case BKUP_CMD_DELETE:
- cmd = "DEL";
- break;
- default:
- // LCOV_EXCL_START 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- cmd = "UNKNOWN";
- break;
- // LCOV_EXCL_STOP 6:double check
- }
-
- if (buf) { // LCOV_EXCL_BR_LINE 6:double check
- int i;
- for (i = 0; i < 4; i++) {
- if (query_result->size > i) {
- header[i * 3] = c[*(buf + i) >> 4];
- header[i * 3 + 1] = c[*(buf + i) & 0xf];
- }
- }
- }
-
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ALSA, "", "%s/%s/%s/o:%d/s:%d/h:%s/c:%x/r:%d", src, cmd, hdr->item_name, hdr->offset, hdr->size,
- header, crc32, ret_value);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
-}
-
-/**
- * Tweak command
- */
-static int BkupTweakCommand(enum NvHalMedia current_media, char **rcv_buf,
- int *rcv_size, bkup_query_result_t *query_result) {
- int ret = -1;
- bkup_protocol_header_t update_hdr;
- bkup_protocol_header_t *hdr = reinterpret_cast<bkup_protocol_header_t *>(*rcv_buf);
-
- if (current_media == NVHALMEDIA_NAND) { // LCOV_EXCL_BR_LINE 6:current_media never will be NVHALMEDIA_NAND
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- ret = 0; // LCOV_EXCL_LINE 6:current_media never will be NVHALMEDIA_NAND
- goto exit; // LCOV_EXCL_LINE 6:current_media never will be NVHALMEDIA_NAND
- }
- if (rcv_size == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "rcv_size is NULL");
- return -1;
- }
- if (query_result == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "query_resul is NULL");
- return -1;
- }
-
- if ((hdr->command == BKUP_CMD_WRITE || hdr->command == BKUP_CMD_FILL) &&
- (hdr->offset != 0 || hdr->size != (uint32_t)query_result->size)) {
- // partial request
- if ((current_media == NVHALMEDIA_CACHEDRAM &&
- (query_result->nand || query_result->backup_dram)) ||
- (current_media == NVHALMEDIA_BACKUPDRAM && query_result->nand)) {
- memset(&update_hdr, 0, sizeof(update_hdr));
- BkupStrlcpy(update_hdr.item_name, hdr->item_name, sizeof(update_hdr.item_name));
- update_hdr.command = BKUP_CMD_COPY_INNER;
- update_hdr.src_media = current_media;
- munmap(*rcv_buf, *rcv_size);
- *rcv_size = 0;
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if ((*rcv_buf = BkupAnonMmap(sizeof(bkup_protocol_header_t))) == MAP_FAILED) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- *rcv_size = sizeof(bkup_protocol_header_t);
- memcpy(*rcv_buf, &update_hdr, sizeof(update_hdr));
- }
- }
- ret = 0;
-
-exit:
- return ret;
-}
-
-/**
- * Main callback handler
- */
-EFrameworkunifiedStatus BkupHandler(HANDLE h_app) {
- EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK;
- uint32_t rcv_size = 0;
- char *rcv_buf = NULL;
- bkup_protocol_header_t *hdr;
- bkup_query_result_t query_result;
- bool hold_rcv_buf = false;
- int ret = 0;
- bkup_response_t response_nsfw = {BkupSetResponseNsfw, h_app};
-
- if ((rcv_size = FrameworkunifiedGetMsgLength(h_app)) < sizeof(bkup_protocol_header_t)) { // LCOV_EXCL_BR_LINE 4: NSFW error case.
- // LCOV_EXCL_START 4: NSFW error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedGetMsgLength: size fail:%d", rcv_size);
- e_status = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 4: NSFW error case.
- }
-
- rcv_buf = reinterpret_cast<char *>(mmap(NULL, rcv_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0));
- if (rcv_buf == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- rcv_size = 0;
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap:%s", strerror(errno));
- e_status = eFrameworkunifiedStatusInvldParam;
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
-
- // LCOV_EXCL_BR_START 4: NSFW error case.
- if ((e_status = FrameworkunifiedGetMsgDataOfSize(h_app, rcv_buf, rcv_size, eSMRRelease)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case.
- // LCOV_EXCL_START 4: NSFW error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedGetMsgDataOfSize:%d", e_status);
- goto exit;
- // LCOV_EXCL_STOP 4: NSFW error case.
- }
-
- hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- if (hdr->command < 0 || hdr->command >= BKUP_CMD_MAX) { // LCOV_EXCL_BR_LINE 6:double check
- // LCOV_EXCL_START 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid command:%d", hdr->command);
- e_status = eFrameworkunifiedStatusInvldParam;
- goto exit;
- // LCOV_EXCL_STOP 6:double check
- }
-
- if (hdr->command == BKUP_CMD_READ_NUM || hdr->command == BKUP_CMD_SIZE_NUM) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- if (BkupParamGetNumid(hdr->num_id, &query_result, hdr->item_name, sizeof(hdr->item_name)) < 0) {
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", hdr->num_id);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- e_status = eFrameworkunifiedStatusInvldParam;
- goto exit;
- }
-
- if (hdr->command == BKUP_CMD_READ_NUM) {
- hdr->command = BKUP_CMD_READ;
- }
- } else {
- if (BkupParamGet(hdr->item_name, &query_result) < 0) { // LCOV_EXCL_BR_LINE 11:unexpected branch
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid item_name:%s", hdr->item_name != 0 ? hdr->item_name : NULL);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- e_status = eFrameworkunifiedStatusInvldParam;
- goto exit;
- }
- }
-
- if (hdr->command == BKUP_CMD_READ || hdr->command == BKUP_CMD_WRITE || hdr->command == BKUP_CMD_FILL) {
- if (hdr->size == 0) {
- // do nothing
- goto exit;
- }
- if (hdr->size + hdr->offset > (uint32_t)query_result.size) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid size+offset:%d+%d", hdr->size, hdr->offset);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- e_status = eFrameworkunifiedStatusInvldParam;
- goto exit;
- }
- }
-
- // LCOV_EXCL_BR_START 6: g_bkup_internal_state will not be BKUP_STATE_INIT
- if (g_bkup_internal_state == BKUP_STATE_INIT) {
- // LCOV_EXCL_BR_STOP 6: g_bkup_internal_state will not be BKUP_STATE_INIT
- // LCOV_EXCL_START 6: same as above
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- e_status = eFrameworkunifiedStatusErrOther;
- goto exit;
- // LCOV_EXCL_STOP 6: same as above
- }
- // LCOV_EXCL_BR_START 6: g_bkup_internal_state will not be BKUP_STATE_TERM
- if (g_bkup_internal_state == BKUP_STATE_TERM) {
- // LCOV_EXCL_BR_STOP 6: g_bkup_internal_state will not be BKUP_STATE_TERM
- // LCOV_EXCL_START 6: same as above
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- e_status = eFrameworkunifiedStatusExit;
- goto exit;
- // LCOV_EXCL_STOP 6: same as above
- }
-
- if (hdr->command == BKUP_CMD_SIZE || hdr->command == BKUP_CMD_SIZE_NUM) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupSetResponseNsfw(h_app, &query_result.size, sizeof(query_result.size), eFrameworkunifiedStatusOK);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- } else if (hdr->command == BKUP_CMD_CHECK) {
- if (query_result.nand) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupCmdCheck(&response_nsfw, NVHALMEDIA_NAND, rcv_buf, &query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- } else if (query_result.backup_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupCmdCheck(&response_nsfw, NVHALMEDIA_BACKUPDRAM, rcv_buf, &query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- } else if (query_result.cache_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupCmdCheck(&response_nsfw, NVHALMEDIA_CACHEDRAM, rcv_buf, &query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- } else {
- ret = -3;
- }
-
- if (ret == -1) {
- // not exists
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Not exists:%s", hdr->item_name != 0 ? hdr->item_name : NULL);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- e_status = eFrameworkunifiedStatusFileLoadError;
- } else if (ret == -2) {
- // size error
- e_status = eFrameworkunifiedStatusAccessError;
- } else if (ret == -3) {
- e_status = eFrameworkunifiedStatusFail;
- }
- } else {
- /*
- * Cache DRAM
- */
- if (query_result.cache_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupHandlerFile(&response_nsfw, NVHALMEDIA_CACHEDRAM, rcv_buf, &query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- if (ret > 0) {
- if (hdr->command == BKUP_CMD_READ) {
- goto exit;
- }
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if (BkupTweakCommand(NVHALMEDIA_CACHEDRAM, &rcv_buf,
- reinterpret_cast<int *>(&rcv_size),
- &query_result) < 0) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- e_status = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- }
- }
-
- /*
- * Backup DRAM
- */
- if (query_result.backup_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupHandlerFile(&response_nsfw, NVHALMEDIA_BACKUPDRAM, rcv_buf, &query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- if (ret > 0) {
- if (hdr->command == BKUP_CMD_READ) {
- goto exit;
- }
- // LCOV_EXCL_BR_START 5: mmap's error case.
- if (BkupTweakCommand(NVHALMEDIA_BACKUPDRAM, &rcv_buf,
- reinterpret_cast<int *>(&rcv_size),
- &query_result) < 0) {
- // LCOV_EXCL_BR_STOP 5: mmap's error case.
- // LCOV_EXCL_START 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- e_status = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_buf);
- }
- }
-
- /*
- * NAND
- */
- if (query_result.nand) {
- bkup_itc_message_t snd_msg;
-
- if ((hdr->command == BKUP_CMD_READ) || (hdr->command == BKUP_CMD_DELETE) || (query_result.sync) || (ret == 0)) {
- /*
- * operation offload
- */
- const char *client_name;
- char system_info[MAX_SYS_INFO_SIZE];
-
- if (g_bkup_nand_mqd == -1) {
- // LCOV_EXCL_BR_START 5: mq_open's error case.
- if ((g_bkup_nand_mqd = BkupItcMqopen("/" BKUP_THREAD_NAND, O_WRONLY | O_CREAT | O_NONBLOCK | O_CLOEXEC)) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_open's error case.
- // LCOV_EXCL_START 5: mq_open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_open:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: mq_open's error case.
- }
- }
-
- if ((client_name = FrameworkunifiedGetMsgSrc(h_app)) == NULL) { // LCOV_EXCL_BR_LINE 4: NSFW error case.
- // LCOV_EXCL_START 4: NSFW error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "invalid client_name");
- e_status = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 4: NSFW error case.
- }
- FrameworkunifiedGetSystemInfo(h_app, system_info); // LCOV_EXCL_BR_LINE 11:unexpected branch.
-
- memset(&snd_msg, 0, sizeof(snd_msg));
- BkupStrlcpy(snd_msg.nand.client_name, client_name, sizeof(snd_msg.nand.client_name));
- snd_msg.nand.seq_id = static_cast<uint32_t>(strtoul(system_info, NULL, 16));
- snd_msg.nand.rcv_buf = rcv_buf;
- snd_msg.nand.rcv_size = rcv_size;
-
- // LCOV_EXCL_BR_START 5: mq_send's error case.
- if (mq_send(g_bkup_nand_mqd, reinterpret_cast<char *>(&snd_msg), sizeof(snd_msg), 0) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_send's error case.
- // LCOV_EXCL_START 5: mq_send's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- int save_errno = errno;
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_send:%s", strerror(errno));
- e_status = eFrameworkunifiedStatusFail;
- if (save_errno == EAGAIN) {
- kill(g_bkup_nand_tid, SIGABRT);
- }
- goto exit;
- // LCOV_EXCL_STOP 5: mq_send's error case.
- }
- FrameworkunifiedSetDeferredSyncResponse(h_app); // LCOV_EXCL_BR_LINE 11:unexpected branch.
- hold_rcv_buf = true;
- } else {
- /*
- * delay write
- */
- if (g_bkup_delay_mqd == -1) {
- // LCOV_EXCL_BR_START 5: mq_open's error case.
- if ((g_bkup_delay_mqd = BkupItcMqopen("/" BKUP_THREAD_DELAY, O_WRONLY | O_CREAT | O_NONBLOCK | O_CLOEXEC)) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_open's error case.
- // LCOV_EXCL_START 5: mq_open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_open:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: mq_open's error case.
- }
- }
-
- memset(&snd_msg, 0, sizeof(snd_msg));
-
-// snd_msg.delay.terminate = false;
- snd_msg.delay.cmd = BKUP_DELAY_CMD_REGIST;
-
- BkupStrlcpy(snd_msg.delay.item_name, hdr->item_name, sizeof(snd_msg.delay.item_name));
-
- // LCOV_EXCL_BR_START 5: mq_send's error case.
- if (mq_send(g_bkup_delay_mqd, reinterpret_cast<char *>(&snd_msg), sizeof(snd_msg), 0) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_send's error case.
- // LCOV_EXCL_START 5: mq_send's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- int save_errno = errno;
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_send:%s", strerror(errno));
- e_status = eFrameworkunifiedStatusFail;
- if (save_errno == EAGAIN) {
- kill(g_bkup_delay_tid, SIGABRT);
- }
- goto exit;
- // LCOV_EXCL_STOP 5: mq_send's error case.
- }
- }
- }
- }
-
-exit:
- if (hold_rcv_buf == false && rcv_buf != MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case
- munmap(rcv_buf, rcv_size);
- }
- return e_status;
-}
-
-
-/**
- * Power callback handler
- */
-EFrameworkunifiedStatus bkup_power_handler(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- uint32_t rcv_size = 0;
- T_SS_SM_UserModeOnOffNotification_StructType power_status;
-
- if ((rcv_size = FrameworkunifiedGetMsgLength(hApp)) != sizeof(power_status)) { // LCOV_EXCL_BR_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 4: NSFW error case
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedGetMsgLength: size fail:%d", rcv_size);
- eStatus = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
- // LCOV_EXCL_BR_START 4: NSFW error case
- if ((eStatus = FrameworkunifiedGetMsgDataOfSize(hApp, &power_status, rcv_size, eSMRRelease)) != eFrameworkunifiedStatusOK) {
- // LCOV_EXCL_BR_STOP 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 4: NSFW error case
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedGetMsgDataOfSize:%d", eStatus);
- goto exit;
- // LCOV_EXCL_STOP 4: NSFW error case
- }
-
- if (g_bkup_internal_state != BKUP_STATE_NORMAL) { // LCOV_EXCL_BR_LINE 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 6:double check
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __func__, "Invalid state:%d", g_bkup_internal_state);
- goto exit;
- // LCOV_EXCL_STOP 6:double check
- }
-
- if (power_status.isUserModeOn == FALSE) {
- bkup_itc_message_t snd_msg;
-
- if (g_bkup_delay_mqd == -1) {
- // LCOV_EXCL_BR_START 5: mq_open's error case.
- if ((g_bkup_delay_mqd = BkupItcMqopen("/" BKUP_THREAD_DELAY, O_WRONLY|O_CREAT|O_NONBLOCK|O_CLOEXEC)) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 5: mq_open's error case.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_open:%s", strerror(errno));
- eStatus = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5: mq_open's error case.
- }
- }
-
- memset(&snd_msg, 0, sizeof(snd_msg));
- snd_msg.delay.cmd = BKUP_DELAY_CMD_PRE_ACCOFF;
-
- // LCOV_EXCL_BR_START 5: mq_send's error case.
- if (mq_send(g_bkup_delay_mqd, (char *)&snd_msg, sizeof(snd_msg), 0) < 0) {
- // LCOV_EXCL_BR_START 5: mq_send's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 5: mq_send's error case.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_send:%s", strerror(errno));
- eStatus = eFrameworkunifiedStatusFail;
- goto exit;
- // LCOV_EXCL_STOP 5: mq_send's error case.
- }
- }
-
-exit:
- return eStatus;
-}
-
-
-/**
- * thread's response
- */
-static int BkupSetResponseThread(void *opt, void *buf, int size, EFrameworkunifiedStatus ret_value) {
- HANDLE response_mq;
- char invoker_name[MAX_QUEUE_NAME_SIZE];
- if (opt == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "opt is NULL");
- return -1;
- }
- bkup_itc_message_t *msg = reinterpret_cast<bkup_itc_message_t *>(opt);
- EFrameworkunifiedStatus e_status;
- // LCOV_EXCL_BR_START 11:unexpected branch.
- McCreateInvokerName(msg->nand.client_name, 0, invoker_name, sizeof(invoker_name));
- // LCOV_EXCL_BR_STOP 11:unexpected branch.
-
- if (g_bkup_response_mq == NULL) {
- g_bkup_response_mq = new g_bkup_response_mq_t; // LCOV_EXCL_BR_LINE 11:except,C++ operator
- }
- g_bkup_response_mq_t::iterator mq_it = g_bkup_response_mq->find(invoker_name); // LCOV_EXCL_BR_LINE 11:except,C++ STL
- if (mq_it != g_bkup_response_mq->end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- response_mq = mq_it->second; // LCOV_EXCL_BR_LINE 11:except,C++ STL
- } else {
- if ((response_mq = McOpenSyncSender(invoker_name)) == NULL) { // LCOV_EXCL_BR_LINE 4: NSFW error case.
- // LCOV_EXCL_START 4: NSFW error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mcOpenSyncSender");
- return -1;
- // LCOV_EXCL_STOP 4: NSFW error case.
- }
- g_bkup_response_mq->insert(std::make_pair(invoker_name, response_mq)); // LCOV_EXCL_BR_LINE 11:except,C++ STL
- }
-
- // LCOV_EXCL_BR_START 11:unexpected branch.
- e_status = McSendSyncResponse(response_mq, MN_NS_BACKUPMGR, BACKUP_CID, msg->nand.seq_id, ret_value, size, buf);
- // LCOV_EXCL_BR_STOP 11:unexpected branch.
- return (e_status == eFrameworkunifiedStatusOK) ? 0 : -1; // LCOV_EXCL_BR_LINE 11:unexpected branch
-}
-
-/**
- * NAND Thread
- */
-void *BkupNandThread(void *arg) {
- mqd_t mqd;
- struct pollfd fds[1];
- bkup_itc_message_t rcv_msg;
- bkup_protocol_header_t *hdr;
- bkup_query_result_t query_result;
- bkup_response_t response_thread = {BkupSetResponseThread, NULL};
-
- signal_handler p_signal = SignalHandlerFuncForMsgHandleThread;
- signal(SIGUSR1, p_signal);
- g_nand_thread_id = pthread_self();
-
- if (prctl(PR_SET_NAME, BKUP_THREAD_NAND) < 0) { // LCOV_EXCL_BR_LINE 5: prctl's error case.
- // LCOV_EXCL_START 5: prctl's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "prctl(PR_SET_NAME):%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: prctl's error case.
- }
-
- // LCOV_EXCL_BR_START 5: mq_open's error case.
- if ((mqd = BkupItcMqopen("/" BKUP_THREAD_NAND, O_RDONLY | O_CREAT | O_CLOEXEC)) < -1) {
- // LCOV_EXCL_BR_STOP 5: mq_open's error case.
- // LCOV_EXCL_START 5: mq_open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_open:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: mq_open's error case.
- }
- g_bkup_nand_tid = static_cast<int>(syscall(__NR_gettid));
-
- fds[0].fd = mqd;
- fds[0].events = POLLIN;
-
- while (1) {
- int ret = poll(fds, sizeof(fds) / sizeof(struct pollfd), -1); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (ret < 0) { // LCOV_EXCL_BR_LINE 5: poll's error case.
- // LCOV_EXCL_START 5: poll's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- if (errno == EINTR) {
- continue;
- }
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "poll errno:%s", strerror(errno));
- // LCOV_EXCL_STOP 5: poll's error case.
- } else {
- if ((fds[0].revents & POLLIN) != 0) {
- // LCOV_EXCL_BR_START 5: mq_receive's error case.
- if (mq_receive(mqd, reinterpret_cast<char *>(&rcv_msg), sizeof(rcv_msg), NULL) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_receive's error case.
- // LCOV_EXCL_START 5: mq_receive's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- if (errno != EINTR) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_receive:%s", strerror(errno));
- }
- continue;
- // LCOV_EXCL_STOP 5: mq_receive's error case.
- }
- hdr = reinterpret_cast<bkup_protocol_header_t *>(rcv_msg.nand.rcv_buf);
- BkupParamGet(hdr->item_name, &query_result); // LCOV_EXCL_BR_LINE 11:unexpected branch
- response_thread.opt = &rcv_msg;
- // LCOV_EXCL_BR_START 11:unexpected branch
- ret = BkupHandlerFile(&response_thread, NVHALMEDIA_NAND, rcv_msg.nand.rcv_buf, &query_result);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
-
- munmap(rcv_msg.nand.rcv_buf, rcv_msg.nand.rcv_size);
- }
- }
- }
-
- return NULL;
-}
-
-/*
- * delay backup thread
- */
-typedef struct {
- int fd;
- std::string name;
-} bkup_delay_t; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
-static int BkupDelayTimerAdd(int efd, const char *item_name, time_t backup_cycle) {
- int ret = -1;
- struct epoll_event ev;
- bkup_delay_t *timer_ev = new bkup_delay_t; // LCOV_EXCL_BR_LINE 11:except,C++ operator
- struct itimerspec itime;
-
- if ((timer_ev->fd = timerfd_create(CLOCK_MONOTONIC, 0)) < 0) { // LCOV_EXCL_BR_LINE 5: timerfd_create's error case.
- // LCOV_EXCL_START 5: timerfd_create's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "timerfd_create:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5: timerfd_create's error case.
- }
- timer_ev->name = item_name; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
- ev.events = EPOLLIN;
- ev.data.ptr = timer_ev;
- if (epoll_ctl(efd, EPOLL_CTL_ADD, timer_ev->fd, &ev) < 0) { // LCOV_EXCL_BR_LINE 5: epoll_ctl's error case.
- // LCOV_EXCL_START 5: epoll_ctl's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "epoll_ctl:%s", strerror(errno));
- goto exit;
- // LCOV_EXCL_STOP 5: epoll_ctl's error case.
- }
-
- memset(&itime, 0, sizeof(itime));
- itime.it_value.tv_sec = backup_cycle;
- itime.it_interval.tv_sec = backup_cycle;
-
- if (timerfd_settime(timer_ev->fd, 0, &itime, NULL) < 0) { // LCOV_EXCL_BR_LINE 5: timerfd_settime's error case.
- // LCOV_EXCL_START 5: timerfd_settime's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "timerfd_settime:%s", strerror(errno));
- epoll_ctl(efd, EPOLL_CTL_DEL, timer_ev->fd, &ev);
- goto exit;
- // LCOV_EXCL_STOP 5: timerfd_settime's error case.
- }
- ret = 0;
-
-exit:
- if (ret < 0) { // LCOV_EXCL_BR_LINE 5: C API's error case.
- // LCOV_EXCL_START 5: C API's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- if (timer_ev->fd >= 0) {
- if (close(timer_ev->fd) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "timerfd_settime:%s", strerror(errno));
- }
- }
- delete timer_ev;
- }
- // LCOV_EXCL_STOP 5: C API's error case.
- return ret;
-}
-
-static uint64_t *g_bkup_syncreq;
-static pthread_rwlock_t g_syncreq_rwlock = PTHREAD_RWLOCK_INITIALIZER;
-#define BKUP_SYNCREQ_SIZE (4096)
-#define BKUP_SYNCREQ_ID_MAX (BKUP_SYNCREQ_SIZE * 8 - 1)
-#define BKUP_SYNCREQ_NAME "syncreq"
-
-static int BkupSyncreqInit(void) {
- int ret = -1;
- char *map;
-
- map = reinterpret_cast<char *>(mmap(NULL, BKUP_SYNCREQ_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0));
- if (map == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 5: mmap's error case.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap failed");
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- g_bkup_syncreq = reinterpret_cast<uint64_t *>(map);
- memset(g_bkup_syncreq, 0, BKUP_SYNCREQ_SIZE);
-
- pthread_rwlock_wrlock(&g_syncreq_rwlock);
- BkupBufferWriteToNv(NVHALMEDIA_BACKUPDRAM, BKUP_SYNCREQ_NAME,
- reinterpret_cast<char *>(g_bkup_syncreq),
- BKUP_SYNCREQ_SIZE, NULL);
- pthread_rwlock_unlock(&g_syncreq_rwlock);
- ret = 0;
-
-exit:
- return ret;
-}
-
-static void BkupSyncreqTerm(void) {
- if (g_bkup_syncreq != NULL) { // LCOV_EXCL_BR_LINE 6:g_bkup_syncreq will not be NULL
- munmap(g_bkup_syncreq, BKUP_SYNCREQ_SIZE);
- g_bkup_syncreq = NULL;
- }
-}
-
-static int BkupSyncreqSet(int id) {
- if (g_bkup_syncreq == NULL) { // LCOV_EXCL_BR_LINE 6:g_bkup_syncreq will not be NULL
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return -1; // LCOV_EXCL_LINE 5: mmap's error case.
- }
- if (id > BKUP_SYNCREQ_ID_MAX) {
- return -1;
- }
- if (!(*(g_bkup_syncreq + id / 64) & (1ULL << (id % 64)))) {
- *(g_bkup_syncreq + id / 64) |= (1ULL << (id % 64));
- pthread_rwlock_wrlock(&g_syncreq_rwlock);
- BkupBufferWriteToNv(NVHALMEDIA_BACKUPDRAM, BKUP_SYNCREQ_NAME,
- reinterpret_cast<char *>(g_bkup_syncreq),
- BKUP_SYNCREQ_SIZE, NULL);
- pthread_rwlock_unlock(&g_syncreq_rwlock);
- }
- return 0;
-}
-
-static int BkupSyncreqClear(int id) {
- if (g_bkup_syncreq == NULL) { // LCOV_EXCL_BR_LINE 6:g_bkup_syncreq will not be NULL
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return -1; // LCOV_EXCL_LINE 5: mmap's error case.
- }
- if (id > BKUP_SYNCREQ_ID_MAX) {
- return -1;
- }
- if (*(g_bkup_syncreq + id / 64) & (1ULL << (id % 64))) {
- *(g_bkup_syncreq + id / 64) &= ~(1ULL << (id % 64));
- pthread_rwlock_wrlock(&g_syncreq_rwlock);
- BkupBufferWriteToNv(NVHALMEDIA_BACKUPDRAM, BKUP_SYNCREQ_NAME,
- reinterpret_cast<char *>(g_bkup_syncreq),
- BKUP_SYNCREQ_SIZE, NULL);
- pthread_rwlock_unlock(&g_syncreq_rwlock);
- }
-
- return 0;
-}
-
-static inline int BkupPopcnt64(uint64_t x) {
- uint64_t n;
-
- n = (x >> 1) & 0x7777777777777777ULL;
- x = x - n;
- n = (n >> 1) & 0x7777777777777777ULL;
- x = x - n;
- n = (n >> 1) & 0x7777777777777777ULL;
- x = x - n;
- x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0fULL;
- x = x * 0x0101010101010101ULL;
- return static_cast<int>(x >> 56);
-}
-
-static int BkupSyncreqSearch(void) {
- int i;
-
- if (g_bkup_syncreq == NULL) { // LCOV_EXCL_BR_LINE 6:g_bkup_syncreq will not be NULL
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return -1; // LCOV_EXCL_LINE 5: mmap's error case.
- }
-
- for (i = 0; i < static_cast<int>(BKUP_SYNCREQ_SIZE / sizeof(uint64_t)); i++) {
- if (*(g_bkup_syncreq + i) != 0) {
- uint64_t bits, mrb1; // most right bit 1
- bits = *(g_bkup_syncreq + i);
- mrb1 = bits & (-bits);
- return i * 64 + BkupPopcnt64(mrb1 - 1);
- }
- }
-
- return -1;
-}
-
-static void BkupSyncreqDone(bool skip_cache) {
- int id;
- uint64_t start, end;
-
- start = BkupTimerReal();
-
- while ((id = BkupSyncreqSearch()) >= 0) {
- char item_name[64];
- bkup_query_result_t query_result;
-
- if (BkupParamGetNumid(id, &query_result, item_name, sizeof(item_name)) < 0) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", id);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- } else {
- if (query_result.cache_dram) {
- if (!skip_cache) {
- BkupMediaCopyFromNv(query_result.category_name, item_name,
- NVHALMEDIA_CACHEDRAM, NVHALMEDIA_NAND, NULL,
- NULL);
- }
- } else if (query_result.backup_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupMediaCopyFromNv(query_result.category_name, item_name,
- NVHALMEDIA_BACKUPDRAM, NVHALMEDIA_NAND, NULL, NULL);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
- }
-
- BkupSyncreqClear(id); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- }
-
- end = BkupTimerReal();
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __func__, "spent:%" PRIu64 ".%06" PRIu64 "ms",
- static_cast<uint64_t>((end - start) / 1000000),
- static_cast<uint64_t>((end - start) % 1000000));
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
-}
-
-void BkupSyncreqRestart(void) {
- char *map;
-
- map = reinterpret_cast<char *>(mmap(NULL, BKUP_SYNCREQ_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0));
- if (map == MAP_FAILED) { // LCOV_EXCL_BR_LINE 5: mmap's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- // LCOV_EXCL_START 5: mmap's error case.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mmap failed");
- goto exit;
- // LCOV_EXCL_STOP 5: mmap's error case.
- }
- g_bkup_syncreq = reinterpret_cast<uint64_t *>(map);
-
- if (BkupBufferReadFromNv(NVHALMEDIA_BACKUPDRAM, BKUP_SYNCREQ_NAME,
- reinterpret_cast<char *>(g_bkup_syncreq),
- BKUP_SYNCREQ_SIZE, NULL) < 0) {
- goto exit;
- }
- BkupSyncreqDone(true);
- BkupSyncreqTerm();
-
-exit:
- return;
-}
-
-void *BkupDelayThread(void *arg) {
- mqd_t mqd;
- int efd;
- struct epoll_event ev;
- bkup_delay_t *mq_ev;
- bkup_itc_message_t rcv_msg;
- std::map<std::string, int> delay_req; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
- signal_handler p_signal = SignalHandlerFuncForMsgHandleThread;
- signal(SIGUSR1, p_signal);
- g_delay_thread_id = pthread_self();
-
-
- if (prctl(PR_SET_NAME, BKUP_THREAD_DELAY) < 0) { // LCOV_EXCL_BR_LINE 5: prctl's error case.
- // LCOV_EXCL_START 5: prctl's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "prctl(PR_SET_NAME):%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: prctl's error case.
- }
-
- // LCOV_EXCL_BR_START 5: mq_open's error case.
- if ((mqd = BkupItcMqopen("/" BKUP_THREAD_DELAY, O_RDONLY | O_CREAT | O_CLOEXEC)) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_open's error case.
- // LCOV_EXCL_START 5: mq_open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_open:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: mq_open's error case.
- }
-
- if ((efd = epoll_create(MAX_FD_EPOLL)) < 0) { // LCOV_EXCL_BR_LINE 5: epoll_create's error case.
- // LCOV_EXCL_START 5: epoll_create's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "epoll_create:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: epoll_create's error case.
- }
- g_bkup_delay_tid = static_cast<int>(syscall(__NR_gettid));
-
- mq_ev = new bkup_delay_t; // LCOV_EXCL_BR_LINE 11:except,C++ operator
- mq_ev->fd = static_cast<int>(mqd);
- mq_ev->name = "mq"; // LCOV_EXCL_BR_LINE 11:except,C++ STL
-
- ev.events = EPOLLIN;
- ev.data.ptr = mq_ev;
- // LCOV_EXCL_BR_START 5: epoll_ctl's error case.
- if (epoll_ctl(efd, EPOLL_CTL_ADD, static_cast<int>(mqd), &ev) < 0) {
- // LCOV_EXCL_BR_STOP 5: epoll_ctl's error case.
- // LCOV_EXCL_START 5: epoll_ctl's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "epoll_ctl:%s", strerror(errno));
- exit(EXIT_FAILURE);
- // LCOV_EXCL_STOP 5: epoll_ctl's error case.
- }
-
- while (1) {
- struct epoll_event events[MAX_FD_EPOLL];
- int nfds;
-
- nfds = epoll_wait(efd, events, MAX_FD_EPOLL, -1); // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (nfds < 0) { // LCOV_EXCL_BR_LINE 5: epoll_wait's error case.
- // LCOV_EXCL_START 5: epoll_wait's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- if (errno != EINTR) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "epoll_wait:%s", strerror(errno));
- }
- continue;
- // LCOV_EXCL_STOP 5: epoll_wait's error case.
- }
-
- for (int i = 0; i < nfds; i++) {
- bkup_delay_t *cur_ev = reinterpret_cast<bkup_delay_t *>(events[i].data.ptr);
-
- if (cur_ev->fd == mqd) {
- /*
- * mq
- */
- // LCOV_EXCL_BR_START 5: mq_receive's error case.
- if (mq_receive(mqd, reinterpret_cast<char *>(&rcv_msg), sizeof(rcv_msg), NULL) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_receive's error case.
- // LCOV_EXCL_START 5: mq_receive's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- if (errno != EINTR) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_receive:%s", strerror(errno));
- }
- continue;
- // LCOV_EXCL_STOP 5: mq_receive's error case.
- }
-
-#if 0
- if (rcv_msg.delay.terminate) {
- // terminate request
- // shutdown sync
- BkupSyncreqDone(false); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- for (std::map<std::string, int>::iterator i = delay_req.begin(); i != delay_req.end(); ++i) {
- i->second = 0; // LCOV_EXCL_BR_LINE 11:except,C++ STL
- }
-
- // terminate finish response
- int64_t term_event = 1;
- // LCOV_EXCL_BR_START 5: write's error case.
- if (write(rcv_msg.delay.event_fd, &term_event, sizeof(term_event)) < 0) {
- // LCOV_EXCL_BR_STOP 5: write's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "write:%s", strerror(errno)); // LCOV_EXCL_LINE 5: write's error case.
- }
- } else {
- // delay request
- bkup_query_result_t query_result;
- BkupParamGet(rcv_msg.delay.item_name, &query_result); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- if (query_result.backup_cycle > 0) { // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (delay_req.find(rcv_msg.delay.item_name) != delay_req.end()) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- delay_req[rcv_msg.delay.item_name]++; // LCOV_EXCL_BR_LINE 11:except,C++ STL
- } else {
- // LCOV_EXCL_BR_START 11:unexpected branch
- BkupDelayTimerAdd(efd, rcv_msg.delay.item_name, query_result.backup_cycle);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- delay_req[rcv_msg.delay.item_name] = 1; // LCOV_EXCL_BR_LINE 11:unexpected branch
- }
-
- if (BkupSyncreqSet(query_result.id) < 0) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", query_result.id);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
- } else {
- // write to ACC OFF
- bkup_query_result_t query_result;
- if (BkupParamGet(rcv_msg.delay.item_name, &query_result) < 0) { // LCOV_EXCL_BR_LINE 11:except,C++ STL
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid item_name:%s",
- rcv_msg.delay.item_name != 0 ? rcv_msg.delay.item_name : NULL);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- } else {
- if (BkupSyncreqSet(query_result.id) < 0) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", query_result.id);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
- }
- }
- }
-#endif
- switch (rcv_msg.delay.cmd) {
- case BKUP_DELAY_CMD_TERM:
- case BKUP_DELAY_CMD_PRE_ACCOFF:
- /*
- * terminate or pre-acc_off request
- */
- // shutdown sync
- BkupSyncreqDone(false);
-
- for (std::map<std::string, int>::iterator i = delay_req.begin(); i != delay_req.end(); ++i) {
- i->second = 0;
- }
-
- if (rcv_msg.delay.cmd == BKUP_DELAY_CMD_TERM) {
- BkupSyncreqTerm();
-
- // terminate finish response
- int64_t term_event = 1;
- // LCOV_EXCL_BR_START 5: write's error case.
- if (write(rcv_msg.delay.event_fd, &term_event, sizeof(term_event)) < 0) {
- // LCOV_EXCL_BR_STOP 5: write's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "write:%s", strerror(errno)); // LCOV_EXCL_LINE 5: write's error case.
- }
- }
- break;
-
- case BKUP_DELAY_CMD_REGIST:
- // delay regist request
- bkup_query_result_t query_result;
- BkupParamGet(rcv_msg.delay.item_name, &query_result);
-
- if (query_result.backup_cycle > 0) {
- if (delay_req.find(rcv_msg.delay.item_name) != delay_req.end()) {
- delay_req[rcv_msg.delay.item_name]++;
- } else {
- BkupDelayTimerAdd(efd, rcv_msg.delay.item_name, query_result.backup_cycle);
- delay_req[rcv_msg.delay.item_name] = 1;
- }
-
- if (BkupSyncreqSet(query_result.id) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", query_result.id);
- }
- } else {
- // wite to ACC OFF
- bkup_query_result_t query_result;
- if (BkupParamGet(rcv_msg.delay.item_name, &query_result) < 0) { // LCOV_EXCL_BR_LINE 6:double check
- // LCOV_EXCL_START 6:double check
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid item_name:%s", rcv_msg.delay.item_name);
- // LCOV_EXCL_STOP 6:double check
- } else {
- if (BkupSyncreqSet(query_result.id) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", query_result.id);
- }
- }
- }
- break;
- }
-
- } else {
- /*
- * timerfd
- */
- uint64_t exp;
- if (read(cur_ev->fd, &exp, sizeof(exp)) < 0) { // LCOV_EXCL_BR_LINE 5: read's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "read:%s", strerror(errno)); // LCOV_EXCL_LINE 5: read's error case.
- }
-
- if (delay_req[cur_ev->name] > 0) { // LCOV_EXCL_BR_LINE 11:unexpected branch
- bkup_query_result_t query_result;
- BkupParamGet(cur_ev->name.c_str(), &query_result); // LCOV_EXCL_BR_LINE 11:unexpected branch
-
- if (query_result.cache_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *src_rwlock = BkupGetRwlock(
- cur_ev->name.c_str(), NVHALMEDIA_CACHEDRAM, &query_result);
- pthread_rwlock_t *dst_rwlock = BkupGetRwlock(
- cur_ev->name.c_str(), NVHALMEDIA_NAND, &query_result);
- BkupMediaCopyFromNv(query_result.category_name,
- cur_ev->name.c_str(), NVHALMEDIA_CACHEDRAM,
- NVHALMEDIA_NAND, src_rwlock, dst_rwlock);
- BkupMediaCopyFromNv(query_result.category_name,
- cur_ev->name.c_str(), NVHALMEDIA_CACHEDRAM,
- NVHALMEDIA_NAND, NULL, NULL);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- } else if (query_result.backup_dram) {
- // LCOV_EXCL_BR_START 11:unexpected branch
- pthread_rwlock_t *src_rwlock = BkupGetRwlock(
- cur_ev->name.c_str(), NVHALMEDIA_BACKUPDRAM, &query_result);
- pthread_rwlock_t *dst_rwlock = BkupGetRwlock(
- cur_ev->name.c_str(), NVHALMEDIA_NAND, &query_result);
- BkupMediaCopyFromNv(query_result.category_name,
- cur_ev->name.c_str(), NVHALMEDIA_BACKUPDRAM,
- NVHALMEDIA_NAND, src_rwlock, dst_rwlock);
- // LCOV_EXCL_BR_STOP 11:unexpected branch
- }
- delay_req[cur_ev->name] = 0; // LCOV_EXCL_BR_LINE 11:unexpected branch
- if (BkupSyncreqClear(query_result.id) < 0) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Invalid num_id:%d", query_result.id);
- // LCOV_EXCL_BR_STOP 15:marco defined in "native_service/ns_logger_if.h"
- }
- } else {
- // not update. timer delte
- // LCOV_EXCL_BR_START 5: epoll_ctl's error case.
- if (epoll_ctl(efd, EPOLL_CTL_DEL, cur_ev->fd, &events[i]) < 0) {
- // LCOV_EXCL_BR_STOP 5: epoll_ctl's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "epoll_ctl:%s", strerror(errno)); // LCOV_EXCL_LINE 5: epoll_ctl's error case.
- }
- if (close(cur_ev->fd) < 0) { // LCOV_EXCL_BR_LINE 5: close's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "close:%s", strerror(errno)); // LCOV_EXCL_LINE 5: close's error case.
- }
- delay_req.erase(cur_ev->name); // LCOV_EXCL_BR_LINE 11:unexpected branch
- delete cur_ev; // LCOV_EXCL_BR_LINE 11:except,C++ operator
- }
- }
- }
- }
-
- return NULL;
-}
-
-/**
- * Terminate handler
- */
-EFrameworkunifiedStatus BkupTerminateHandler(HANDLE h_app) {
- bkup_itc_message_t snd_msg;
- int event_fd;
- int64_t term_event;
-
- g_bkup_internal_state = BKUP_STATE_TERM;
-
- if (g_bkup_delay_mqd == -1) {
- // LCOV_EXCL_BR_START 5: mq_open's error case.
- if ((g_bkup_delay_mqd = BkupItcMqopen("/" BKUP_THREAD_DELAY, O_WRONLY | O_CREAT | O_NONBLOCK | O_CLOEXEC)) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_open's error case.
- // LCOV_EXCL_START 5: mq_open's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_open:%s", strerror(errno));
- return eFrameworkunifiedStatusFail;
- // LCOV_EXCL_STOP 5: mq_open's error case.
- }
- }
-
- if ((event_fd = eventfd(0, 0)) < 0) { // LCOV_EXCL_BR_LINE 5: eventfd's error case.
- // LCOV_EXCL_START 5: eventfd's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "eventfd:%s", strerror(errno));
- return eFrameworkunifiedStatusFail;
- // LCOV_EXCL_STOP 5: eventfd's error case.
- }
-
- memset(&snd_msg, 0, sizeof(snd_msg));
-
-// snd_msg.delay.terminate = true;
- snd_msg.delay.cmd = BKUP_DELAY_CMD_TERM;
-
- snd_msg.delay.event_fd = event_fd;
-
- // LCOV_EXCL_BR_START 5: mq_send's error case.
- if (mq_send(g_bkup_delay_mqd, reinterpret_cast<char *>(&snd_msg), sizeof(snd_msg), 0) < 0) {
- // LCOV_EXCL_BR_STOP 5: mq_send's error case.
- // LCOV_EXCL_START 5: mq_send's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "mq_send:%s", strerror(errno));
- return eFrameworkunifiedStatusFail;
- // LCOV_EXCL_STOP 5: mq_send's error case.
- }
-
- while (1) {
- if (read(event_fd, &term_event, sizeof(term_event)) < 0) { // LCOV_EXCL_BR_LINE 5: read's error case.
- // LCOV_EXCL_START 5: read's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- if (errno == EINTR) {
- continue;
- }
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "read:%s", strerror(errno));
- return eFrameworkunifiedStatusFail;
- // LCOV_EXCL_STOP 5: read's error case.
- } else {
- break;
- }
- }
- if (close(event_fd) < 0) { // LCOV_EXCL_BR_LINE 5: close's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "close:%s", strerror(errno)); // LCOV_EXCL_LINE 5: close's error case.
- }
-
- return eFrameworkunifiedStatusOK;
-}
-
-/**
- * Init handler
- */
-EFrameworkunifiedStatus BkupInitHandler(HANDLE h_app) {
- BkupSyncreqRestart();
- BkupSyncreqInit();
-
- g_bkup_internal_state = BKUP_STATE_NORMAL;
-
- return eFrameworkunifiedStatusOK;
-}