diff options
| author | Namhyung Kim <namhyung.kim@lge.com> | 2012-05-07 14:09:01 +0900 | 
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-05-07 16:46:48 -0300 | 
| commit | dfe78adaaca90417ece98edbd3eb1c9661334406 (patch) | |
| tree | 537576730ce54f2ddee4d6266aad7c8f72258a45 /tools/perf/util/target.c | |
| parent | 60bbddaaa33865633efa2800702e3b02495a0e94 (diff) | |
| download | olio-linux-3.10-dfe78adaaca90417ece98edbd3eb1c9661334406.tar.xz olio-linux-3.10-dfe78adaaca90417ece98edbd3eb1c9661334406.zip  | |
perf target: Introduce perf_target__parse_uid()
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>
Reviewed-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1336367344-28071-5-git-send-email-namhyung.kim@lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/target.c')
| -rw-r--r-- | tools/perf/util/target.c | 35 | 
1 files changed, 35 insertions, 0 deletions
diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c index 5c59dcfc8f8..02a6bedb69a 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_ERRNO_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_ERRNO_TARGET__INVALID_UID; + +		getpwuid_r(uid, &pwd, buf, sizeof(buf), &result); + +		if (result == NULL) +			return PERF_ERRNO_TARGET__USER_NOT_FOUND; +	} + +	target->uid = result->pw_uid; +	return PERF_ERRNO_TARGET__SUCCESS; +}  |