src.ctf.fs: make ctf_fs_file_create return a unique_ptr
[babeltrace.git] / src / plugins / ctf / fs-src / file.cpp
index 42b865a86675bdbddad5f0c96230e30284b8c36b..d125789e6e6c9ae68424e50a76bb06e034e444eb 100644 (file)
  * 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"
 
-BT_HIDDEN
 void ctf_fs_file_destroy(struct ctf_fs_file *file)
 {
-       if (!file) {
-               return;
-       }
-
-       if (file->fp) {
-               BT_COMP_LOGD("Closing file \"%s\" (%p)",
-                               file->path ? file->path->str : NULL, file->fp);
-
-               if (fclose(file->fp)) {
-                       BT_COMP_LOGE("Cannot close file \"%s\": %s",
-                                       file->path ? file->path->str : "NULL",
-                                       strerror(errno));
-               }
-       }
-
-       if (file->path) {
-               g_string_free(file->path, TRUE);
-       }
-
-       g_free(file);
+    if (!file) {
+        return;
+    }
+
+    if (file->fp) {
+        BT_CPPLOGD_SPEC(file->logger, "Closing file \"{}\" ({})",
+                        file->path ? file->path->str : NULL, fmt::ptr(file->fp));
+
+        if (fclose(file->fp)) {
+            BT_CPPLOGE_SPEC(file->logger, "Cannot close file \"{}\": {}",
+                            file->path ? file->path->str : "NULL", strerror(errno));
+        }
+    }
+
+    if (file->path) {
+        g_string_free(file->path, TRUE);
+    }
+
+    delete file;
 }
 
-BT_HIDDEN
-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;
-       }
+    file->path = g_string_new(NULL);
+    if (!file->path) {
+        goto error;
+    }
 
-       goto end;
+    goto end;
 
 error:
-       ctf_fs_file_destroy(file);
-       file = NULL;
+    file.reset();
 
 end:
-       return file;
+    return file;
 }
 
-BT_HIDDEN
 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);
-       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);
-               goto error;
-       }
-
-       BT_COMP_LOGI("Opened file: %p", 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);
-               goto error;
-       }
-
-       file->size = stat.st_size;
-       BT_COMP_LOGI("File is %jd bytes", (intmax_t) file->size);
-       goto end;
+    int ret = 0;
+    struct stat stat;
+
+    BT_CPPLOGI_SPEC(file->logger, "Opening file \"{}\" with mode \"{}\"", file->path->str, mode);
+    file->fp = fopen(file->path->str, mode);
+    if (!file->fp) {
+        BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(file->logger, "Cannot open file", ": path={}, mode={}",
+                                           file->path->str, mode);
+        goto error;
+    }
+
+    BT_CPPLOGI_SPEC(file->logger, "Opened file: {}", fmt::ptr(file->fp));
+
+    if (fstat(fileno(file->fp), &stat)) {
+        BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(file->logger, "Cannot get file information", ": path={}",
+                                           file->path->str);
+        goto error;
+    }
+
+    file->size = stat.st_size;
+    BT_CPPLOGI_SPEC(file->logger, "File is {} bytes", (intmax_t) file->size);
+    goto end;
 
 error:
-       ret = -1;
+    ret = -1;
 
-       if (file->fp) {
-               if (fclose(file->fp)) {
-                       BT_COMP_LOGE("Cannot close file \"%s\": %s", file->path->str,
-                               strerror(errno));
-               }
-       }
+    if (file->fp) {
+        if (fclose(file->fp)) {
+            BT_CPPLOGE_SPEC(file->logger, "Cannot close file \"{}\": {}", file->path->str,
+                            strerror(errno));
+        }
+    }
 
 end:
-       return ret;
+    return ret;
 }
This page took 0.025391 seconds and 4 git commands to generate.