修复通话记录存在的内存泄漏(补) 976/3 976/head
authorhcj <1224667075@qq.com>
Wed, 18 Sep 2024 02:01:57 +0000 (10:01 +0800)
committerhcj <1224667075@qq.com>
Wed, 18 Sep 2024 02:01:57 +0000 (10:01 +0800)
code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp

index e654b8d..9daa23c 100644 (file)
@@ -975,67 +975,57 @@ int GetCallLog(CallLogInfo **info, int *num)
 
     int number = fileSize / sizeof(CallLogInfo);
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[GetCallLog] fileSize:%d, number:%d", fileSize, number);
-    CallLogInfo *callInfo = (CallLogInfo *)OHOS::UIMalloc(fileSize);
-    if (callInfo == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] malloc callInfo fail!");
-        *info = nullptr;
-        *num = 0;
-        fclose(fp);
-        return OHOS_FAILURE;
-    }
-    (void)memset_s(callInfo, fileSize, 0, fileSize);
 
-    int ret = fread(callInfo, sizeof(CallLogInfo), number, fp);
-    if (ret != number) {
+    for(int i=0;i<number;i++)
+    {
+        CallLogInfo *callInfo = (CallLogInfo *)OHOS::UIMalloc( sizeof(CallLogInfo));
+        if (callInfo == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] malloc callInfo fail!");
+            info[i] = nullptr;
+            *num = 0;
+            fclose(fp);
+            return OHOS_FAILURE;
+        }
+        (void)memset_s(callInfo,  sizeof(CallLogInfo), 0,  sizeof(CallLogInfo));
+
+        int ret = fread(callInfo, sizeof(CallLogInfo), 1, fp);
+
+        if (ret != 1) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] fread fp fail ret:%d", ret);
-        *info = nullptr;
+        info[i] = nullptr;
         *num = 0;
         fclose(fp);
         return OHOS_FAILURE;
+        }
+        info[i] = callInfo;
     }
-
-    *info = callInfo;
     *num = number;
     fclose(fp);
     return OHOS_SUCCESS;
 }
 
 
-// int SaveCallLog(CallLogInfo **info)
-// {
-//     FILE *fp = fopen(CALL_LOG_PATH, "wb+");
-//     if (fp == nullptr) {
-//         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AddToCallLog] fopen %s failed!", CALL_LOG_PATH);
-//         return OHOS_FAILURE;
-//     }
-
-
-//     int number = fileSize / sizeof(CallLogInfo);
-//     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[GetCallLog] fileSize:%d, number:%d", fileSize, number);
-//     CallLogInfo *callInfo = (CallLogInfo *)malloc(fileSize);
-//     if (callInfo == nullptr) {
-//         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] malloc callInfo fail!");
-//         *info = nullptr;
-//         *num = 0;
-//         fclose(fp);
-//         return OHOS_FAILURE;
-//     }
-//     (void)memset_s(callInfo, fileSize, 0, fileSize);
-
-//     int ret = fread(callInfo, sizeof(CallLogInfo), number, fp);
-//     if (ret != number) {
-//         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] fread fp fail ret:%d", ret);
-//         *info = nullptr;
-//         *num = 0;
-//         fclose(fp);
-//         return OHOS_FAILURE;
-//     }
-
-//     *info = callInfo;
-//     *num = number;
-//     fclose(fp);
-//     return OHOS_SUCCESS;
-// }
+int SaveCallLog(CallLogInfo **info,int num)
+{
+    FILE *fp = fopen(CALL_LOG_PATH, "wb+");
+    if (fp == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AddToCallLog] fopen %s failed!", CALL_LOG_PATH);
+        return OHOS_FAILURE;
+    }
+    if (info == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] malloc callInfo fail!");
+        return OHOS_FAILURE;
+    }
+    int ret = fwrite(info, sizeof(CallLogInfo), num, fp);
+    if (ret != num) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[GetCallLog] fread fp fail ret:%d", ret);
+       
+        fclose(fp);
+        return OHOS_FAILURE;
+    }
+    fclose(fp);
+    return OHOS_SUCCESS;
+}
 
 // 清空通话记录
 int ClearCallLogFile(void)