lkml.org 
[lkml]   [2012]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/13] perf target: Introduce perf_target__parse_uid()
    Date
    Add and use the modern perf_target__parse_uid() and get rid of
    the old parse_target_uid().

    Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
    ---
    tools/perf/builtin-record.c | 4 +---
    tools/perf/builtin-top.c | 3 +--
    tools/perf/util/target.c | 35 +++++++++++++++++++++++++++++++++++
    tools/perf/util/target.h | 5 +++++
    tools/perf/util/usage.c | 31 -------------------------------
    tools/perf/util/util.h | 3 ---
    6 files changed, 42 insertions(+), 39 deletions(-)

    diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
    index d16590942cec..e5d77452eef6 100644
    --- a/tools/perf/builtin-record.c
    +++ b/tools/perf/builtin-record.c
    @@ -886,9 +886,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)

    perf_target__validate(&rec->opts.target);

    - rec->opts.target.uid = parse_target_uid(rec->opts.target.uid_str);
    - if (rec->opts.target.uid_str != NULL &&
    - rec->opts.target.uid == UINT_MAX - 1)
    + if (perf_target__parse_uid(&rec->opts.target) != PERF_TARGET__SUCCESS)
    goto out_free_fd;

    if (perf_evlist__create_maps(evsel_list, &rec->opts.target) < 0)
    diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
    index 2a0ec09b9b77..80fccc7bd1e0 100644
    --- a/tools/perf/builtin-top.c
    +++ b/tools/perf/builtin-top.c
    @@ -1254,8 +1254,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)

    perf_target__validate(&top.target);

    - top.target.uid = parse_target_uid(top.target.uid_str);
    - if (top.target.uid_str != NULL && top.target.uid == UINT_MAX - 1)
    + if (perf_target__parse_uid(&top.target) != PERF_TARGET__SUCCESS)
    goto out_delete_evlist;

    if (perf_evlist__create_maps(top.evlist, &top.target) < 0)
    diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c
    index 04cc374b7c32..140adfdfd520 100644
    --- a/tools/perf/util/target.c
    +++ b/tools/perf/util/target.c
    @@ -9,6 +9,8 @@
    #include "target.h"
    #include "debug.h"

    +#include <pwd.h>
    +

    enum perf_target_errno perf_target__validate(struct perf_target *target)
    {
    @@ -54,3 +56,36 @@ enum perf_target_errno perf_target__validate(struct perf_target *target)

    return ret;
    }
    +
    +enum perf_target_errno perf_target__parse_uid(struct perf_target *target)
    +{
    + struct passwd pwd, *result;
    + char buf[1024];
    + const char *str = target->uid_str;
    +
    + target->uid = UINT_MAX;
    + if (str == NULL)
    + return PERF_TARGET__SUCCESS;
    +
    + /* Try user name first */
    + getpwnam_r(str, &pwd, buf, sizeof(buf), &result);
    +
    + if (result == NULL) {
    + /*
    + * The user name not found. Maybe it's a UID number.
    + */
    + char *endptr;
    + int uid = strtol(str, &endptr, 10);
    +
    + if (*endptr != '\0')
    + return PERF_TARGET__INVALID_UID;
    +
    + getpwuid_r(uid, &pwd, buf, sizeof(buf), &result);
    +
    + if (result == NULL)
    + return PERF_TARGET__USER_NOT_FOUND;
    + }
    +
    + target->uid = result->pw_uid;
    + return PERF_TARGET__SUCCESS;
    +}
    diff --git a/tools/perf/util/target.h b/tools/perf/util/target.h
    index c3914c8a9890..ec35fc043260 100644
    --- a/tools/perf/util/target.h
    +++ b/tools/perf/util/target.h
    @@ -27,9 +27,14 @@ enum perf_target_errno {
    PERF_TARGET__PID_OVERRIDE_SYSTEM,
    PERF_TARGET__UID_OVERRIDE_SYSTEM,

    + /* for perf_target__parse_uid() */
    + PERF_TARGET__INVALID_UID,
    + PERF_TARGET__USER_NOT_FOUND,
    +
    __PERF_TARGET__ERRNO_END
    };

    enum perf_target_errno perf_target__validate(struct perf_target *target);
    +enum perf_target_errno perf_target__parse_uid(struct perf_target *target);

    #endif /* _PERF_TARGET_H */
    diff --git a/tools/perf/util/usage.c b/tools/perf/util/usage.c
    index e851abc22ccc..4007aca8e0ca 100644
    --- a/tools/perf/util/usage.c
    +++ b/tools/perf/util/usage.c
    @@ -82,34 +82,3 @@ void warning(const char *warn, ...)
    warn_routine(warn, params);
    va_end(params);
    }
    -
    -uid_t parse_target_uid(const char *str)
    -{
    - struct passwd pwd, *result;
    - char buf[1024];
    -
    - if (str == NULL)
    - return UINT_MAX;
    -
    - getpwnam_r(str, &pwd, buf, sizeof(buf), &result);
    -
    - if (result == NULL) {
    - char *endptr;
    - int uid = strtol(str, &endptr, 10);
    -
    - if (*endptr != '\0') {
    - ui__error("Invalid user %s\n", str);
    - return UINT_MAX - 1;
    - }
    -
    - getpwuid_r(uid, &pwd, buf, sizeof(buf), &result);
    -
    - if (result == NULL) {
    - ui__error("Problems obtaining information for user %s\n",
    - str);
    - return UINT_MAX - 1;
    - }
    - }
    -
    - return result->pw_uid;
    -}
    diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
    index 52be74c359d3..27a11a78ad39 100644
    --- a/tools/perf/util/util.h
    +++ b/tools/perf/util/util.h
    @@ -74,7 +74,6 @@
    #include <netinet/tcp.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    -#include <pwd.h>
    #include <inttypes.h>
    #include "../../../include/linux/magic.h"
    #include "types.h"
    @@ -249,8 +248,6 @@ struct perf_event_attr;

    void event_attr_init(struct perf_event_attr *attr);

    -uid_t parse_target_uid(const char *str);
    -
    #define _STR(x) #x
    #define STR(x) _STR(x)

    --
    1.7.10


    \
     
     \ /
      Last update: 2012-04-26 07:23    [W:0.028 / U:122.280 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site