From 49561d58a14351d136518f25bd686f9a6ca41b69 Mon Sep 17 00:00:00 2001 From: Avik Sil Date: Wed, 15 Feb 2012 17:06:50 +0530 Subject: Perf: Fallback to /bin/more if less is not found for perf pager Signed-off-by: Avik Sil Signed-off-by: Andrey Konovalov --- tools/perf/util/pager.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/pager.c b/tools/perf/util/pager.c index 1915de20dca..9ad92db7211 100644 --- a/tools/perf/util/pager.c +++ b/tools/perf/util/pager.c @@ -44,6 +44,32 @@ static void wait_for_pager_signal(int signo) raise(signo); } +static int check_pager(const char *pager) +{ + char *env_path; + char *pager_path; + char *path; + struct stat stat_buf; + + env_path = getenv("PATH"); + pager_path = malloc(strlen(env_path) + strlen(pager) + 2); + if (pager_path == NULL) + return -1; + path = strtok(env_path, ":"); + while (path) { + strcpy(pager_path, path); + strcat(pager_path, "/"); + strcat(pager_path, pager); + if (!stat(pager_path, &stat_buf)) { + free(pager_path); + return 0; + } + path = strtok(NULL, ":"); + } + free(pager_path); + return -1; +} + void setup_pager(void) { const char *pager = getenv("PERF_PAGER"); @@ -58,7 +84,10 @@ void setup_pager(void) if (!pager) pager = getenv("PAGER"); if (!pager) - pager = "less"; + if (!check_pager("less")) + pager = "less"; + else + pager = "/bin/more"; else if (!*pager || !strcmp(pager, "cat")) return; -- cgit v1.2.3