Messages in this thread Patch in this message | | | From | Jiri Olsa <> | Subject | [PATCH 05/14] perf data: Make check_backup work over directories | Date | Sun, 3 Feb 2019 16:30:09 +0100 |
| |
Changing check_backup to work also over directory path. Also moving the call earlier in the path, so it can rename also directory data.
Link: http://lkml.kernel.org/n/tip-j4lwm20en1yk1hsaqb8zpxkr@git.kernel.org Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/perf/util/data.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c index e16d06ed1100..0a3051cc0ea0 100644 --- a/tools/perf/util/data.c +++ b/tools/perf/util/data.c @@ -37,12 +37,15 @@ static int check_backup(struct perf_data *data) { struct stat st; + if (perf_data__is_read(data)) + return 0; + if (!stat(data->path, &st) && st.st_size) { /* TODO check errors properly */ char oldname[PATH_MAX]; snprintf(oldname, sizeof(oldname), "%s.old", data->path); - unlink(oldname); + rm_rf(oldname); rename(data->path, oldname); } @@ -95,9 +98,6 @@ static int open_file_write(struct perf_data *data) int fd; char sbuf[STRERR_BUFSIZE]; - if (check_backup(data)) - return -1; - fd = open(data->file.path, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC, S_IRUSR|S_IWUSR); @@ -141,6 +141,9 @@ int perf_data__open(struct perf_data *data) if (!data->path) data->path = "perf.data"; + if (check_backup(data)) + return -1; + return open_file_dup(data); } -- 2.17.2
| |