lkml.org 
[lkml]   [2017]   [Oct]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH V3 4/6] perf tools: add perf_data_file__open_tmp
Date
From: Kan Liang <Kan.liang@intel.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@intel.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
\
 
 \ /
  Last update: 2017-10-22 17:47    [W:0.483 / U:0.096 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site