goto error;
}
- ds_file->file = ctf_fs_file_create(parentLogger);
+ ds_file->file = ctf_fs_file_create(parentLogger).release();
if (!ds_file->file) {
goto error;
}
delete file;
}
-struct ctf_fs_file *ctf_fs_file_create(const bt2c::Logger& parentLogger)
+void ctf_fs_file_deleter::operator()(ctf_fs_file * const file) noexcept
{
- ctf_fs_file *file = new ctf_fs_file {parentLogger};
+ ctf_fs_file_destroy(file);
+}
+
+ctf_fs_file::UP ctf_fs_file_create(const bt2c::Logger& parentLogger)
+{
+ ctf_fs_file::UP file {new ctf_fs_file {parentLogger}};
+
file->path = g_string_new(NULL);
if (!file->path) {
goto error;
goto end;
error:
- ctf_fs_file_destroy(file);
- file = NULL;
+ file.reset();
end:
return file;
#ifndef CTF_FS_FILE_H
#define CTF_FS_FILE_H
+#include <memory>
+
#include <babeltrace2/babeltrace.h>
#include "cpp-common/bt2c/logging.hpp"
+struct ctf_fs_file_deleter
+{
+ void operator()(struct ctf_fs_file *file) noexcept;
+};
+
struct ctf_fs_file
{
+ using UP = std::unique_ptr<ctf_fs_file, ctf_fs_file_deleter>;
+
explicit ctf_fs_file(const bt2c::Logger& parentLogger) :
logger {parentLogger, "PLUGIN/SRC.CTF.FS/FILE"}
{
void ctf_fs_file_destroy(struct ctf_fs_file *file);
-struct ctf_fs_file *ctf_fs_file_create(const bt2c::Logger& parentLogger);
+ctf_fs_file::UP ctf_fs_file_create(const bt2c::Logger& parentLogger);
int ctf_fs_file_open(struct ctf_fs_file *file, const char *mode);
}
/* Create the file. */
- file = ctf_fs_file_create(ctf_fs_trace->logger);
+ file = ctf_fs_file_create(ctf_fs_trace->logger).release();
if (!file) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(
ctf_fs_trace->logger,
static struct ctf_fs_file *get_file(const char *trace_path, const bt2c::Logger& logger)
{
- struct ctf_fs_file *file = ctf_fs_file_create(logger);
+ struct ctf_fs_file *file = ctf_fs_file_create(logger).release();
if (!file) {
goto error;