Separate log writing function from destructor 35/246235/1
authorKichan Kwon <k_c.kwon@samsung.com>
Tue, 27 Oct 2020 06:59:33 +0000 (15:59 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Tue, 27 Oct 2020 07:19:21 +0000 (16:19 +0900)
- To include other function in destructor

Change-Id: I10214342ccf2b71a3ae47a878a924a3c206494db
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
src/system-recovery.c

index c610bce99682c7ebcc743c0d5870f8540ecd428b..d5931d8a095ab40fa167cc2f7646683a02dbb294 100644 (file)
@@ -32,27 +32,34 @@ static char recovery_image_path[PATH_MAX - FIELD_LENGTH];
 char log_buf[8192];
 int log_size;
 
-__attribute__((destructor)) static void write_log_file(void)
+static int write_log_file(void)
 {
-       int log_fd;
+       _CLEANUP_FD_ int log_fd = -1;
        int ret;
        char path[128];
 
        snprintf(path, sizeof(path), "%s/%s", dirname(recovery_image_path), LOG_FILE_BASENAME);
        log_fd = creat(path, 0644);
-       if (log_fd == -1) {
-               _E("Failed to open log file (%d)", errno);
-               return;
-       }
+       ASSERT_RETV(log_fd != -1, errno, "Failed to open log file (%d)", errno);
 
        ret = write(log_fd, log_buf, log_size);
-       if (ret < log_size)
-               _E("Failed to write log (log size=%d, ret=%d)", log_size, ret);
+       ASSERT_RETV(ret == log_size, EIO, "Failed to write log (log size=%d, ret=%d)", log_size, ret);
 
-       close(log_fd);
+       return SUCCEED;
 }
 #endif
 
+__attribute__((destructor)) static void __fini__(void)
+{
+       int ret = SUCCEED;
+
+#ifdef LOG_FILE
+       ret = write_log_file();
+       if (ret != SUCCEED)
+               _W("Failed to write log file (%d)", ret);
+#endif
+}
+
 static unsigned long long total_image_size;