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:4.504 / U:2.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site