[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1508529934-369393-5-git-send-email-kan.liang@intel.com>
Date: Fri, 20 Oct 2017 13:05:32 -0700
From: kan.liang@...el.com
To: acme@...nel.org, mingo@...hat.com, linux-kernel@...r.kernel.org
Cc: peterz@...radead.org, jolsa@...nel.org, wangnan0@...wei.com,
hekuang@...wei.com, namhyung@...nel.org,
alexander.shishkin@...ux.intel.com, adrian.hunter@...el.com,
ak@...ux.intel.com, Kan Liang <Kan.liang@...el.com>
Subject: [PATCH V3 4/6] perf tools: add perf_data_file__open_tmp
From: Kan Liang <Kan.liang@...el.com>
And an interface for perf_data_file to open tmp file.
Automatically generate the tmp file name if it's not assigned. The name
cannot be const char. Introduce char *tmp_path for it.
The tmp file will be deleted after close.
It will be used as per-thread file to temporarily store event synthesizd
result in the following patch.
Signed-off-by: Kan Liang <Kan.liang@...el.com>
---
tools/perf/util/data.c | 26 ++++++++++++++++++++++++++
tools/perf/util/data.h | 2 ++
2 files changed, 28 insertions(+)
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c
index 1123b30..cd6fdf9 100644
--- a/tools/perf/util/data.c
+++ b/tools/perf/util/data.c
@@ -139,9 +139,35 @@ int perf_data_file__open(struct perf_data_file *file)
return open_file(file);
}
+int perf_data_file__open_tmp(struct perf_data_file *file)
+{
+ int fd;
+
+ if (!file->tmp_path &&
+ (asprintf(&file->tmp_path, "perf.tmp.XXXXXX") < 0))
+ goto err;
+
+ fd = mkstemp(file->tmp_path);
+ if (fd < 0) {
+ free(file->tmp_path);
+ goto err;
+ }
+
+ file->fd = fd;
+ return 0;
+err:
+ file->tmp_path = NULL;
+ return -1;
+}
+
void perf_data_file__close(struct perf_data_file *file)
{
close(file->fd);
+ if (file->tmp_path) {
+ unlink(file->tmp_path);
+ free(file->tmp_path);
+ file->tmp_path = NULL;
+ }
}
ssize_t perf_data_file__write(struct perf_data_file *file,
diff --git a/tools/perf/util/data.h b/tools/perf/util/data.h
index ae510ce..892b3d5 100644
--- a/tools/perf/util/data.h
+++ b/tools/perf/util/data.h
@@ -10,6 +10,7 @@ enum perf_data_mode {
struct perf_data_file {
const char *path;
+ char *tmp_path;
int fd;
bool is_pipe;
bool force;
@@ -43,6 +44,7 @@ static inline unsigned long perf_data_file__size(struct perf_data_file *file)
}
int perf_data_file__open(struct perf_data_file *file);
+int perf_data_file__open_tmp(struct perf_data_file *file);
void perf_data_file__close(struct perf_data_file *file);
ssize_t perf_data_file__write(struct perf_data_file *file,
void *buf, size_t size);
--
2.7.4
Powered by blists - more mailing lists