Blame view

kernel/linux-imx6_3.14.28/tools/perf/util/abspath.c 883 Bytes
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  #include "cache.h"
  
  static const char *get_pwd_cwd(void)
  {
  	static char cwd[PATH_MAX + 1];
  	char *pwd;
  	struct stat cwd_stat, pwd_stat;
  	if (getcwd(cwd, PATH_MAX) == NULL)
  		return NULL;
  	pwd = getenv("PWD");
  	if (pwd && strcmp(pwd, cwd)) {
  		stat(cwd, &cwd_stat);
  		if (!stat(pwd, &pwd_stat) &&
  		    pwd_stat.st_dev == cwd_stat.st_dev &&
  		    pwd_stat.st_ino == cwd_stat.st_ino) {
  			strlcpy(cwd, pwd, PATH_MAX);
  		}
  	}
  	return cwd;
  }
  
  const char *make_nonrelative_path(const char *path)
  {
  	static char buf[PATH_MAX + 1];
  
  	if (is_absolute_path(path)) {
  		if (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)
  			die("Too long path: %.*s", 60, path);
  	} else {
  		const char *cwd = get_pwd_cwd();
  		if (!cwd)
  			die("Cannot determine the current working directory");
  		if (snprintf(buf, PATH_MAX, "%s/%s", cwd, path) >= PATH_MAX)
  			die("Too long path: %.*s", 60, path);
  	}
  	return buf;
  }