lkml.org 
[lkml]   [2015]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[RFC PATCH perf/core v2 07/16] perf: Add lsdir to read a directory
    From
    Date
    As a utility function, add lsdir() which reads given
    directory and store entry name into a strlist.
    lsdir accepts a filter function so that user can
    filter out unneeded entries.

    Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    ---
    tools/perf/util/util.c | 34 ++++++++++++++++++++++++++++++++++
    tools/perf/util/util.h | 4 ++++
    2 files changed, 38 insertions(+)

    diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c
    index edc2d63..69694dd 100644
    --- a/tools/perf/util/util.c
    +++ b/tools/perf/util/util.c
    @@ -115,6 +115,40 @@ int rm_rf(char *path)
    return rmdir(path);
    }

    +/* A filter which removes dot files */
    +bool lsdir_no_dot_filter(const char *dirname __maybe_unused, struct dirent *d)
    +{
    + return d->d_name[0] != '.';
    +}
    +
    +/* lsdir reads a directory and store it in strlist */
    +struct strlist *lsdir(const char *dirname,
    + bool (*filter)(const char *, struct dirent *))
    +{
    + struct strlist *list = NULL;
    + DIR *dir;
    + struct dirent *d;
    +
    + dir = opendir(dirname);
    + if (!dir)
    + return NULL;
    +
    + list = strlist__new(true, NULL);
    + if (!list) {
    + errno = -ENOMEM;
    + goto out;
    + }
    +
    + while ((d = readdir(dir)) != NULL) {
    + if (!filter || filter(dirname, d))
    + strlist__add(list, d->d_name);
    + }
    +
    +out:
    + closedir(dir);
    + return list;
    +}
    +
    static int slow_copyfile(const char *from, const char *to)
    {
    int err = -1;
    diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
    index 20d625a..fb5401b 100644
    --- a/tools/perf/util/util.h
    +++ b/tools/perf/util/util.h
    @@ -79,6 +79,7 @@
    #include <termios.h>
    #include <linux/bitops.h>
    #include <termios.h>
    +#include "strlist.h"

    extern const char *graph_line;
    extern const char *graph_dotted_line;
    @@ -250,6 +251,9 @@ static inline int sane_case(int x, int high)

    int mkdir_p(char *path, mode_t mode);
    int rm_rf(char *path);
    +struct strlist *lsdir(const char *dirname,
    + bool (*filter)(const char *, struct dirent *));
    +bool lsdir_no_dot_filter(const char *dirname __maybe_unused, struct dirent *d);
    int copyfile(const char *from, const char *to);
    int copyfile_mode(const char *from, const char *to, mode_t mode);
    int copyfile_offset(int fromfd, loff_t from_ofs, int tofd, loff_t to_ofs, u64 size);



    \
     
     \ /
      Last update: 2015-07-15 11:41    [W:6.570 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site