src.ctf.fs: make ctf_fs_file_create return a unique_ptr
[babeltrace.git] / src / plugins / ctf / fs-src / file.cpp
index 45bdd3010f1adf34ce0a3b5d319281b0e118ee86..d125789e6e6c9ae68424e50a76bb06e034e444eb 100644 (file)
@@ -4,16 +4,12 @@
  * Copyright 2016 Philippe Proulx <pproulx@efficios.com>
  */
 
-#define BT_COMP_LOG_SELF_COMP (file->self_comp)
-#define BT_LOG_OUTPUT_LEVEL   (file->log_level)
-#define BT_LOG_TAG            "PLUGIN/SRC.CTF.FS/FILE"
-#include "logging/comp-logging.h"
-
+#include <glib.h>
 #include <stdio.h>
-#include <sys/types.h>
 #include <sys/stat.h>
-#include <unistd.h>
-#include <glib.h>
+
+#include "cpp-common/vendor/fmt/format.h"
+
 #include "file.hpp"
 
 void ctf_fs_file_destroy(struct ctf_fs_file *file)
@@ -23,11 +19,12 @@ void ctf_fs_file_destroy(struct ctf_fs_file *file)
     }
 
     if (file->fp) {
-        BT_COMP_LOGD("Closing file \"%s\" (%p)", file->path ? file->path->str : NULL, file->fp);
+        BT_CPPLOGD_SPEC(file->logger, "Closing file \"{}\" ({})",
+                        file->path ? file->path->str : NULL, fmt::ptr(file->fp));
 
         if (fclose(file->fp)) {
-            BT_COMP_LOGE("Cannot close file \"%s\": %s", file->path ? file->path->str : "NULL",
-                         strerror(errno));
+            BT_CPPLOGE_SPEC(file->logger, "Cannot close file \"{}\": {}",
+                            file->path ? file->path->str : "NULL", strerror(errno));
         }
     }
 
@@ -35,19 +32,18 @@ void ctf_fs_file_destroy(struct ctf_fs_file *file)
         g_string_free(file->path, TRUE);
     }
 
-    g_free(file);
+    delete file;
 }
 
-struct ctf_fs_file *ctf_fs_file_create(bt_logging_level log_level, bt_self_component *self_comp)
+void ctf_fs_file_deleter::operator()(ctf_fs_file * const file) noexcept
 {
-    struct ctf_fs_file *file = g_new0(struct ctf_fs_file, 1);
+    ctf_fs_file_destroy(file);
+}
 
-    if (!file) {
-        goto error;
-    }
+ctf_fs_file::UP ctf_fs_file_create(const bt2c::Logger& parentLogger)
+{
+    ctf_fs_file::UP file {new ctf_fs_file {parentLogger}};
 
-    file->log_level = log_level;
-    file->self_comp = self_comp;
     file->path = g_string_new(NULL);
     if (!file->path) {
         goto error;
@@ -56,8 +52,7 @@ struct ctf_fs_file *ctf_fs_file_create(bt_logging_level log_level, bt_self_compo
     goto end;
 
 error:
-    ctf_fs_file_destroy(file);
-    file = NULL;
+    file.reset();
 
 end:
     return file;
@@ -68,24 +63,24 @@ int ctf_fs_file_open(struct ctf_fs_file *file, const char *mode)
     int ret = 0;
     struct stat stat;
 
-    BT_COMP_LOGI("Opening file \"%s\" with mode \"%s\"", file->path->str, mode);
+    BT_CPPLOGI_SPEC(file->logger, "Opening file \"{}\" with mode \"{}\"", file->path->str, mode);
     file->fp = fopen(file->path->str, mode);
     if (!file->fp) {
-        BT_COMP_LOGE_APPEND_CAUSE_ERRNO(file->self_comp, "Cannot open file", ": path=%s, mode=%s",
-                                        file->path->str, mode);
+        BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(file->logger, "Cannot open file", ": path={}, mode={}",
+                                           file->path->str, mode);
         goto error;
     }
 
-    BT_COMP_LOGI("Opened file: %p", file->fp);
+    BT_CPPLOGI_SPEC(file->logger, "Opened file: {}", fmt::ptr(file->fp));
 
     if (fstat(fileno(file->fp), &stat)) {
-        BT_COMP_LOGE_APPEND_CAUSE_ERRNO(file->self_comp, "Cannot get file information", ": path=%s",
-                                        file->path->str);
+        BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(file->logger, "Cannot get file information", ": path={}",
+                                           file->path->str);
         goto error;
     }
 
     file->size = stat.st_size;
-    BT_COMP_LOGI("File is %jd bytes", (intmax_t) file->size);
+    BT_CPPLOGI_SPEC(file->logger, "File is {} bytes", (intmax_t) file->size);
     goto end;
 
 error:
@@ -93,7 +88,8 @@ error:
 
     if (file->fp) {
         if (fclose(file->fp)) {
-            BT_COMP_LOGE("Cannot close file \"%s\": %s", file->path->str, strerror(errno));
+            BT_CPPLOGE_SPEC(file->logger, "Cannot close file \"{}\": {}", file->path->str,
+                            strerror(errno));
         }
     }
 
This page took 0.025274 seconds and 4 git commands to generate.