lkml.org 
[lkml]   [2016]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf tools: Fix rm_rf() to handle non-regular files correctly
    Commit-ID:  2a1ef032cfccd8c92f32b86615a0b0151a7cd86f
    Gitweb: http://git.kernel.org/tip/2a1ef032cfccd8c92f32b86615a0b0151a7cd86f
    Author: Masami Hiramatsu <mhiramat@kernel.org>
    AuthorDate: Wed, 8 Jun 2016 18:29:11 +0900
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Tue, 14 Jun 2016 09:29:54 -0300

    perf tools: Fix rm_rf() to handle non-regular files correctly

    Fix rm_rf() to handle non-regular files correctly. This fix includes two
    changes;

    - Fix to use lstat(3) instead of stat(3) since if the target
    file is a symbolic link, rm_rf() should unlink the symbolic
    link itself, not the file which pointed by the symlink.
    - Fix to unlink non-regular files (except for directory),
    including symlink.

    Even though the first one fixes to stat symlink itself, without second
    fix, it still failed because the symlink is not a regular file.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20160608092911.3116.90929.stgit@devbox
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/util.c | 13 +++++--------
    1 file changed, 5 insertions(+), 8 deletions(-)

    diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c
    index 23504ad..e08b9a0 100644
    --- a/tools/perf/util/util.c
    +++ b/tools/perf/util/util.c
    @@ -97,20 +97,17 @@ int rm_rf(char *path)
    scnprintf(namebuf, sizeof(namebuf), "%s/%s",
    path, d->d_name);

    - ret = stat(namebuf, &statbuf);
    + /* We have to check symbolic link itself */
    + ret = lstat(namebuf, &statbuf);
    if (ret < 0) {
    pr_debug("stat failed: %s\n", namebuf);
    break;
    }

    - if (S_ISREG(statbuf.st_mode))
    - ret = unlink(namebuf);
    - else if (S_ISDIR(statbuf.st_mode))
    + if (S_ISDIR(statbuf.st_mode))
    ret = rm_rf(namebuf);
    - else {
    - pr_debug("unknown file: %s\n", namebuf);
    - ret = -1;
    - }
    + else
    + ret = unlink(namebuf);
    }
    closedir(dir);

    \
     
     \ /
      Last update: 2016-06-16 10:41    [W:4.161 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site