37 #include "lrealpath.h"
53 #if defined(HAVE_CANONICALIZE_FILE_NAME) && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
54 extern char* canonicalize_file_name(
const char*);
57 #if defined(HAVE_REALPATH)
59 #define REALPATH_LIMIT PATH_MAX
61 #if defined(MAXPATHLEN)
62 #define REALPATH_LIMIT MAXPATHLEN
68 #define WIN32_LEAN_AND_MEAN
74 lrealpath(
const char* filename) {
79 #if defined(REALPATH_LIMIT)
81 char buf[REALPATH_LIMIT];
82 const char* rp = realpath(filename, buf);
92 #elif defined(HAVE_CANONICALIZE_FILE_NAME)
94 char* rp = canonicalize_file_name(filename);
96 return strdup(filename);
109 #elif defined(HAVE_REALPATH) && defined(HAVE_UNISTD_H)
112 long path_max = pathconf(
"/", _PC_PATH_MAX);
115 char *buf, *rp, *ret;
116 buf = (
char*)malloc(path_max);
119 rp = realpath(filename, buf);
120 ret = strdup(rp ? rp : filename);
135 #elif defined(_WIN32)
139 DWORD len = GetFullPathName(filename, MAX_PATH, buf, &basename);
140 if (len == 0 || len > MAX_PATH - 1)
141 return strdup(filename);
146 CharLowerBuff(buf, len);
153 return strdup(filename);