lkml.org 
[lkml]   [2015]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/42] perf tools: Add rm_rf() utility function
    Date
    The rm_rf() function does same as the shell command 'rm -rf' which
    removes all directory entries recursively.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    ---
    tools/perf/util/util.c | 43 +++++++++++++++++++++++++++++++++++++++++++
    tools/perf/util/util.h | 1 +
    2 files changed, 44 insertions(+)

    diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c
    index b86744f29eef..de1307a6ff4b 100644
    --- a/tools/perf/util/util.c
    +++ b/tools/perf/util/util.c
    @@ -72,6 +72,49 @@ int mkdir_p(char *path, mode_t mode)
    return (stat(path, &st) && mkdir(path, mode)) ? -1 : 0;
    }

    +int rm_rf(char *path)
    +{
    + DIR *dir;
    + int ret = 0;
    + struct dirent *d;
    + char namebuf[PATH_MAX];
    +
    + dir = opendir(path);
    + if (dir == NULL)
    + return 0;
    +
    + while ((d = readdir(dir)) != NULL && !ret) {
    + struct stat statbuf;
    +
    + if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
    + continue;
    +
    + scnprintf(namebuf, sizeof(namebuf), "%s/%s",
    + path, d->d_name);
    +
    + ret = stat(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))
    + ret = rm_rf(namebuf);
    + else {
    + pr_debug("unknown file: %s\n", namebuf);
    + ret = -1;
    + }
    + }
    + closedir(dir);
    +
    + if (ret < 0)
    + return ret;
    +
    + return rmdir(path);
    +}
    +
    static int slow_copyfile(const char *from, const char *to, mode_t mode)
    {
    int err = -1;
    diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
    index 027a5153495c..7b71ad87cdc3 100644
    --- a/tools/perf/util/util.h
    +++ b/tools/perf/util/util.h
    @@ -248,6 +248,7 @@ static inline int sane_case(int x, int high)
    }

    int mkdir_p(char *path, mode_t mode);
    +int rm_rf(char *path);
    int copyfile(const char *from, const char *to);
    int copyfile_mode(const char *from, const char *to, mode_t mode);

    --
    2.2.2


    \
     
     \ /
      Last update: 2015-01-29 09:41    [W:4.236 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site