1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef __PERF_CACHE_H 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define __PERF_CACHE_H 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdbool.h> 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "util.h" 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "strbuf.h" 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../perf.h" 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define CMD_EXEC_PATH "--exec-path" 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define CMD_PERF_DIR "--perf-dir=" 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define CMD_WORK_TREE "--work-tree=" 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define CMD_DEBUGFS_DIR "--debugfs-dir=" 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define PERF_DIR_ENVIRONMENT "PERF_DIR" 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define PERF_WORK_TREE_ENVIRONMENT "PERF_WORK_TREE" 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define EXEC_PATH_ENVIRONMENT "PERF_EXEC_PATH" 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define DEFAULT_PERF_DIR_ENVIRONMENT ".perf" 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define PERF_DEBUGFS_ENVIRONMENT "PERF_DEBUGFS_DIR" 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengtypedef int (*config_fn_t)(const char *, const char *, void *); 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int perf_default_config(const char *, const char *, void *); 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int perf_config(config_fn_t fn, void *); 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int perf_config_int(const char *, const char *); 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int perf_config_bool(const char *, const char *); 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int config_error_nonbool(const char *); 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char *perf_config_dirname(const char *, const char *); 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* pager.c */ 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern void setup_pager(void); 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char *pager_program; 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int pager_in_use(void); 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int pager_use_color; 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int use_browser; 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifdef NO_NEWT_SUPPORT 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void setup_browser(bool fallback_to_pager) 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (fallback_to_pager) 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng setup_pager(); 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void exit_browser(bool wait_for_ok __used) {} 43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else 44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid setup_browser(bool fallback_to_pager); 45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid exit_browser(bool wait_for_ok); 46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif 47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengchar *alias_lookup(const char *alias); 49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint split_cmdline(char *cmdline, const char ***argv); 50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define alloc_nr(x) (((x)+16)*3/2) 52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* 54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Realloc the buffer pointed at by variable 'x' so that it can hold 55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * at least 'nr' entries; the number of entries currently allocated 56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * is 'alloc', using the standard growing factor alloc_nr() macro. 57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * 58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * DO NOT USE any expression with side-effect for 'x' or 'alloc'. 59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */ 60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define ALLOC_GROW(x, nr, alloc) \ 61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng do { \ 62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if ((nr) > alloc) { \ 63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (alloc_nr(alloc) < (nr)) \ 64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng alloc = (nr); \ 65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else \ 66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng alloc = alloc_nr(alloc); \ 67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng x = xrealloc((x), alloc * sizeof(*(x))); \ 68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } \ 69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } while(0) 70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int is_absolute_path(const char *path) 73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return path[0] == '/'; 75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengconst char *make_nonrelative_path(const char *path); 78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengchar *strip_path_suffix(const char *path, const char *suffix); 79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2))); 81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern char *perf_path(const char *fmt, ...) __attribute__((format (printf, 1, 2))); 82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern char *perf_pathdup(const char *fmt, ...) 84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng __attribute__((format (printf, 1, 2))); 85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifdef NO_STRLCPY 87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern size_t strlcpy(char *dest, const char *src, size_t size); 88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif 89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif /* __PERF_CACHE_H */ 91